@namzu/sdk 62.6.0 → 62.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/sandbox/file-walk.d.ts.map +1 -1
- package/dist/sandbox/file-walk.js +34 -17
- package/dist/sandbox/file-walk.js.map +1 -1
- package/dist/sandbox/glob-segment.d.ts +28 -0
- package/dist/sandbox/glob-segment.d.ts.map +1 -0
- package/dist/sandbox/glob-segment.js +281 -0
- package/dist/sandbox/glob-segment.js.map +1 -0
- package/package.json +2 -2
- package/src/sandbox/file-walk.ts +38 -17
- package/src/sandbox/glob-segment.ts +285 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 62.6.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- df1dcfb: The sandbox file walk no longer depends on minimatch 9, which carries GHSA-g3hv-75wg-m249 (denial of service through globparts amplification, fixed only from minimatch 11.0.1). The walk compiles each pattern segment itself, so `glob`, `grep` and `Sandbox.walkFiles` return the same files as before for nearly every pattern; the differences found are: `[ab]/**` no longer lets a root file named `a b.md` through; `@(a|b)*` and `+(a)*` now match the name `a` (and `b`), which minimatch 9 missed; `!(a)*` no longer matches the name `a` and `!(.a)*` with hidden entries included no longer matches `.a`; and `?(a)*` or `*(a)*` no longer match a dot name such as `.env` unless hidden entries are included. An out-of-order range such as `[z-a]` matches nothing rather than failing. `@namzu/sdk` now declares `minimatch` ^11.0.1; nothing you call changes except one refusal. A repeated extglob group that can match the same text more than one way (`*(*(a))`, `*(a|aa)`, `+(a|aa)`, `+(*.ts)`, `+(a|)`, `*(?(a))`) is now refused with an error ("The pattern '...' repeats a group that can match the same text more than one way; use ** or {a,b} instead."), as a fix for catastrophic backtracking on a name that nearly matches; `glob` and `grep` return it as a tool error and `Sandbox.walkFiles` rejects with it. Write `{a,b}` or `**` instead, or a repeated group of plain names none of which starts another (`+(foo|bar)`, `_(ab|cd)`) or of one class (`+([a-z])`), which still work, as do `@( )`, `?( )`and`!( )`. A segment with more than three wildcards that can stretch (each `_`, `_( )`and`+( )`, consecutive `_`counted once) is also refused, with "The pattern '...' has more than three wildcards that can stretch; split it across folders or use fewer *.", because matching a long name against four or more of them takes seconds;`*foo*bar*`and`*.test.*` still work, and splitting the pattern across folders (`\*\*/*a*/*b\*`) avoids the limit.
|
|
8
|
+
|
|
3
9
|
## 62.6.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-walk.d.ts","sourceRoot":"","sources":["../../src/sandbox/file-walk.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-walk.d.ts","sourceRoot":"","sources":["../../src/sandbox/file-walk.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EAEvB,MAAM,2BAA2B,CAAA;AAMlC,8FAA8F;AAC9F,eAAO,MAAM,2BAA2B,SAAU,CAAA;AAgXlD,oFAAoF;AACpF,wBAAuB,gBAAgB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,uBAAuB,GAC9B,cAAc,CAAC,gBAAgB,CAAC,CAGlC;AAED,kFAAkF;AAClF,MAAM,MAAM,mBAAmB,GAAG,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE,kBAAkB,KACxB,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAE/B;;;;GAIG;AACH,wBAAuB,gBAAgB,CACtC,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,uBAAuB,GAC9B,cAAc,CAAC,gBAAgB,CAAC,CAmJlC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { isAbsolute, join, posix } from 'node:path';
|
|
2
2
|
import braceExpansion from 'brace-expansion';
|
|
3
|
-
import { GLOBSTAR, Minimatch } from 'minimatch';
|
|
4
3
|
import { subscribeToAbort } from '../utils/abort.js';
|
|
5
4
|
import { FILE_WALK_PROGRAM } from './file-walk-program.js';
|
|
5
|
+
import { compileSegment } from './glob-segment.js';
|
|
6
6
|
import { VCS_NAMES, createIgnoreStack } from './ignore-matcher.js';
|
|
7
7
|
/** Entries a walk examines before it stops with what it has: a safety valve, not a budget. */
|
|
8
8
|
export const DEFAULT_MAX_VISITED_ENTRIES = 500_000;
|
|
9
|
+
const GLOBSTAR = Symbol('globstar');
|
|
9
10
|
// brace-expansion 2.1.4 implements these bounds; its older DefinitelyTyped
|
|
10
11
|
// declaration only describes the first argument.
|
|
11
12
|
const expandBraces = braceExpansion;
|
|
@@ -36,22 +37,25 @@ function planWalk(root, options) {
|
|
|
36
37
|
const branches = expandBraces(pattern, { max: 257, maxLength: Number.POSITIVE_INFINITY });
|
|
37
38
|
if (branches.length > 256)
|
|
38
39
|
throw new RangeError('File walk pattern exceeds 256 brace expansions');
|
|
39
|
-
const
|
|
40
|
+
const dot = options.includeHidden ?? false;
|
|
41
|
+
const sets = branches.map((branch) => {
|
|
40
42
|
if (branch.startsWith('/') || /^[a-z]:/i.test(branch) || branch.split('/').includes('..')) {
|
|
41
43
|
throw new Error('Expanded file walk pattern escapes its root');
|
|
42
44
|
}
|
|
43
|
-
return
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
return branch
|
|
46
|
+
.split('/')
|
|
47
|
+
.filter((segment, index, all) => segment !== '.' && (segment !== '' || index === all.length - 1))
|
|
48
|
+
.reduce((set, segment) => {
|
|
49
|
+
if (segment === '**') {
|
|
50
|
+
if (set[set.length - 1] !== GLOBSTAR)
|
|
51
|
+
set.push(GLOBSTAR);
|
|
52
|
+
return set;
|
|
53
|
+
}
|
|
54
|
+
const { literal, source } = compileSegment(segment, dot);
|
|
55
|
+
set.push(literal !== null ? literal : { source, flags: 'u' });
|
|
56
|
+
return set;
|
|
57
|
+
}, []);
|
|
50
58
|
});
|
|
51
|
-
const sets = matchers.flatMap((matcher) => matcher.set);
|
|
52
|
-
if (sets.some((set) => set.some((segment) => segment === '..'))) {
|
|
53
|
-
throw new Error('Expanded file walk pattern escapes its root');
|
|
54
|
-
}
|
|
55
59
|
const patternDepth = Math.max(1, ...sets.map((set) => (set.includes(GLOBSTAR) ? Number.POSITIVE_INFINITY : set.length)));
|
|
56
60
|
const maxDepth = Math.min(patternDepth, options.maxDepth === undefined
|
|
57
61
|
? Number.POSITIVE_INFINITY
|
|
@@ -66,10 +70,23 @@ function planWalk(root, options) {
|
|
|
66
70
|
break;
|
|
67
71
|
prefix.push(segment);
|
|
68
72
|
}
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
const hiddenGuard = dot ? '' : '(?!\\.)';
|
|
74
|
+
const expressions = sets.map((set) => ({
|
|
75
|
+
source: `^${set
|
|
76
|
+
.map((segment, index) => {
|
|
77
|
+
const last = index === set.length - 1;
|
|
78
|
+
if (segment === GLOBSTAR) {
|
|
79
|
+
const run = `(?:${hiddenGuard}[^/]+/)*`;
|
|
80
|
+
return last ? `${run}${hiddenGuard}[^/]+` : run;
|
|
81
|
+
}
|
|
82
|
+
const body = typeof segment === 'string'
|
|
83
|
+
? segment.replace(/[\\^$.*+?()[\]{}|/]/g, '\\$&')
|
|
84
|
+
: segment.source.slice(1, -1);
|
|
85
|
+
return last ? `(?:${body})` : `(?:${body})/`;
|
|
86
|
+
})
|
|
87
|
+
.join('')}$`,
|
|
88
|
+
flags: 'u',
|
|
89
|
+
}));
|
|
73
90
|
return {
|
|
74
91
|
root,
|
|
75
92
|
prefix,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-walk.js","sourceRoot":"","sources":["../../src/sandbox/file-walk.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"file-walk.js","sourceRoot":"","sources":["../../src/sandbox/file-walk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiles one path segment of a glob (no `/` in it) to the regular expression
|
|
3
|
+
* the file walk tests names with, in the same dialect the sandbox guest runs.
|
|
4
|
+
* It covers `*`, `?`, `[...]` classes (with `!`/`^` negation, ranges and POSIX
|
|
5
|
+
* classes), the five extglob forms and `\` escapes. A segment with no magic in
|
|
6
|
+
* it comes back as the plain name to compare against.
|
|
7
|
+
*/
|
|
8
|
+
export interface CompiledSegment {
|
|
9
|
+
/** Set when the segment has no magic: the exact name it matches. */
|
|
10
|
+
literal: string | null;
|
|
11
|
+
/** Source of an expression anchored with `^` and `$`, for a segment with magic. */
|
|
12
|
+
source: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Raised for a segment that repeats a group (`*( )` or `+( )`) which could match
|
|
16
|
+
* the same text more than one way. Such a group backtracks exponentially on a
|
|
17
|
+
* name that nearly matches, and glob patterns come from untrusted input.
|
|
18
|
+
*/
|
|
19
|
+
export declare class GlobTooComplexError extends Error {
|
|
20
|
+
readonly segment: string;
|
|
21
|
+
constructor(segment: string, reason?: 'ambiguous' | 'stretch');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* `dot` lets a wildcard match a name that starts with `.`; without it only a
|
|
25
|
+
* segment that itself begins with a literal `.` can.
|
|
26
|
+
*/
|
|
27
|
+
export declare function compileSegment(segment: string, dot: boolean): CompiledSegment;
|
|
28
|
+
//# sourceMappingURL=glob-segment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob-segment.d.ts","sourceRoot":"","sources":["../../src/sandbox/glob-segment.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,MAAM,WAAW,eAAe;IAC/B,oEAAoE;IACpE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;gBACZ,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,WAAW,GAAG,SAAuB;CAS1E;AAwND;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,eAAe,CAe7E"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiles one path segment of a glob (no `/` in it) to the regular expression
|
|
3
|
+
* the file walk tests names with, in the same dialect the sandbox guest runs.
|
|
4
|
+
* It covers `*`, `?`, `[...]` classes (with `!`/`^` negation, ranges and POSIX
|
|
5
|
+
* classes), the five extglob forms and `\` escapes. A segment with no magic in
|
|
6
|
+
* it comes back as the plain name to compare against.
|
|
7
|
+
*/
|
|
8
|
+
// Written for the `u` flag, which every compiled expression carries.
|
|
9
|
+
const POSIX_CLASSES = {
|
|
10
|
+
alnum: '\\p{L}\\p{Nl}\\p{Nd}',
|
|
11
|
+
alpha: '\\p{L}\\p{Nl}',
|
|
12
|
+
ascii: '\\x00-\\x7f',
|
|
13
|
+
blank: '\\p{Zs}\\t',
|
|
14
|
+
cntrl: '\\p{Cc}',
|
|
15
|
+
digit: '\\p{Nd}',
|
|
16
|
+
graph: '\\x21-\\x7e',
|
|
17
|
+
lower: '\\p{Ll}',
|
|
18
|
+
print: '\\x20-\\x7e',
|
|
19
|
+
punct: '\\p{P}\\p{S}',
|
|
20
|
+
space: '\\s',
|
|
21
|
+
upper: '\\p{Lu}',
|
|
22
|
+
word: '\\p{L}\\p{Nl}\\p{Nd}_',
|
|
23
|
+
xdigit: '0-9a-fA-F',
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Raised for a segment that repeats a group (`*( )` or `+( )`) which could match
|
|
27
|
+
* the same text more than one way. Such a group backtracks exponentially on a
|
|
28
|
+
* name that nearly matches, and glob patterns come from untrusted input.
|
|
29
|
+
*/
|
|
30
|
+
export class GlobTooComplexError extends Error {
|
|
31
|
+
segment;
|
|
32
|
+
constructor(segment, reason = 'ambiguous') {
|
|
33
|
+
super(reason === 'stretch'
|
|
34
|
+
? `The pattern '${segment}' has more than three wildcards that can stretch; split it across folders or use fewer *.`
|
|
35
|
+
: `The pattern '${segment}' repeats a group that can match the same text more than one way; use ** or {a,b} instead.`);
|
|
36
|
+
this.name = 'GlobTooComplexError';
|
|
37
|
+
this.segment = segment;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const escapeRegex = (text) => text.replace(/[\\^$.*+?()[\]{}|/]/g, '\\$&');
|
|
41
|
+
const escapeInClass = (text) => text.replace(/[\\^\]\[/-]/g, '\\$&');
|
|
42
|
+
/** Index of the `)` closing the group opened just before `from`, or -1. */
|
|
43
|
+
function closeGroup(text, from) {
|
|
44
|
+
let depth = 1;
|
|
45
|
+
for (let index = from; index < text.length; index += 1) {
|
|
46
|
+
const ch = text[index];
|
|
47
|
+
if (ch === '\\')
|
|
48
|
+
index += 1;
|
|
49
|
+
else if (ch === '[') {
|
|
50
|
+
const end = classEnd(text, index);
|
|
51
|
+
if (end > 0)
|
|
52
|
+
index = end;
|
|
53
|
+
}
|
|
54
|
+
else if (ch === '(')
|
|
55
|
+
depth += 1;
|
|
56
|
+
else if (ch === ')' && --depth === 0)
|
|
57
|
+
return index;
|
|
58
|
+
}
|
|
59
|
+
return -1;
|
|
60
|
+
}
|
|
61
|
+
/** Index of the `]` closing the class opened at `start`, or -1 when it never closes. */
|
|
62
|
+
function classEnd(text, start) {
|
|
63
|
+
let index = start + 1;
|
|
64
|
+
if (text[index] === '!' || text[index] === '^')
|
|
65
|
+
index += 1;
|
|
66
|
+
if (text[index] === ']')
|
|
67
|
+
index += 1;
|
|
68
|
+
for (; index < text.length; index += 1) {
|
|
69
|
+
const ch = text[index];
|
|
70
|
+
if (ch === '\\')
|
|
71
|
+
index += 1;
|
|
72
|
+
else if (ch === '[' && text[index + 1] === ':') {
|
|
73
|
+
const end = text.indexOf(':]', index + 2);
|
|
74
|
+
if (end > 0 && POSIX_CLASSES[text.slice(index + 2, end)])
|
|
75
|
+
index = end + 1;
|
|
76
|
+
}
|
|
77
|
+
else if (ch === ']')
|
|
78
|
+
return index;
|
|
79
|
+
}
|
|
80
|
+
return -1;
|
|
81
|
+
}
|
|
82
|
+
function splitAlternatives(body) {
|
|
83
|
+
const parts = [];
|
|
84
|
+
let depth = 0;
|
|
85
|
+
let current = '';
|
|
86
|
+
for (let index = 0; index < body.length; index += 1) {
|
|
87
|
+
const ch = body[index];
|
|
88
|
+
if (ch === '\\') {
|
|
89
|
+
current += ch + (body[index + 1] ?? '');
|
|
90
|
+
index += 1;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (ch === '[') {
|
|
94
|
+
const end = classEnd(body, index);
|
|
95
|
+
if (end > 0) {
|
|
96
|
+
current += body.slice(index, end + 1);
|
|
97
|
+
index = end;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (ch === '(')
|
|
102
|
+
depth += 1;
|
|
103
|
+
if (ch === ')')
|
|
104
|
+
depth -= 1;
|
|
105
|
+
if (ch === '|' && depth === 0) {
|
|
106
|
+
parts.push(current);
|
|
107
|
+
current = '';
|
|
108
|
+
}
|
|
109
|
+
else
|
|
110
|
+
current += ch;
|
|
111
|
+
}
|
|
112
|
+
parts.push(current);
|
|
113
|
+
return parts;
|
|
114
|
+
}
|
|
115
|
+
function classSource(body) {
|
|
116
|
+
let index = 0;
|
|
117
|
+
let negate = false;
|
|
118
|
+
if (body[0] === '!' || body[0] === '^') {
|
|
119
|
+
negate = true;
|
|
120
|
+
index = 1;
|
|
121
|
+
}
|
|
122
|
+
let out = '';
|
|
123
|
+
for (; index < body.length; index += 1) {
|
|
124
|
+
const ch = body[index];
|
|
125
|
+
if (ch === '[' && body[index + 1] === ':') {
|
|
126
|
+
const end = body.indexOf(':]', index + 2);
|
|
127
|
+
const name = end > 0 ? body.slice(index + 2, end) : '';
|
|
128
|
+
if (POSIX_CLASSES[name]) {
|
|
129
|
+
out += POSIX_CLASSES[name];
|
|
130
|
+
index = end + 1;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (ch === '\\' && index + 1 < body.length) {
|
|
135
|
+
index += 1;
|
|
136
|
+
out += escapeInClass(body[index]);
|
|
137
|
+
}
|
|
138
|
+
else if (ch === '-' && out !== '' && index + 1 < body.length)
|
|
139
|
+
out += '-';
|
|
140
|
+
else
|
|
141
|
+
out += escapeInClass(ch);
|
|
142
|
+
}
|
|
143
|
+
const source = `[${negate ? '^' : ''}${out}]`;
|
|
144
|
+
try {
|
|
145
|
+
new RegExp(source, 'u');
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// An out-of-order range such as `[z-a]` matches no name rather than failing the walk.
|
|
149
|
+
return '(?!)';
|
|
150
|
+
}
|
|
151
|
+
return source;
|
|
152
|
+
}
|
|
153
|
+
/** `guard`, when set, is put before each alternative of a group at the very start that does not itself spell out a leading `.`. */
|
|
154
|
+
function parse(text, guard = '') {
|
|
155
|
+
let source = '';
|
|
156
|
+
let literal = '';
|
|
157
|
+
let magic = false;
|
|
158
|
+
let runs = 0;
|
|
159
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
160
|
+
const ch = text[index];
|
|
161
|
+
const next = text[index + 1];
|
|
162
|
+
if (ch === '\\') {
|
|
163
|
+
if (next === undefined) {
|
|
164
|
+
source += '\\\\';
|
|
165
|
+
literal += '\\';
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
source += escapeRegex(next);
|
|
169
|
+
literal += next;
|
|
170
|
+
index += 1;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else if (ch === '*' && next !== '(') {
|
|
174
|
+
while (text[index + 1] === '*')
|
|
175
|
+
index += 1;
|
|
176
|
+
source += '[^/]*?';
|
|
177
|
+
runs += 1;
|
|
178
|
+
magic = true;
|
|
179
|
+
}
|
|
180
|
+
else if (ch === '?' && next !== '(') {
|
|
181
|
+
source += '[^/]';
|
|
182
|
+
magic = true;
|
|
183
|
+
}
|
|
184
|
+
else if (ch === '[') {
|
|
185
|
+
const end = classEnd(text, index);
|
|
186
|
+
if (end < 0) {
|
|
187
|
+
source += '\\[';
|
|
188
|
+
literal += '[';
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
source += classSource(text.slice(index + 1, end));
|
|
192
|
+
magic = true;
|
|
193
|
+
index = end;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else if ('?*+@!'.includes(ch) && next === '(') {
|
|
197
|
+
const end = closeGroup(text, index + 2);
|
|
198
|
+
if (end < 0) {
|
|
199
|
+
source += escapeRegex(ch);
|
|
200
|
+
literal += ch;
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
const parts = splitAlternatives(text.slice(index + 2, end)).map((a) => ({
|
|
204
|
+
a,
|
|
205
|
+
parsed: parse(a),
|
|
206
|
+
}));
|
|
207
|
+
// A repeated group is linear only when each repetition can be read one way:
|
|
208
|
+
// plain literal alternatives, none a prefix of another (and none empty).
|
|
209
|
+
if (ch === '*' || ch === '+') {
|
|
210
|
+
const literals = parts.map((part) => part.parsed.literal);
|
|
211
|
+
// A lone class is one character wide, so each repetition has one reading.
|
|
212
|
+
const lone = parts.length === 1 && isOneClass(parts[0]?.a ?? '');
|
|
213
|
+
const plain = lone || parts.every((part) => !part.parsed.magic);
|
|
214
|
+
const prefixFree = lone ||
|
|
215
|
+
literals.every((one, i) => one !== '' && literals.every((other, j) => i === j || !other.startsWith(one)));
|
|
216
|
+
if (!plain || !prefixFree)
|
|
217
|
+
throw new GlobTooComplexError(text);
|
|
218
|
+
}
|
|
219
|
+
const alternatives = parts.map(({ a, parsed }) => (index === 0 && !startsWithDot(a) ? guard : '') + parsed.source);
|
|
220
|
+
const group = `(?:${alternatives.join('|')})`;
|
|
221
|
+
runs +=
|
|
222
|
+
parts.reduce((sum, part) => sum + part.parsed.runs, 0) + (ch === '*' || ch === '+' ? 1 : 0);
|
|
223
|
+
magic = true;
|
|
224
|
+
if (ch === '!') {
|
|
225
|
+
const tail = parse(text.slice(end + 1));
|
|
226
|
+
const rest = tail.source;
|
|
227
|
+
source += `(?:(?!${group}${rest}$)[^/]*?)${rest}`;
|
|
228
|
+
return { source, literal, magic, runs: runs + 1 + tail.runs };
|
|
229
|
+
}
|
|
230
|
+
source += ch === '@' ? group : `${group}${ch === '?' ? '?' : ch === '*' ? '*' : '+'}`;
|
|
231
|
+
index = end;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
source += escapeRegex(ch);
|
|
235
|
+
literal += ch;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return { source, literal, magic, runs };
|
|
239
|
+
}
|
|
240
|
+
/** Whether the text is exactly one closed `[...]` class. */
|
|
241
|
+
function isOneClass(text) {
|
|
242
|
+
return text.startsWith('[') && classEnd(text, 0) === text.length - 1;
|
|
243
|
+
}
|
|
244
|
+
/** Whether every name this segment can match begins with a literal `.` the pattern spells out. */
|
|
245
|
+
function startsWithDot(text) {
|
|
246
|
+
if (text.startsWith('.') || text.startsWith('\\.'))
|
|
247
|
+
return true;
|
|
248
|
+
if (text.startsWith('[')) {
|
|
249
|
+
const end = classEnd(text, 0);
|
|
250
|
+
return end > 0 && text.slice(1, end) === '.';
|
|
251
|
+
}
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
/** Whether the segment is a single `?(`, `*(`, `@(` or `+(` group, whose alternatives carry the leading-dot guard themselves. */
|
|
255
|
+
function isOneGroup(text) {
|
|
256
|
+
return ('?*@+'.includes(text[0] ?? '') && text[1] === '(' && closeGroup(text, 2) === text.length - 1);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* `dot` lets a wildcard match a name that starts with `.`; without it only a
|
|
260
|
+
* segment that itself begins with a literal `.` can.
|
|
261
|
+
*/
|
|
262
|
+
export function compileSegment(segment, dot) {
|
|
263
|
+
const guard = dot ? '' : '(?!\\.)';
|
|
264
|
+
let parsed;
|
|
265
|
+
try {
|
|
266
|
+
parsed = parse(segment, guard);
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
throw error instanceof GlobTooComplexError
|
|
270
|
+
? new GlobTooComplexError(segment, 'ambiguous')
|
|
271
|
+
: error;
|
|
272
|
+
}
|
|
273
|
+
if (parsed.runs > 3)
|
|
274
|
+
throw new GlobTooComplexError(segment, 'stretch');
|
|
275
|
+
if (!parsed.magic)
|
|
276
|
+
return { literal: parsed.literal, source: `^${parsed.source}$` };
|
|
277
|
+
const grouped = (segment.startsWith('@(') || segment.startsWith('+(')) && !dot;
|
|
278
|
+
const lead = grouped || dot || startsWithDot(segment) || isOneGroup(segment) ? '' : guard;
|
|
279
|
+
return { literal: null, source: `^${lead}(?:${parsed.source})$` };
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=glob-segment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob-segment.js","sourceRoot":"","sources":["../../src/sandbox/glob-segment.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@namzu/sdk",
|
|
3
|
-
"version": "62.6.
|
|
3
|
+
"version": "62.6.1",
|
|
4
4
|
"description": "Open-source AI kernel for TypeScript: runs an agent the way an operating system runs a process, with an identity and a budget, scheduled tool calls and checkpointed turns.",
|
|
5
5
|
"license": "FSL-1.1-MIT",
|
|
6
6
|
"engines": {
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"brace-expansion": "^2.1.7",
|
|
90
90
|
"diff": "9.0.0",
|
|
91
91
|
"fast-png": "^8.0.0",
|
|
92
|
-
"minimatch": "^
|
|
92
|
+
"minimatch": "^11.0.1",
|
|
93
93
|
"pica": "^10.0.3",
|
|
94
94
|
"quickjs-emscripten-core": "0.32.0",
|
|
95
95
|
"turndown": "^7.2.4",
|
package/src/sandbox/file-walk.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { isAbsolute, join, posix } from 'node:path'
|
|
2
2
|
import braceExpansion from 'brace-expansion'
|
|
3
|
-
import { GLOBSTAR, Minimatch } from 'minimatch'
|
|
4
3
|
import type {
|
|
5
4
|
SandboxExecOptions,
|
|
6
5
|
SandboxExecResult,
|
|
@@ -10,11 +9,15 @@ import type {
|
|
|
10
9
|
} from '../types/sandbox/index.js'
|
|
11
10
|
import { subscribeToAbort } from '../utils/abort.js'
|
|
12
11
|
import { FILE_WALK_PROGRAM } from './file-walk-program.js'
|
|
12
|
+
import { compileSegment } from './glob-segment.js'
|
|
13
13
|
import { VCS_NAMES, createIgnoreStack } from './ignore-matcher.js'
|
|
14
14
|
|
|
15
15
|
/** Entries a walk examines before it stops with what it has: a safety valve, not a budget. */
|
|
16
16
|
export const DEFAULT_MAX_VISITED_ENTRIES = 500_000
|
|
17
17
|
|
|
18
|
+
const GLOBSTAR = Symbol('globstar')
|
|
19
|
+
type Segment = string | { source: string; flags: string } | typeof GLOBSTAR
|
|
20
|
+
|
|
18
21
|
interface WalkPlan {
|
|
19
22
|
root: string
|
|
20
23
|
prefix: string[]
|
|
@@ -62,22 +65,26 @@ function planWalk(root: string, options: SandboxWalkFilesOptions): WalkPlan {
|
|
|
62
65
|
// that cap can silently truncate before our extra branch proves incompleteness.
|
|
63
66
|
const branches = expandBraces(pattern, { max: 257, maxLength: Number.POSITIVE_INFINITY })
|
|
64
67
|
if (branches.length > 256) throw new RangeError('File walk pattern exceeds 256 brace expansions')
|
|
65
|
-
const
|
|
68
|
+
const dot = options.includeHidden ?? false
|
|
69
|
+
const sets = branches.map((branch) => {
|
|
66
70
|
if (branch.startsWith('/') || /^[a-z]:/i.test(branch) || branch.split('/').includes('..')) {
|
|
67
71
|
throw new Error('Expanded file walk pattern escapes its root')
|
|
68
72
|
}
|
|
69
|
-
return
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
return branch
|
|
74
|
+
.split('/')
|
|
75
|
+
.filter(
|
|
76
|
+
(segment, index, all) => segment !== '.' && (segment !== '' || index === all.length - 1),
|
|
77
|
+
)
|
|
78
|
+
.reduce<Segment[]>((set, segment) => {
|
|
79
|
+
if (segment === '**') {
|
|
80
|
+
if (set[set.length - 1] !== GLOBSTAR) set.push(GLOBSTAR)
|
|
81
|
+
return set
|
|
82
|
+
}
|
|
83
|
+
const { literal, source } = compileSegment(segment, dot)
|
|
84
|
+
set.push(literal !== null ? literal : { source, flags: 'u' })
|
|
85
|
+
return set
|
|
86
|
+
}, [])
|
|
76
87
|
})
|
|
77
|
-
const sets = matchers.flatMap((matcher) => matcher.set)
|
|
78
|
-
if (sets.some((set) => set.some((segment) => segment === '..'))) {
|
|
79
|
-
throw new Error('Expanded file walk pattern escapes its root')
|
|
80
|
-
}
|
|
81
88
|
const patternDepth = Math.max(
|
|
82
89
|
1,
|
|
83
90
|
...sets.map((set) => (set.includes(GLOBSTAR) ? Number.POSITIVE_INFINITY : set.length)),
|
|
@@ -100,10 +107,24 @@ function planWalk(root: string, options: SandboxWalkFilesOptions): WalkPlan {
|
|
|
100
107
|
break
|
|
101
108
|
prefix.push(segment)
|
|
102
109
|
}
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
110
|
+
const hiddenGuard = dot ? '' : '(?!\\.)'
|
|
111
|
+
const expressions = sets.map((set) => ({
|
|
112
|
+
source: `^${set
|
|
113
|
+
.map((segment, index) => {
|
|
114
|
+
const last = index === set.length - 1
|
|
115
|
+
if (segment === GLOBSTAR) {
|
|
116
|
+
const run = `(?:${hiddenGuard}[^/]+/)*`
|
|
117
|
+
return last ? `${run}${hiddenGuard}[^/]+` : run
|
|
118
|
+
}
|
|
119
|
+
const body =
|
|
120
|
+
typeof segment === 'string'
|
|
121
|
+
? segment.replace(/[\\^$.*+?()[\]{}|/]/g, '\\$&')
|
|
122
|
+
: segment.source.slice(1, -1)
|
|
123
|
+
return last ? `(?:${body})` : `(?:${body})/`
|
|
124
|
+
})
|
|
125
|
+
.join('')}$`,
|
|
126
|
+
flags: 'u',
|
|
127
|
+
}))
|
|
107
128
|
return {
|
|
108
129
|
root,
|
|
109
130
|
prefix,
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiles one path segment of a glob (no `/` in it) to the regular expression
|
|
3
|
+
* the file walk tests names with, in the same dialect the sandbox guest runs.
|
|
4
|
+
* It covers `*`, `?`, `[...]` classes (with `!`/`^` negation, ranges and POSIX
|
|
5
|
+
* classes), the five extglob forms and `\` escapes. A segment with no magic in
|
|
6
|
+
* it comes back as the plain name to compare against.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// Written for the `u` flag, which every compiled expression carries.
|
|
10
|
+
const POSIX_CLASSES: Record<string, string> = {
|
|
11
|
+
alnum: '\\p{L}\\p{Nl}\\p{Nd}',
|
|
12
|
+
alpha: '\\p{L}\\p{Nl}',
|
|
13
|
+
ascii: '\\x00-\\x7f',
|
|
14
|
+
blank: '\\p{Zs}\\t',
|
|
15
|
+
cntrl: '\\p{Cc}',
|
|
16
|
+
digit: '\\p{Nd}',
|
|
17
|
+
graph: '\\x21-\\x7e',
|
|
18
|
+
lower: '\\p{Ll}',
|
|
19
|
+
print: '\\x20-\\x7e',
|
|
20
|
+
punct: '\\p{P}\\p{S}',
|
|
21
|
+
space: '\\s',
|
|
22
|
+
upper: '\\p{Lu}',
|
|
23
|
+
word: '\\p{L}\\p{Nl}\\p{Nd}_',
|
|
24
|
+
xdigit: '0-9a-fA-F',
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface CompiledSegment {
|
|
28
|
+
/** Set when the segment has no magic: the exact name it matches. */
|
|
29
|
+
literal: string | null
|
|
30
|
+
/** Source of an expression anchored with `^` and `$`, for a segment with magic. */
|
|
31
|
+
source: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Raised for a segment that repeats a group (`*( )` or `+( )`) which could match
|
|
36
|
+
* the same text more than one way. Such a group backtracks exponentially on a
|
|
37
|
+
* name that nearly matches, and glob patterns come from untrusted input.
|
|
38
|
+
*/
|
|
39
|
+
export class GlobTooComplexError extends Error {
|
|
40
|
+
readonly segment: string
|
|
41
|
+
constructor(segment: string, reason: 'ambiguous' | 'stretch' = 'ambiguous') {
|
|
42
|
+
super(
|
|
43
|
+
reason === 'stretch'
|
|
44
|
+
? `The pattern '${segment}' has more than three wildcards that can stretch; split it across folders or use fewer *.`
|
|
45
|
+
: `The pattern '${segment}' repeats a group that can match the same text more than one way; use ** or {a,b} instead.`,
|
|
46
|
+
)
|
|
47
|
+
this.name = 'GlobTooComplexError'
|
|
48
|
+
this.segment = segment
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const escapeRegex = (text: string) => text.replace(/[\\^$.*+?()[\]{}|/]/g, '\\$&')
|
|
53
|
+
const escapeInClass = (text: string) => text.replace(/[\\^\]\[/-]/g, '\\$&')
|
|
54
|
+
|
|
55
|
+
interface Parsed {
|
|
56
|
+
source: string
|
|
57
|
+
literal: string
|
|
58
|
+
magic: boolean
|
|
59
|
+
/** Unbounded runs: each `*` (consecutive ones collapsed), `*( )` and `+( )`. */
|
|
60
|
+
runs: number
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Index of the `)` closing the group opened just before `from`, or -1. */
|
|
64
|
+
function closeGroup(text: string, from: number): number {
|
|
65
|
+
let depth = 1
|
|
66
|
+
for (let index = from; index < text.length; index += 1) {
|
|
67
|
+
const ch = text[index]
|
|
68
|
+
if (ch === '\\') index += 1
|
|
69
|
+
else if (ch === '[') {
|
|
70
|
+
const end = classEnd(text, index)
|
|
71
|
+
if (end > 0) index = end
|
|
72
|
+
} else if (ch === '(') depth += 1
|
|
73
|
+
else if (ch === ')' && --depth === 0) return index
|
|
74
|
+
}
|
|
75
|
+
return -1
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Index of the `]` closing the class opened at `start`, or -1 when it never closes. */
|
|
79
|
+
function classEnd(text: string, start: number): number {
|
|
80
|
+
let index = start + 1
|
|
81
|
+
if (text[index] === '!' || text[index] === '^') index += 1
|
|
82
|
+
if (text[index] === ']') index += 1
|
|
83
|
+
for (; index < text.length; index += 1) {
|
|
84
|
+
const ch = text[index]
|
|
85
|
+
if (ch === '\\') index += 1
|
|
86
|
+
else if (ch === '[' && text[index + 1] === ':') {
|
|
87
|
+
const end = text.indexOf(':]', index + 2)
|
|
88
|
+
if (end > 0 && POSIX_CLASSES[text.slice(index + 2, end)]) index = end + 1
|
|
89
|
+
} else if (ch === ']') return index
|
|
90
|
+
}
|
|
91
|
+
return -1
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function splitAlternatives(body: string): string[] {
|
|
95
|
+
const parts: string[] = []
|
|
96
|
+
let depth = 0
|
|
97
|
+
let current = ''
|
|
98
|
+
for (let index = 0; index < body.length; index += 1) {
|
|
99
|
+
const ch = body[index] as string
|
|
100
|
+
if (ch === '\\') {
|
|
101
|
+
current += ch + (body[index + 1] ?? '')
|
|
102
|
+
index += 1
|
|
103
|
+
continue
|
|
104
|
+
}
|
|
105
|
+
if (ch === '[') {
|
|
106
|
+
const end = classEnd(body, index)
|
|
107
|
+
if (end > 0) {
|
|
108
|
+
current += body.slice(index, end + 1)
|
|
109
|
+
index = end
|
|
110
|
+
continue
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (ch === '(') depth += 1
|
|
114
|
+
if (ch === ')') depth -= 1
|
|
115
|
+
if (ch === '|' && depth === 0) {
|
|
116
|
+
parts.push(current)
|
|
117
|
+
current = ''
|
|
118
|
+
} else current += ch
|
|
119
|
+
}
|
|
120
|
+
parts.push(current)
|
|
121
|
+
return parts
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function classSource(body: string): string {
|
|
125
|
+
let index = 0
|
|
126
|
+
let negate = false
|
|
127
|
+
if (body[0] === '!' || body[0] === '^') {
|
|
128
|
+
negate = true
|
|
129
|
+
index = 1
|
|
130
|
+
}
|
|
131
|
+
let out = ''
|
|
132
|
+
for (; index < body.length; index += 1) {
|
|
133
|
+
const ch = body[index] as string
|
|
134
|
+
if (ch === '[' && body[index + 1] === ':') {
|
|
135
|
+
const end = body.indexOf(':]', index + 2)
|
|
136
|
+
const name = end > 0 ? body.slice(index + 2, end) : ''
|
|
137
|
+
if (POSIX_CLASSES[name]) {
|
|
138
|
+
out += POSIX_CLASSES[name]
|
|
139
|
+
index = end + 1
|
|
140
|
+
continue
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (ch === '\\' && index + 1 < body.length) {
|
|
144
|
+
index += 1
|
|
145
|
+
out += escapeInClass(body[index] as string)
|
|
146
|
+
} else if (ch === '-' && out !== '' && index + 1 < body.length) out += '-'
|
|
147
|
+
else out += escapeInClass(ch)
|
|
148
|
+
}
|
|
149
|
+
const source = `[${negate ? '^' : ''}${out}]`
|
|
150
|
+
try {
|
|
151
|
+
new RegExp(source, 'u')
|
|
152
|
+
} catch {
|
|
153
|
+
// An out-of-order range such as `[z-a]` matches no name rather than failing the walk.
|
|
154
|
+
return '(?!)'
|
|
155
|
+
}
|
|
156
|
+
return source
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** `guard`, when set, is put before each alternative of a group at the very start that does not itself spell out a leading `.`. */
|
|
160
|
+
function parse(text: string, guard = ''): Parsed {
|
|
161
|
+
let source = ''
|
|
162
|
+
let literal = ''
|
|
163
|
+
let magic = false
|
|
164
|
+
let runs = 0
|
|
165
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
166
|
+
const ch = text[index] as string
|
|
167
|
+
const next = text[index + 1]
|
|
168
|
+
if (ch === '\\') {
|
|
169
|
+
if (next === undefined) {
|
|
170
|
+
source += '\\\\'
|
|
171
|
+
literal += '\\'
|
|
172
|
+
} else {
|
|
173
|
+
source += escapeRegex(next)
|
|
174
|
+
literal += next
|
|
175
|
+
index += 1
|
|
176
|
+
}
|
|
177
|
+
} else if (ch === '*' && next !== '(') {
|
|
178
|
+
while (text[index + 1] === '*') index += 1
|
|
179
|
+
source += '[^/]*?'
|
|
180
|
+
runs += 1
|
|
181
|
+
magic = true
|
|
182
|
+
} else if (ch === '?' && next !== '(') {
|
|
183
|
+
source += '[^/]'
|
|
184
|
+
magic = true
|
|
185
|
+
} else if (ch === '[') {
|
|
186
|
+
const end = classEnd(text, index)
|
|
187
|
+
if (end < 0) {
|
|
188
|
+
source += '\\['
|
|
189
|
+
literal += '['
|
|
190
|
+
} else {
|
|
191
|
+
source += classSource(text.slice(index + 1, end))
|
|
192
|
+
magic = true
|
|
193
|
+
index = end
|
|
194
|
+
}
|
|
195
|
+
} else if ('?*+@!'.includes(ch) && next === '(') {
|
|
196
|
+
const end = closeGroup(text, index + 2)
|
|
197
|
+
if (end < 0) {
|
|
198
|
+
source += escapeRegex(ch)
|
|
199
|
+
literal += ch
|
|
200
|
+
continue
|
|
201
|
+
}
|
|
202
|
+
const parts = splitAlternatives(text.slice(index + 2, end)).map((a) => ({
|
|
203
|
+
a,
|
|
204
|
+
parsed: parse(a),
|
|
205
|
+
}))
|
|
206
|
+
// A repeated group is linear only when each repetition can be read one way:
|
|
207
|
+
// plain literal alternatives, none a prefix of another (and none empty).
|
|
208
|
+
if (ch === '*' || ch === '+') {
|
|
209
|
+
const literals = parts.map((part) => part.parsed.literal)
|
|
210
|
+
// A lone class is one character wide, so each repetition has one reading.
|
|
211
|
+
const lone = parts.length === 1 && isOneClass(parts[0]?.a ?? '')
|
|
212
|
+
const plain = lone || parts.every((part) => !part.parsed.magic)
|
|
213
|
+
const prefixFree =
|
|
214
|
+
lone ||
|
|
215
|
+
literals.every(
|
|
216
|
+
(one, i) =>
|
|
217
|
+
one !== '' && literals.every((other, j) => i === j || !other.startsWith(one)),
|
|
218
|
+
)
|
|
219
|
+
if (!plain || !prefixFree) throw new GlobTooComplexError(text)
|
|
220
|
+
}
|
|
221
|
+
const alternatives = parts.map(
|
|
222
|
+
({ a, parsed }) => (index === 0 && !startsWithDot(a) ? guard : '') + parsed.source,
|
|
223
|
+
)
|
|
224
|
+
const group = `(?:${alternatives.join('|')})`
|
|
225
|
+
runs +=
|
|
226
|
+
parts.reduce((sum, part) => sum + part.parsed.runs, 0) + (ch === '*' || ch === '+' ? 1 : 0)
|
|
227
|
+
magic = true
|
|
228
|
+
if (ch === '!') {
|
|
229
|
+
const tail = parse(text.slice(end + 1))
|
|
230
|
+
const rest = tail.source
|
|
231
|
+
source += `(?:(?!${group}${rest}$)[^/]*?)${rest}`
|
|
232
|
+
return { source, literal, magic, runs: runs + 1 + tail.runs }
|
|
233
|
+
}
|
|
234
|
+
source += ch === '@' ? group : `${group}${ch === '?' ? '?' : ch === '*' ? '*' : '+'}`
|
|
235
|
+
index = end
|
|
236
|
+
} else {
|
|
237
|
+
source += escapeRegex(ch)
|
|
238
|
+
literal += ch
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return { source, literal, magic, runs }
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/** Whether the text is exactly one closed `[...]` class. */
|
|
245
|
+
function isOneClass(text: string): boolean {
|
|
246
|
+
return text.startsWith('[') && classEnd(text, 0) === text.length - 1
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/** Whether every name this segment can match begins with a literal `.` the pattern spells out. */
|
|
250
|
+
function startsWithDot(text: string): boolean {
|
|
251
|
+
if (text.startsWith('.') || text.startsWith('\\.')) return true
|
|
252
|
+
if (text.startsWith('[')) {
|
|
253
|
+
const end = classEnd(text, 0)
|
|
254
|
+
return end > 0 && text.slice(1, end) === '.'
|
|
255
|
+
}
|
|
256
|
+
return false
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/** Whether the segment is a single `?(`, `*(`, `@(` or `+(` group, whose alternatives carry the leading-dot guard themselves. */
|
|
260
|
+
function isOneGroup(text: string): boolean {
|
|
261
|
+
return (
|
|
262
|
+
'?*@+'.includes(text[0] ?? '') && text[1] === '(' && closeGroup(text, 2) === text.length - 1
|
|
263
|
+
)
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* `dot` lets a wildcard match a name that starts with `.`; without it only a
|
|
268
|
+
* segment that itself begins with a literal `.` can.
|
|
269
|
+
*/
|
|
270
|
+
export function compileSegment(segment: string, dot: boolean): CompiledSegment {
|
|
271
|
+
const guard = dot ? '' : '(?!\\.)'
|
|
272
|
+
let parsed: Parsed
|
|
273
|
+
try {
|
|
274
|
+
parsed = parse(segment, guard)
|
|
275
|
+
} catch (error) {
|
|
276
|
+
throw error instanceof GlobTooComplexError
|
|
277
|
+
? new GlobTooComplexError(segment, 'ambiguous')
|
|
278
|
+
: error
|
|
279
|
+
}
|
|
280
|
+
if (parsed.runs > 3) throw new GlobTooComplexError(segment, 'stretch')
|
|
281
|
+
if (!parsed.magic) return { literal: parsed.literal, source: `^${parsed.source}$` }
|
|
282
|
+
const grouped = (segment.startsWith('@(') || segment.startsWith('+(')) && !dot
|
|
283
|
+
const lead = grouped || dot || startsWithDot(segment) || isOneGroup(segment) ? '' : guard
|
|
284
|
+
return { literal: null, source: `^${lead}(?:${parsed.source})$` }
|
|
285
|
+
}
|