Skip to content

Commit 70b6bd9

Browse files
committed
Cut back on more 'caught exceptions' from vfs
1 parent dfef2fa commit 70b6bd9

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

src/harness/fakes.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ namespace fakes {
150150

151151
private _getStats(path: string) {
152152
try {
153-
return this.vfs.statSync(path);
153+
return this.vfs.existsSync(path) ? this.vfs.statSync(path) : undefined;
154154
}
155155
catch {
156156
return undefined;
@@ -332,7 +332,7 @@ namespace fakes {
332332
let fs = this.vfs;
333333
while (fs.shadowRoot) {
334334
try {
335-
const shadowRootStats = fs.shadowRoot.statSync(canonicalFileName);
335+
const shadowRootStats = fs.shadowRoot.existsSync(canonicalFileName) && fs.shadowRoot.statSync(canonicalFileName);
336336
if (shadowRootStats.dev !== stats.dev ||
337337
shadowRootStats.ino !== stats.ino ||
338338
shadowRootStats.mtimeMs !== stats.mtimeMs) {

src/harness/vfs.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,14 @@ namespace vfs {
384384

385385
// POSIX API (aligns with NodeJS "fs" module API)
386386

387+
/**
388+
* Determines whether a path exists.
389+
*/
390+
public existsSync(path: string) {
391+
const result = this._walk(this._resolve(path), /*noFollow*/ true, () => "stop");
392+
return result !== undefined && result.node !== undefined;
393+
}
394+
387395
/**
388396
* Get file status. If `path` is a symbolic link, it is dereferenced.
389397
*
@@ -861,8 +869,8 @@ namespace vfs {
861869
*/
862870
private _resolve(path: string) {
863871
return this._cwd
864-
? vpath.resolve(this._cwd, vpath.validate(path, vpath.ValidationFlags.RelativeOrAbsolute))
865-
: vpath.validate(path, vpath.ValidationFlags.Absolute);
872+
? vpath.resolve(this._cwd, vpath.validate(path, vpath.ValidationFlags.RelativeOrAbsolute | vpath.ValidationFlags.AllowWildcard))
873+
: vpath.validate(path, vpath.ValidationFlags.Absolute | vpath.ValidationFlags.AllowWildcard);
866874
}
867875

868876
private _applyFiles(files: FileSet, dirname: string) {

src/harness/vpath.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ namespace vpath {
2626

2727
const invalidRootComponentRegExp = /^(?!(\/|\/\/\w+\/|[a-zA-Z]:\/?|)$)/;
2828
const invalidNavigableComponentRegExp = /[:*?"<>|]/;
29+
const invalidNavigableComponentWithWildcardsRegExp = /[:"<>|]/;
2930
const invalidNonNavigableComponentRegExp = /^\.{1,2}$|[:*?"<>|]/;
31+
const invalidNonNavigableComponentWithWildcardsRegExp = /^\.{1,2}$|[:"<>|]/;
3032
const extRegExp = /\.\w+$/;
3133

3234
export const enum ValidationFlags {
@@ -44,6 +46,7 @@ namespace vpath {
4446
AllowExtname = 1 << 8,
4547
AllowTrailingSeparator = 1 << 9,
4648
AllowNavigation = 1 << 10,
49+
AllowWildcard = 1 << 11,
4750

4851
/** Path must be a valid directory root */
4952
Root = RequireRoot | AllowRoot | AllowTrailingSeparator,
@@ -63,7 +66,9 @@ namespace vpath {
6366
const hasDirname = components.length > 2;
6467
const hasBasename = components.length > 1;
6568
const hasExtname = hasBasename && extRegExp.test(components[components.length - 1]);
66-
const invalidComponentRegExp = flags & ValidationFlags.AllowNavigation ? invalidNavigableComponentRegExp : invalidNonNavigableComponentRegExp;
69+
const invalidComponentRegExp = flags & ValidationFlags.AllowNavigation
70+
? flags & ValidationFlags.AllowWildcard ? invalidNavigableComponentWithWildcardsRegExp : invalidNavigableComponentRegExp
71+
: flags & ValidationFlags.AllowWildcard ? invalidNonNavigableComponentWithWildcardsRegExp : invalidNonNavigableComponentRegExp;
6772

6873
// Validate required components
6974
if (flags & ValidationFlags.RequireRoot && !hasRoot) return false;

0 commit comments

Comments
 (0)