sh-ast 0.5.0 → 0.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/README.md +35 -4
- package/dist/analyze/brace-observation.d.ts +18 -0
- package/dist/analyze/brace-observation.d.ts.map +1 -0
- package/dist/analyze/brace-observation.js +59 -0
- package/dist/analyze/brace-observation.js.map +1 -0
- package/dist/analyze/resolve-argv0.d.ts +32 -8
- package/dist/analyze/resolve-argv0.d.ts.map +1 -1
- package/dist/analyze/resolve-argv0.js +49 -9
- package/dist/analyze/resolve-argv0.js.map +1 -1
- package/dist/analyze/resolve-word.d.ts +21 -13
- package/dist/analyze/resolve-word.d.ts.map +1 -1
- package/dist/analyze/resolve-word.js +8 -3
- package/dist/analyze/resolve-word.js.map +1 -1
- package/dist/analyze.d.ts +53 -21
- package/dist/sh-ast.d.ts +1 -1
- package/dist/syntax-snapshot.d.ts +4 -5
- package/dist/syntax-snapshot.d.ts.map +1 -1
- package/dist/syntax-snapshot.js +86 -69
- package/dist/syntax-snapshot.js.map +1 -1
- package/dist/syntax-wire.d.ts +2 -0
- package/dist/syntax-wire.d.ts.map +1 -1
- package/dist/syntax-wire.js +28 -4
- package/dist/syntax-wire.js.map +1 -1
- package/dist/syntax.d.ts.map +1 -1
- package/dist/syntax.js +4 -1
- package/dist/syntax.js.map +1 -1
- package/generated/syntax-schema.d.ts +2 -2
- package/generated/syntax-schema.js +1 -1
- package/package.json +1 -1
- package/shim/sh-ast.wasm +0 -0
package/README.md
CHANGED
|
@@ -155,6 +155,19 @@ as a fix without mutating their original lint view or traversal cache.
|
|
|
155
155
|
command, and wrapper analysis consumes the faithful records; it does not define
|
|
156
156
|
parser behavior or the core tree representation.
|
|
157
157
|
|
|
158
|
+
`resolveArgv0` follows only documented wrapper grammars. The default `env` and
|
|
159
|
+
`sudo` entries accept assignment names beyond shell identifiers, such as `A-B`
|
|
160
|
+
or `名`. `env` recognizes assignments after `--` and ends option scanning at its
|
|
161
|
+
first assignment; `sudo` permits options between assignments, excludes names
|
|
162
|
+
beginning with `/` or `=`, and stops recognizing assignments after `--`. An empty
|
|
163
|
+
`env` assignment name (`=value`) reports `ambiguous-assignment`, since supported
|
|
164
|
+
implementations differ. These are syntactic facts, not execution guarantees.
|
|
165
|
+
Custom tables can choose `WrapperSpec.assignmentOperands` (`'shell-identifier'`,
|
|
166
|
+
`'env'`, or `'sudo'`); this explicit grammar overrides `skipAssignmentOperands`.
|
|
167
|
+
Existing `skipAssignmentOperands: true` tables retain their ASCII shell-identifier
|
|
168
|
+
rule before `--`. Wrapper assignment operands do not change `assignmentsSkipped`,
|
|
169
|
+
which counts only shell-level prefixes.
|
|
170
|
+
|
|
158
171
|
## Migration from 0.3
|
|
159
172
|
|
|
160
173
|
Fields now use upstream spelling (`Type`, `Stmts`, `Cmd`, `Value`) and explicit
|
|
@@ -200,16 +213,34 @@ guessing at current behavior, and is pinned by `test/dialect-matrix.test.ts`.
|
|
|
200
213
|
reaches the regex-test parser at all — `=~` is just another literal argument to a command named
|
|
201
214
|
`[[`.
|
|
202
215
|
|
|
203
|
-
\*\*
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
`
|
|
216
|
+
\*\* Parsing preserves upstream output: `{a,b}` remains an ordinary `Lit` word part,
|
|
217
|
+
not a `BraceExp`, in every dialect. The analysis layer separately asks mvdan/sh v3.13.1's
|
|
218
|
+
`syntax.SplitBraces` to recognize potential expansions on a private copy. `resolveWord`,
|
|
219
|
+
`enumerateCommands`, and `resolveArgv0` report `static: false, reason: 'brace'` when actual
|
|
220
|
+
brace-expansion parts are found, without changing the caller's tree. A bare Word carries no
|
|
221
|
+
dialect or shell-option state, so this conservative observation also applies to POSIX-parsed
|
|
222
|
+
records; it does not assert that POSIX sh performs brace expansion.
|
|
223
|
+
|
|
224
|
+
Quoted or fully escaped opening braces within one literal part remain literal. Brace candidates containing other
|
|
225
|
+
backslashes report `unsupported`: pinned upstream's escape handling differs from Bash, and
|
|
226
|
+
analysis does not guess through that discrepancy. For example, `\{a,b\}` remains static,
|
|
227
|
+
while `a{b\,c}` is conservatively unsupported. Any unquoted backslash escape crossing word-part boundaries in a constructed
|
|
228
|
+
word is also unsupported, including boundaries into quoted parts: such a split
|
|
229
|
+
can expose otherwise quoted syntax, and analysis does not reconstruct shell
|
|
230
|
+
tokenization to infer a literal value. Malformed or singleton unescaped forms such as
|
|
231
|
+
`a{b` and `{a}` remain static. See [the brace-classification decision](../../design/BRACE-CLASSIFICATION-DECISION.md).
|
|
207
232
|
|
|
208
233
|
\*\*\* zsh's lexer never tokenizes `@(` as an extended-glob opener at all — deliberately, to avoid
|
|
209
234
|
ambiguity with zsh's own glob qualifiers like `*(N)`. So `ls @(a|b)` parses without error under
|
|
210
235
|
`Variant: LangZsh`, but produces plain `Lit` word parts rather than an `ExtGlob` node; the
|
|
211
236
|
`checkLang` gate that rejects extended globs under posix is never reached for zsh.
|
|
212
237
|
|
|
238
|
+
Reason descriptions do not promise universal precedence. Whole-word `unsupported`
|
|
239
|
+
preflight still applies when a constructed word already contains a `BraceExp`.
|
|
240
|
+
Independently quoted or fully protected literal siblings preserve `brace`; an
|
|
241
|
+
escape crossing parts or an escape-uncertain brace candidate remains unsupported.
|
|
242
|
+
Existing tilde/glob resolution order also remains applicable.
|
|
243
|
+
|
|
213
244
|
### `[[ ... ]]` and `let` under posix: accepted by design
|
|
214
245
|
|
|
215
246
|
`Variant: LangPOSIX` accepting `[[ a == b ]]` and `let x=1` is **intentional upstream behavior, not
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observes potential brace syntax without rewriting caller-owned words. The
|
|
3
|
+
* pinned Go operation decides brace grammar; this module only excludes words
|
|
4
|
+
* with no unescaped opening brace and marks upstream escape discrepancies as
|
|
5
|
+
* uncertainty. Ordinary words never cross the WASM boundary for this check.
|
|
6
|
+
*/
|
|
7
|
+
import type { Word } from '../../generated/syntax-types.js';
|
|
8
|
+
/** A positive observation is distinct from inability to trust upstream escape handling. @internal */
|
|
9
|
+
export type BraceObservation = boolean | 'unsupported';
|
|
10
|
+
/**
|
|
11
|
+
* Reports current word content, never an identity cache. Go reconstructs an
|
|
12
|
+
* isolated Word before SplitBraces mutates it. v3.13.1's SplitBraces mishandles
|
|
13
|
+
* escapes, so candidates containing backslashes remain unknown instead of
|
|
14
|
+
* introducing a competing brace grammar or claiming a false static value.
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export declare function observeBraces(word: Word): BraceObservation;
|
|
18
|
+
//# sourceMappingURL=brace-observation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brace-observation.d.ts","sourceRoot":"","sources":["../../src/analyze/brace-observation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAK5D,qGAAqG;AACrG,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,aAAa,CAAC;AAEvD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,CA0C1D"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ShInternalError } from '../errors.js';
|
|
2
|
+
import { decodeWire, encodeWire, isRecord } from '../syntax-wire.js';
|
|
3
|
+
import { callSyntax } from '../wasm-instance.js';
|
|
4
|
+
/**
|
|
5
|
+
* Reports current word content, never an identity cache. Go reconstructs an
|
|
6
|
+
* isolated Word before SplitBraces mutates it. v3.13.1's SplitBraces mishandles
|
|
7
|
+
* escapes, so candidates containing backslashes remain unknown instead of
|
|
8
|
+
* introducing a competing brace grammar or claiming a false static value.
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export function observeBraces(word) {
|
|
12
|
+
let candidate = false;
|
|
13
|
+
let escaped = false;
|
|
14
|
+
let escapeCrossesPart = false;
|
|
15
|
+
// Adjacent literal records concatenate without a quote boundary. Carry the
|
|
16
|
+
// backslash state across them: two one-backslash records expose the next
|
|
17
|
+
// opening just as two backslashes in one Lit do. Nonliteral parts protect
|
|
18
|
+
// their own content and break this unquoted lexical run.
|
|
19
|
+
let protectedNext = false;
|
|
20
|
+
for (const part of word.Parts ?? []) {
|
|
21
|
+
escapeCrossesPart ||= protectedNext;
|
|
22
|
+
if (part?.Type !== 'Lit' || typeof part.Value !== 'string') {
|
|
23
|
+
protectedNext = false;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
for (const character of part.Value) {
|
|
27
|
+
if (protectedNext) {
|
|
28
|
+
protectedNext = false;
|
|
29
|
+
}
|
|
30
|
+
else if (character === '\\') {
|
|
31
|
+
protectedNext = true;
|
|
32
|
+
escaped = true;
|
|
33
|
+
}
|
|
34
|
+
else if (character === '{') {
|
|
35
|
+
candidate = true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// A split escape crosses the analyzer's per-part unquoting boundary. It can
|
|
40
|
+
// expose syntax inside a following quoted part, so uncertainty must not
|
|
41
|
+
// depend on finding a literal brace first. Decline every such constructed
|
|
42
|
+
// word instead of rebuilding shell tokenization or claiming static text.
|
|
43
|
+
if (escapeCrossesPart)
|
|
44
|
+
return 'unsupported';
|
|
45
|
+
if (!candidate)
|
|
46
|
+
return false;
|
|
47
|
+
if (escaped)
|
|
48
|
+
return 'unsupported';
|
|
49
|
+
const response = decodeWire(callSyntax('word-braces', new TextEncoder().encode(encodeWire(word))));
|
|
50
|
+
if (!isRecord(response))
|
|
51
|
+
throw new ShInternalError('Invalid brace observation response');
|
|
52
|
+
if (isRecord(response.Error) && response.Error.Kind === 'InputError')
|
|
53
|
+
return 'unsupported';
|
|
54
|
+
if (typeof response.Brace !== 'boolean' || Object.keys(response).length !== 1) {
|
|
55
|
+
throw new ShInternalError('Invalid brace observation response');
|
|
56
|
+
}
|
|
57
|
+
return response.Brace;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=brace-observation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brace-observation.js","sourceRoot":"","sources":["../../src/analyze/brace-observation.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKjD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,yDAAyD;IACzD,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACpC,iBAAiB,KAAK,aAAa,CAAC;QACpC,IAAI,IAAI,EAAE,IAAI,KAAK,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC3D,aAAa,GAAG,KAAK,CAAC;YACtB,SAAS;QACX,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,GAAG,KAAK,CAAC;YACxB,CAAC;iBAAM,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC9B,aAAa,GAAG,IAAI,CAAC;gBACrB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;gBAC7B,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,4EAA4E;IAC5E,wEAAwE;IACxE,0EAA0E;IAC1E,yEAAyE;IACzE,IAAI,iBAAiB;QAAE,OAAO,aAAa,CAAC;IAC5C,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,OAAO;QAAE,OAAO,aAAa,CAAC;IAClC,MAAM,QAAQ,GAAG,UAAU,CACzB,UAAU,CAAC,aAAa,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CACtE,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,oCAAoC,CAAC,CAAC;IACzF,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,aAAa,CAAC;IAC3F,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,eAAe,CAAC,oCAAoC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC;AACxB,CAAC"}
|
|
@@ -44,15 +44,34 @@ export interface WrapperSpec {
|
|
|
44
44
|
*/
|
|
45
45
|
readonly names: readonly string[];
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* counts.
|
|
47
|
+
* Legacy shorthand for {@link WrapperSpec.assignmentOperands}'s
|
|
48
|
+
* `'shell-identifier'` grammar: skip statically resolved `NAME=value`
|
|
49
|
+
* words with an ASCII shell identifier before `--`. Options may follow
|
|
50
|
+
* these operands. Quote removal has already happened during word resolution.
|
|
51
|
+
* An explicit `assignmentOperands` takes precedence, even when this is false.
|
|
52
|
+
* These operands never contribute to shell-prefix `assignmentsSkipped`.
|
|
54
53
|
*/
|
|
55
54
|
readonly skipAssignmentOperands?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Assignment-operand scanning grammar, independent of the wrapper's name.
|
|
57
|
+
* Each preset defines both which static words are assignments and where
|
|
58
|
+
* option scanning stops; it does not model the utility's other options.
|
|
59
|
+
*
|
|
60
|
+
* - `'shell-identifier'`: the legacy ASCII `NAME=value` rule before `--`;
|
|
61
|
+
* options may resume after an assignment.
|
|
62
|
+
* - `'env'`: after options, consume words containing `=` (including after
|
|
63
|
+
* `--`). The first assignment ends option scanning permanently. Empty
|
|
64
|
+
* names (`=value`) produce `'ambiguous-assignment'` because GNU/glibc
|
|
65
|
+
* and BSD differ on whether they can be installed in the environment.
|
|
66
|
+
* - `'sudo'`: before `--`, consume words containing `=` unless they start
|
|
67
|
+
* with `/` or `=`; option scanning may resume after each assignment.
|
|
68
|
+
*
|
|
69
|
+
* Active option parsing always takes precedence over utility assignments:
|
|
70
|
+
* `--unset=NAME` is an option, whereas `env A=1 --unset=NAME cmd` treats
|
|
71
|
+
* that same word as an assignment. This field overrides the legacy
|
|
72
|
+
* {@link WrapperSpec.skipAssignmentOperands} boolean when present.
|
|
73
|
+
*/
|
|
74
|
+
readonly assignmentOperands?: 'shell-identifier' | 'env' | 'sudo';
|
|
56
75
|
/** Exact flag tokens that take no operand of their own (e.g. `-i`, `-c`). */
|
|
57
76
|
readonly noArgFlags?: readonly string[];
|
|
58
77
|
/**
|
|
@@ -197,6 +216,11 @@ export interface ResolveArgv0Options {
|
|
|
197
216
|
* the real command rather than naming it as a separate word (e.g.
|
|
198
217
|
* `env -S 'rm -rf /'` — see {@link WrapperSpec.unresolvableFlags}'s doc
|
|
199
218
|
* comment).
|
|
219
|
+
* - `'ambiguous-assignment'` — a statically known assignment operand whose
|
|
220
|
+
* acceptance differs across supported utility implementations, such as
|
|
221
|
+
* `env =value cmd` (GNU/glibc accepts an empty name; BSD rejects it).
|
|
222
|
+
* Neither the following command nor the operand itself is guessed as
|
|
223
|
+
* the effective command.
|
|
200
224
|
*
|
|
201
225
|
* This union may grow in a **minor** release (mirroring
|
|
202
226
|
* `WordResolutionReason`'s and `CommandContext`'s semver policy in
|
|
@@ -206,7 +230,7 @@ export interface ResolveArgv0Options {
|
|
|
206
230
|
*
|
|
207
231
|
* @public
|
|
208
232
|
*/
|
|
209
|
-
export type Argv0UnresolvedReason = 'unknown-flag' | 'embedded-command';
|
|
233
|
+
export type Argv0UnresolvedReason = 'unknown-flag' | 'embedded-command' | 'ambiguous-assignment';
|
|
210
234
|
/**
|
|
211
235
|
* A word position {@link resolveArgv0} could not resolve to either a known
|
|
212
236
|
* static text or one of {@link WordResolution}'s own `static: false`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-argv0.d.ts","sourceRoot":"","sources":["../../src/analyze/resolve-argv0.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-argv0.d.ts","sourceRoot":"","sources":["../../src/analyze/resolve-argv0.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAElC;;;;;;;OAOG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAE1C;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,KAAK,GAAG,MAAM,CAAC;IAElE,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEtC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAE/C;;;;;;;;OAQG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAE7C;;;;OAIG;IACH,QAAQ,CAAC,+BAA+B,CAAC,EAAE,MAAM,CAAC;CACnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,WAAW,EAqH7D,CAAC;AAEH;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,kBAAkB,GAAG,sBAAsB,CAAC;AAEjG;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;CACxC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAE1C;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IAEnC;;;;;;;;OAQG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAyVD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAgC9F"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves command-word provenance through caller-configurable wrapper grammars.
|
|
3
|
+
* Only statically known operands may be skipped; syntax facts never imply that
|
|
4
|
+
* a command is safe, permitted, installed, or guaranteed to execute successfully.
|
|
5
|
+
*/
|
|
1
6
|
import { ShAnalyzeInvalidWrapperSpecError } from '../errors.js';
|
|
2
7
|
import { deepFreeze } from '../deep-freeze.js';
|
|
3
8
|
import { nodeArray } from './node-helpers.js';
|
|
@@ -67,7 +72,11 @@ export const DEFAULT_TRANSPARENT_WRAPPERS = deepFreeze([
|
|
|
67
72
|
// `argFlags` entry — see `unresolvableFlags` below.
|
|
68
73
|
{
|
|
69
74
|
names: ['env'],
|
|
70
|
-
|
|
75
|
+
// GNU env v9.8 src/env.c and FreeBSD releng/14.3 usr.bin/env/env.c
|
|
76
|
+
// scan strchr(word, '=') after getopt; options never resume afterward.
|
|
77
|
+
// https://github.com/coreutils/coreutils/blob/v9.8/src/env.c#L797
|
|
78
|
+
// https://github.com/freebsd/freebsd-src/blob/releng/14.3/usr.bin/env/env.c#L188
|
|
79
|
+
assignmentOperands: 'env',
|
|
71
80
|
noArgFlags: ['-i', '--ignore-environment', '-0', '--null', '-v', '--debug'],
|
|
72
81
|
argFlags: ['-u', '--unset', '-C', '--chdir'],
|
|
73
82
|
// GNU env(1) `-S`/`--split-string=S`: processes and splits `S` into
|
|
@@ -145,7 +154,10 @@ export const DEFAULT_TRANSPARENT_WRAPPERS = deepFreeze([
|
|
|
145
154
|
// environment-setting mechanism, "similar to env" per sudo(8).
|
|
146
155
|
{
|
|
147
156
|
names: ['sudo'],
|
|
148
|
-
|
|
157
|
+
// is_envar rejects '/' and '=' prefixes; !got_end_of_args prevents
|
|
158
|
+
// assignments after --, while the enclosing loop resumes getopt.
|
|
159
|
+
// https://github.com/sudo-project/sudo/blob/v1.9.17p2/src/parse_args.c#L263
|
|
160
|
+
assignmentOperands: 'sudo',
|
|
149
161
|
noArgFlags: ['-A', '-b', '-E', '-H', '-k', '-n', '-P', '-S'],
|
|
150
162
|
argFlags: ['-g', '-p', '-u'],
|
|
151
163
|
},
|
|
@@ -255,7 +267,8 @@ function findWrapperSpec(wrappers, text) {
|
|
|
255
267
|
* `argv` with no wrapped-command word found (a malformed or truncated
|
|
256
268
|
* invocation, e.g. bare `env` with nothing else, or `sudo -u` with no
|
|
257
269
|
* operand for `-u`).
|
|
258
|
-
* - `{ kind: 'unresolvable', reason }` —
|
|
270
|
+
* - `{ kind: 'unresolvable', reason }` — an ambiguous assignment, or a
|
|
271
|
+
* *statically known* word that
|
|
259
272
|
* looks like a flag for this wrapper (unquoted, unescaped `-` prefix,
|
|
260
273
|
* not `--`) but matches none of `spec`'s recognized flag/operand shapes,
|
|
261
274
|
* or matches one of `spec.unresolvableFlags` (see
|
|
@@ -268,7 +281,7 @@ function findWrapperSpec(wrappers, text) {
|
|
|
268
281
|
* A literal `--` (the standard getopt(3)/getopt_long(3) end-of-options
|
|
269
282
|
* marker — POSIX Utility Syntax Guidelines, guideline 10) is skipped like
|
|
270
283
|
* any other recognized token, but — critically — everything *after* it is
|
|
271
|
-
* no longer eligible for **any** flag
|
|
284
|
+
* no longer eligible for **any** flag recognition at all
|
|
272
285
|
* (`noArgFlags`, `noArgFlagPattern`, `argFlags` in every form,
|
|
273
286
|
* `unresolvableFlags`, `stopsChainFlags`, or the generic
|
|
274
287
|
* flag-shape/`'unknown-flag'` check): once options end, a later word that
|
|
@@ -278,15 +291,17 @@ function findWrapperSpec(wrappers, text) {
|
|
|
278
291
|
* `--` for every wrapper here. A wrapper's mandatory positional operand
|
|
279
292
|
* (e.g. `timeout`'s `DURATION`) is a distinct, non-flag concept and is
|
|
280
293
|
* still consumed normally after `--` — only *flag* recognition stops.
|
|
281
|
-
*
|
|
282
|
-
*
|
|
283
|
-
*
|
|
284
|
-
*
|
|
294
|
+
* Assignment recognition follows the explicit grammar: `env` scans
|
|
295
|
+
* assignments even after `--` and stops option parsing at its first
|
|
296
|
+
* assignment; `sudo` and the legacy shell-identifier grammar recognize
|
|
297
|
+
* assignments only before `--` and allow later options.
|
|
285
298
|
*/
|
|
286
299
|
function advancePastWrapperOperands(argv, startIndex, spec) {
|
|
287
300
|
let index = startIndex;
|
|
288
301
|
let positionalSeen = 0;
|
|
289
302
|
let optionsEnded = false;
|
|
303
|
+
const assignmentGrammar = spec.assignmentOperands ??
|
|
304
|
+
(spec.skipAssignmentOperands === true ? 'shell-identifier' : undefined);
|
|
290
305
|
const requiredPositional = spec.positionalOperandsBeforeCommand ?? 0;
|
|
291
306
|
while (index < argv.length) {
|
|
292
307
|
// `index < argv.length` just checked above, so this is a real element.
|
|
@@ -304,7 +319,24 @@ function advancePastWrapperOperands(argv, startIndex, spec) {
|
|
|
304
319
|
index += 1;
|
|
305
320
|
continue;
|
|
306
321
|
}
|
|
307
|
-
|
|
322
|
+
// An '=' in an active option (e.g. --unset=NAME) does not make it an
|
|
323
|
+
// assignment. After env's option phase, however, even '-x=y' is one.
|
|
324
|
+
const canRecognizeAssignment = (assignmentGrammar === 'env' || !optionsEnded) &&
|
|
325
|
+
(assignmentGrammar === 'shell-identifier' || optionsEnded || !looksLikeFlag(text));
|
|
326
|
+
if (canRecognizeAssignment && assignmentGrammar === 'env' && text.startsWith('=')) {
|
|
327
|
+
// glibc putenv accepts an empty name, while FreeBSD setenv rejects
|
|
328
|
+
// it. The grammar therefore cannot identify a portable invocation.
|
|
329
|
+
return { kind: 'unresolvable', reason: 'ambiguous-assignment' };
|
|
330
|
+
}
|
|
331
|
+
const isAssignment = assignmentGrammar === 'shell-identifier'
|
|
332
|
+
? isAssignmentShapedText(text)
|
|
333
|
+
: text.includes('=') &&
|
|
334
|
+
(assignmentGrammar === 'env' ||
|
|
335
|
+
(assignmentGrammar === 'sudo' && !text.startsWith('/') && !text.startsWith('=')));
|
|
336
|
+
if (canRecognizeAssignment && isAssignment) {
|
|
337
|
+
if (assignmentGrammar === 'env') {
|
|
338
|
+
optionsEnded = true;
|
|
339
|
+
}
|
|
308
340
|
index += 1;
|
|
309
341
|
continue;
|
|
310
342
|
}
|
|
@@ -404,6 +436,14 @@ function validateWrapperSpec(spec, index) {
|
|
|
404
436
|
typeof spec.skipAssignmentOperands !== 'boolean') {
|
|
405
437
|
throw new ShAnalyzeInvalidWrapperSpecError(`${context}.skipAssignmentOperands must be a boolean when present`);
|
|
406
438
|
}
|
|
439
|
+
// JavaScript callers can bypass the declared union; validate raw boundary data.
|
|
440
|
+
const assignmentOperands = spec.assignmentOperands;
|
|
441
|
+
if (assignmentOperands !== undefined &&
|
|
442
|
+
assignmentOperands !== 'shell-identifier' &&
|
|
443
|
+
assignmentOperands !== 'env' &&
|
|
444
|
+
assignmentOperands !== 'sudo') {
|
|
445
|
+
throw new ShAnalyzeInvalidWrapperSpecError(`${context}.assignmentOperands must be shell-identifier, env, or sudo when present`);
|
|
446
|
+
}
|
|
407
447
|
if (spec.noArgFlagPattern !== undefined && !(spec.noArgFlagPattern instanceof RegExp)) {
|
|
408
448
|
throw new ShAnalyzeInvalidWrapperSpecError(`${context}.noArgFlagPattern must be a RegExp when present`);
|
|
409
449
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-argv0.js","sourceRoot":"","sources":["../../src/analyze/resolve-argv0.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resolve-argv0.js","sourceRoot":"","sources":["../../src/analyze/resolve-argv0.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type { Node } from '../../generated/syntax-types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Why a {@link resolveWord} result is `static: false`: the word's exact
|
|
5
|
-
*
|
|
5
|
+
* value cannot be classified as one reliably known literal word.
|
|
6
6
|
*
|
|
7
7
|
* - `'expansion'` — the word contains a `ParamExp` (`$x`, `${x}`), a
|
|
8
8
|
* `CmdSubst` (command substitution, either `$(...)` or backtick form), an
|
|
@@ -24,15 +24,12 @@ import type { Node } from '../../generated/syntax-types.js';
|
|
|
24
24
|
* Reference Manual §3.5.8.1, "Pattern Matching"), or an `ExtGlob` part
|
|
25
25
|
* (Bash Reference Manual §3.5.8, "Filename Expansion"): its value depends
|
|
26
26
|
* on which filesystem entries exist at run time.
|
|
27
|
-
* - `'brace'` — the word contains a `BraceExp` part
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* from literal `{`/`,`/`}` characters) rather than as a `BraceExp` part.
|
|
34
|
-
* This reason is handled here for forward-compatibility with that node
|
|
35
|
-
* type and is not reachable through {@link resolveWord} today.
|
|
27
|
+
* - `'brace'` — the word contains a `BraceExp` part or the pinned upstream
|
|
28
|
+
* `syntax.SplitBraces` produces one on a private observation copy (Bash
|
|
29
|
+
* Reference Manual §3.5.1, "Brace Expansion"). Parser output is unchanged.
|
|
30
|
+
* This reports potential expansion in supporting dialects; a bare Word has
|
|
31
|
+
* no dialect or shell-option state, so even POSIX-parsed words receive the
|
|
32
|
+
* conservative classification. It does not claim POSIX sh expands braces.
|
|
36
33
|
* - `'locale'` — the word contains a `$"..."` locale-translated string
|
|
37
34
|
* (Bash Reference Manual §3.1.2.5, "Locale-Specific Translation"): its
|
|
38
35
|
* value is looked up in the current locale's translation catalog at run
|
|
@@ -41,7 +38,10 @@ import type { Node } from '../../generated/syntax-types.js';
|
|
|
41
38
|
* `$"..."` word's *contents* would otherwise report — the `DblQuoted`
|
|
42
39
|
* node's own `dollar` flag is checked before its children are visited at
|
|
43
40
|
* all, so e.g. `$"hi $x"` reports `'locale'`, never `'expansion'`.
|
|
44
|
-
* - `'unsupported'` — a
|
|
41
|
+
* - `'unsupported'` — a brace candidate contains backslashes whose handling
|
|
42
|
+
* differs between pinned mvdan/sh and Bash (rather than guessing through
|
|
43
|
+
* that discrepancy), an unquoted backslash escape crosses word-part
|
|
44
|
+
* boundaries in a caller-constructed word, a word contains a nil or typed nil part, a literal carries a byte-preserving `Uint8Array`
|
|
45
45
|
* rather than Unicode text, or the word contains a `$'...'` (ANSI-C quoted) `\u`/`\U`
|
|
46
46
|
* escape whose value has no corresponding Unicode character (greater than
|
|
47
47
|
* `U+10FFFF`, e.g. `$'\UFFFFFFFF'`): real bash's output for this case is
|
|
@@ -51,6 +51,14 @@ import type { Node } from '../../generated/syntax-types.js';
|
|
|
51
51
|
* package declines to claim a `static: true` text bash never actually
|
|
52
52
|
* produces.
|
|
53
53
|
*
|
|
54
|
+
* Reason descriptions do not establish universal precedence among features.
|
|
55
|
+
* Whole-word `unsupported` preflight takes precedence even when a caller has
|
|
56
|
+
* already supplied a `BraceExp`: an escape crossing parts can invalidate the
|
|
57
|
+
* apparent quoting boundaries, and an escape-uncertain brace candidate remains
|
|
58
|
+
* uncertain. Independently quoted or fully protected literal siblings do not
|
|
59
|
+
* suppress a known `BraceExp`. After preflight, existing resolution order can
|
|
60
|
+
* select a triggering tilde or earlier glob before visiting that part.
|
|
61
|
+
*
|
|
54
62
|
* This union may grow in a **minor** release — new mvdan/sh word-part node
|
|
55
63
|
* types, or new statically-shaped-but-dynamic categories, can add new reason
|
|
56
64
|
* strings without that being a breaking change. It is deliberately not
|
|
@@ -78,7 +86,7 @@ export type WordResolution = {
|
|
|
78
86
|
/** The word's exact resolved text (quotes and escapes removed). */
|
|
79
87
|
readonly text: string;
|
|
80
88
|
} | {
|
|
81
|
-
/** The word
|
|
89
|
+
/** The word has potential expansion or cannot be resolved reliably by this analyzer. */
|
|
82
90
|
readonly static: false;
|
|
83
91
|
/** Why this word cannot be statically resolved. */
|
|
84
92
|
readonly reason: WordResolutionReason;
|
|
@@ -132,7 +140,7 @@ export interface ResolveWordOptions {
|
|
|
132
140
|
* resolves to `"rm"`). A word containing any expansion (`ParamExp`,
|
|
133
141
|
* `CmdSubst`, `ArithmExp`, `ProcSubst`), a triggering unquoted `~` (see
|
|
134
142
|
* `options.context`), an unquoted glob metacharacter/bracket
|
|
135
|
-
* expression/`ExtGlob`, a `$"..."` locale translation, or an unrepresentable
|
|
143
|
+
* expression/`ExtGlob`, potential brace expansion, a `$"..."` locale translation, or an unrepresentable
|
|
136
144
|
* `$'\U...'` escape is `static: false` with a reason — never an error, and
|
|
137
145
|
* never a safety judgment (see {@link WordResolution}).
|
|
138
146
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-word.d.ts","sourceRoot":"","sources":["../../src/analyze/resolve-word.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-word.d.ts","sourceRoot":"","sources":["../../src/analyze/resolve-word.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAM5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEG;AACH,MAAM,MAAM,oBAAoB,GAC9B,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEtE;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACtB;IACE,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,wFAAwF;IACxF,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC,CAAC;AAEN;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;CAC5D;AAuKD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAwCpF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { observeBraces } from './brace-observation.js';
|
|
1
2
|
import { decodeAnsiCString } from './ansi-c-escapes.js';
|
|
2
3
|
import { decodeDblQuotedLit, decodeUnquotedLit } from './decode-lit.js';
|
|
3
4
|
import { nodeArray } from './node-helpers.js';
|
|
@@ -148,8 +149,7 @@ function resolvePart(part, quoting) {
|
|
|
148
149
|
case 'ExtGlob':
|
|
149
150
|
return { ok: false, reason: 'glob' };
|
|
150
151
|
case 'BraceExp':
|
|
151
|
-
//
|
|
152
|
-
// bridge's parser today, handled for forward-compatibility.
|
|
152
|
+
// Caller-constructed or transformed records can already contain braces.
|
|
153
153
|
return { ok: false, reason: 'brace' };
|
|
154
154
|
default:
|
|
155
155
|
// Any word-part node type this module doesn't specifically know
|
|
@@ -171,7 +171,7 @@ function resolvePart(part, quoting) {
|
|
|
171
171
|
* resolves to `"rm"`). A word containing any expansion (`ParamExp`,
|
|
172
172
|
* `CmdSubst`, `ArithmExp`, `ProcSubst`), a triggering unquoted `~` (see
|
|
173
173
|
* `options.context`), an unquoted glob metacharacter/bracket
|
|
174
|
-
* expression/`ExtGlob`, a `$"..."` locale translation, or an unrepresentable
|
|
174
|
+
* expression/`ExtGlob`, potential brace expansion, a `$"..."` locale translation, or an unrepresentable
|
|
175
175
|
* `$'\U...'` escape is `static: false` with a reason — never an error, and
|
|
176
176
|
* never a safety judgment (see {@link WordResolution}).
|
|
177
177
|
*
|
|
@@ -198,6 +198,11 @@ export function resolveWord(word, options) {
|
|
|
198
198
|
if (parts.length === 0) {
|
|
199
199
|
return { static: true, text: '' };
|
|
200
200
|
}
|
|
201
|
+
const braces = observeBraces(word);
|
|
202
|
+
if (braces === 'unsupported')
|
|
203
|
+
return { static: false, reason: 'unsupported' };
|
|
204
|
+
if (braces)
|
|
205
|
+
return { static: false, reason: 'brace' };
|
|
201
206
|
// `parts.length === 0` returned above, so `parts[0]` is a real element.
|
|
202
207
|
const first = parts[0];
|
|
203
208
|
if (first.Type === 'Lit' &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-word.js","sourceRoot":"","sources":["../../src/analyze/resolve-word.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-word.js","sourceRoot":"","sources":["../../src/analyze/resolve-word.ts"],"names":[],"mappings":"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"}
|
package/dist/analyze.d.ts
CHANGED
|
@@ -195,6 +195,11 @@ export declare interface Argv0Resolution {
|
|
|
195
195
|
* the real command rather than naming it as a separate word (e.g.
|
|
196
196
|
* `env -S 'rm -rf /'` — see {@link WrapperSpec.unresolvableFlags}'s doc
|
|
197
197
|
* comment).
|
|
198
|
+
* - `'ambiguous-assignment'` — a statically known assignment operand whose
|
|
199
|
+
* acceptance differs across supported utility implementations, such as
|
|
200
|
+
* `env =value cmd` (GNU/glibc accepts an empty name; BSD rejects it).
|
|
201
|
+
* Neither the following command nor the operand itself is guessed as
|
|
202
|
+
* the effective command.
|
|
198
203
|
*
|
|
199
204
|
* This union may grow in a **minor** release (mirroring
|
|
200
205
|
* `WordResolutionReason`'s and `CommandContext`'s semver policy in
|
|
@@ -204,7 +209,7 @@ export declare interface Argv0Resolution {
|
|
|
204
209
|
*
|
|
205
210
|
* @public
|
|
206
211
|
*/
|
|
207
|
-
export declare type Argv0UnresolvedReason = 'unknown-flag' | 'embedded-command';
|
|
212
|
+
export declare type Argv0UnresolvedReason = 'unknown-flag' | 'embedded-command' | 'ambiguous-assignment';
|
|
208
213
|
|
|
209
214
|
/**
|
|
210
215
|
* A word position {@link resolveArgv0} could not resolve to either a known
|
|
@@ -2747,7 +2752,7 @@ declare const DplOut: 68;
|
|
|
2747
2752
|
* resolves to `"rm"`). A word containing any expansion (`ParamExp`,
|
|
2748
2753
|
* `CmdSubst`, `ArithmExp`, `ProcSubst`), a triggering unquoted `~` (see
|
|
2749
2754
|
* `options.context`), an unquoted glob metacharacter/bracket
|
|
2750
|
-
* expression/`ExtGlob`, a `$"..."` locale translation, or an unrepresentable
|
|
2755
|
+
* expression/`ExtGlob`, potential brace expansion, a `$"..."` locale translation, or an unrepresentable
|
|
2751
2756
|
* `$'\U...'` escape is `static: false` with a reason — never an error, and
|
|
2752
2757
|
* never a safety judgment (see {@link WordResolution}).
|
|
2753
2758
|
*
|
|
@@ -3929,7 +3934,7 @@ declare const DplOut: 68;
|
|
|
3929
3934
|
/** The word's exact resolved text (quotes and escapes removed). */
|
|
3930
3935
|
readonly text: string;
|
|
3931
3936
|
} | {
|
|
3932
|
-
/** The word
|
|
3937
|
+
/** The word has potential expansion or cannot be resolved reliably by this analyzer. */
|
|
3933
3938
|
readonly static: false;
|
|
3934
3939
|
/** Why this word cannot be statically resolved. */
|
|
3935
3940
|
readonly reason: WordResolutionReason;
|
|
@@ -3937,7 +3942,7 @@ declare const DplOut: 68;
|
|
|
3937
3942
|
|
|
3938
3943
|
/**
|
|
3939
3944
|
* Why a {@link resolveWord} result is `static: false`: the word's exact
|
|
3940
|
-
*
|
|
3945
|
+
* value cannot be classified as one reliably known literal word.
|
|
3941
3946
|
*
|
|
3942
3947
|
* - `'expansion'` — the word contains a `ParamExp` (`$x`, `${x}`), a
|
|
3943
3948
|
* `CmdSubst` (command substitution, either `$(...)` or backtick form), an
|
|
@@ -3959,15 +3964,12 @@ declare const DplOut: 68;
|
|
|
3959
3964
|
* Reference Manual §3.5.8.1, "Pattern Matching"), or an `ExtGlob` part
|
|
3960
3965
|
* (Bash Reference Manual §3.5.8, "Filename Expansion"): its value depends
|
|
3961
3966
|
* on which filesystem entries exist at run time.
|
|
3962
|
-
* - `'brace'` — the word contains a `BraceExp` part
|
|
3963
|
-
*
|
|
3964
|
-
*
|
|
3965
|
-
*
|
|
3966
|
-
*
|
|
3967
|
-
*
|
|
3968
|
-
* from literal `{`/`,`/`}` characters) rather than as a `BraceExp` part.
|
|
3969
|
-
* This reason is handled here for forward-compatibility with that node
|
|
3970
|
-
* type and is not reachable through {@link resolveWord} today.
|
|
3967
|
+
* - `'brace'` — the word contains a `BraceExp` part or the pinned upstream
|
|
3968
|
+
* `syntax.SplitBraces` produces one on a private observation copy (Bash
|
|
3969
|
+
* Reference Manual §3.5.1, "Brace Expansion"). Parser output is unchanged.
|
|
3970
|
+
* This reports potential expansion in supporting dialects; a bare Word has
|
|
3971
|
+
* no dialect or shell-option state, so even POSIX-parsed words receive the
|
|
3972
|
+
* conservative classification. It does not claim POSIX sh expands braces.
|
|
3971
3973
|
* - `'locale'` — the word contains a `$"..."` locale-translated string
|
|
3972
3974
|
* (Bash Reference Manual §3.1.2.5, "Locale-Specific Translation"): its
|
|
3973
3975
|
* value is looked up in the current locale's translation catalog at run
|
|
@@ -3976,7 +3978,10 @@ declare const DplOut: 68;
|
|
|
3976
3978
|
* `$"..."` word's *contents* would otherwise report — the `DblQuoted`
|
|
3977
3979
|
* node's own `dollar` flag is checked before its children are visited at
|
|
3978
3980
|
* all, so e.g. `$"hi $x"` reports `'locale'`, never `'expansion'`.
|
|
3979
|
-
* - `'unsupported'` — a
|
|
3981
|
+
* - `'unsupported'` — a brace candidate contains backslashes whose handling
|
|
3982
|
+
* differs between pinned mvdan/sh and Bash (rather than guessing through
|
|
3983
|
+
* that discrepancy), an unquoted backslash escape crosses word-part
|
|
3984
|
+
* boundaries in a caller-constructed word, a word contains a nil or typed nil part, a literal carries a byte-preserving `Uint8Array`
|
|
3980
3985
|
* rather than Unicode text, or the word contains a `$'...'` (ANSI-C quoted) `\u`/`\U`
|
|
3981
3986
|
* escape whose value has no corresponding Unicode character (greater than
|
|
3982
3987
|
* `U+10FFFF`, e.g. `$'\UFFFFFFFF'`): real bash's output for this case is
|
|
@@ -3986,6 +3991,14 @@ declare const DplOut: 68;
|
|
|
3986
3991
|
* package declines to claim a `static: true` text bash never actually
|
|
3987
3992
|
* produces.
|
|
3988
3993
|
*
|
|
3994
|
+
* Reason descriptions do not establish universal precedence among features.
|
|
3995
|
+
* Whole-word `unsupported` preflight takes precedence even when a caller has
|
|
3996
|
+
* already supplied a `BraceExp`: an escape crossing parts can invalidate the
|
|
3997
|
+
* apparent quoting boundaries, and an escape-uncertain brace candidate remains
|
|
3998
|
+
* uncertain. Independently quoted or fully protected literal siblings do not
|
|
3999
|
+
* suppress a known `BraceExp`. After preflight, existing resolution order can
|
|
4000
|
+
* select a triggering tilde or earlier glob before visiting that part.
|
|
4001
|
+
*
|
|
3989
4002
|
* This union may grow in a **minor** release — new mvdan/sh word-part node
|
|
3990
4003
|
* types, or new statically-shaped-but-dynamic categories, can add new reason
|
|
3991
4004
|
* strings without that being a breaking change. It is deliberately not
|
|
@@ -4044,15 +4057,34 @@ declare const DplOut: 68;
|
|
|
4044
4057
|
*/
|
|
4045
4058
|
readonly names: readonly string[];
|
|
4046
4059
|
/**
|
|
4047
|
-
*
|
|
4048
|
-
*
|
|
4049
|
-
*
|
|
4050
|
-
*
|
|
4051
|
-
*
|
|
4052
|
-
*
|
|
4053
|
-
* counts.
|
|
4060
|
+
* Legacy shorthand for {@link WrapperSpec.assignmentOperands}'s
|
|
4061
|
+
* `'shell-identifier'` grammar: skip statically resolved `NAME=value`
|
|
4062
|
+
* words with an ASCII shell identifier before `--`. Options may follow
|
|
4063
|
+
* these operands. Quote removal has already happened during word resolution.
|
|
4064
|
+
* An explicit `assignmentOperands` takes precedence, even when this is false.
|
|
4065
|
+
* These operands never contribute to shell-prefix `assignmentsSkipped`.
|
|
4054
4066
|
*/
|
|
4055
4067
|
readonly skipAssignmentOperands?: boolean;
|
|
4068
|
+
/**
|
|
4069
|
+
* Assignment-operand scanning grammar, independent of the wrapper's name.
|
|
4070
|
+
* Each preset defines both which static words are assignments and where
|
|
4071
|
+
* option scanning stops; it does not model the utility's other options.
|
|
4072
|
+
*
|
|
4073
|
+
* - `'shell-identifier'`: the legacy ASCII `NAME=value` rule before `--`;
|
|
4074
|
+
* options may resume after an assignment.
|
|
4075
|
+
* - `'env'`: after options, consume words containing `=` (including after
|
|
4076
|
+
* `--`). The first assignment ends option scanning permanently. Empty
|
|
4077
|
+
* names (`=value`) produce `'ambiguous-assignment'` because GNU/glibc
|
|
4078
|
+
* and BSD differ on whether they can be installed in the environment.
|
|
4079
|
+
* - `'sudo'`: before `--`, consume words containing `=` unless they start
|
|
4080
|
+
* with `/` or `=`; option scanning may resume after each assignment.
|
|
4081
|
+
*
|
|
4082
|
+
* Active option parsing always takes precedence over utility assignments:
|
|
4083
|
+
* `--unset=NAME` is an option, whereas `env A=1 --unset=NAME cmd` treats
|
|
4084
|
+
* that same word as an assignment. This field overrides the legacy
|
|
4085
|
+
* {@link WrapperSpec.skipAssignmentOperands} boolean when present.
|
|
4086
|
+
*/
|
|
4087
|
+
readonly assignmentOperands?: 'shell-identifier' | 'env' | 'sudo';
|
|
4056
4088
|
/** Exact flag tokens that take no operand of their own (e.g. `-i`, `-c`). */
|
|
4057
4089
|
readonly noArgFlags?: readonly string[];
|
|
4058
4090
|
/**
|
package/dist/sh-ast.d.ts
CHANGED
|
@@ -3092,7 +3092,7 @@ export declare interface SyntaxPos {
|
|
|
3092
3092
|
export declare interface SyntaxRecordSchema {
|
|
3093
3093
|
/** Whether the actual upstream type implements syntax.Node. */
|
|
3094
3094
|
readonly node: boolean;
|
|
3095
|
-
/** Every exported upstream field, retaining its original spelling. */
|
|
3095
|
+
/** Every exported upstream field, retaining its original spelling and lexicographic iteration order for internal position correlation. */
|
|
3096
3096
|
readonly fields: Readonly<Record<string, SyntaxFieldSchema>>;
|
|
3097
3097
|
}
|
|
3098
3098
|
|
|
@@ -37,11 +37,10 @@ export interface ParsedFile {
|
|
|
37
37
|
readonly Positions: PositionSnapshot;
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
|
-
* Validates complete
|
|
41
|
-
* a weak identity map.
|
|
42
|
-
*
|
|
43
|
-
* The File must already have passed the full syntax boundary validator.
|
|
40
|
+
* Validates complete compact coverage and independent bound outcomes, then stores
|
|
41
|
+
* immutable observations in a weak identity map. No fallback calls can disguise
|
|
42
|
+
* malformed transport. The File must already pass the full boundary validator.
|
|
44
43
|
* @internal
|
|
45
44
|
*/
|
|
46
|
-
export declare function createPositionSnapshot(file: File, raw: unknown): PositionSnapshot;
|
|
45
|
+
export declare function createPositionSnapshot(file: File, raw: unknown, rawErrors: unknown): PositionSnapshot;
|
|
47
46
|
//# sourceMappingURL=syntax-snapshot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntax-snapshot.d.ts","sourceRoot":"","sources":["../src/syntax-snapshot.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAY,IAAI,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAKpF;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClC,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;CACtC;
|
|
1
|
+
{"version":3,"file":"syntax-snapshot.d.ts","sourceRoot":"","sources":["../src/syntax-snapshot.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAY,IAAI,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAKpF;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClC,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;CACtC;AAuED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,OAAO,GACjB,gBAAgB,CA4DlB"}
|
package/dist/syntax-snapshot.js
CHANGED
|
@@ -19,101 +19,118 @@ function isNodeIdentity(value) {
|
|
|
19
19
|
SYNTAX_INTERFACES.Node.includes(value.Kind)));
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* Visits child-bearing fields in the writer's lexical preorder, including children
|
|
23
|
+
* of auxiliary records. The complete File boundary has already been validated.
|
|
24
|
+
* Ordering is internal transport correlation, not the public Walk protocol.
|
|
25
25
|
*/
|
|
26
|
-
function
|
|
27
|
-
const
|
|
28
|
-
const visit = (value, path) => {
|
|
26
|
+
function visitNodes(file, observe) {
|
|
27
|
+
const visit = (value) => {
|
|
29
28
|
if (!isRecord(value) || typeof value.Type !== 'string')
|
|
30
29
|
return;
|
|
31
30
|
if (isNodeIdentity(value))
|
|
32
|
-
|
|
31
|
+
observe(value);
|
|
33
32
|
if (!Object.hasOwn(SYNTAX_SCHEMA, value.Type))
|
|
34
33
|
return;
|
|
35
34
|
for (const [name, field] of Object.entries(SYNTAX_SCHEMA[value.Type].fields)) {
|
|
36
35
|
if (field.kind !== 'struct' && field.kind !== 'interface')
|
|
37
36
|
continue;
|
|
38
37
|
const child = value[name];
|
|
39
|
-
if (Array.isArray(child))
|
|
40
|
-
child.forEach(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
visit(child, [...path, name]);
|
|
46
|
-
}
|
|
38
|
+
if (Array.isArray(child))
|
|
39
|
+
child.forEach(visit);
|
|
40
|
+
else
|
|
41
|
+
visit(child);
|
|
47
42
|
}
|
|
48
43
|
};
|
|
49
|
-
visit(file
|
|
50
|
-
return nodes;
|
|
44
|
+
visit(file);
|
|
51
45
|
}
|
|
52
|
-
/**
|
|
53
|
-
function
|
|
54
|
-
return
|
|
55
|
-
value.every((component) => typeof component === 'string' ||
|
|
56
|
-
(typeof component === 'number' && Number.isSafeInteger(component) && component >= 0)));
|
|
46
|
+
/** Own byte-bearing failures so neither transport holders nor catchers can alter captures. */
|
|
47
|
+
function copyError(error) {
|
|
48
|
+
return typeof error === 'string' ? error : error.slice();
|
|
57
49
|
}
|
|
58
|
-
/**
|
|
59
|
-
function
|
|
60
|
-
|
|
50
|
+
/** Reconstruct a bound only after checking flags and the unchanged SyntaxPos contract. */
|
|
51
|
+
function readBound(raw, offset, failed) {
|
|
52
|
+
const Offset = raw[offset];
|
|
53
|
+
const Line = raw[offset + 1];
|
|
54
|
+
const Col = raw[offset + 2];
|
|
55
|
+
const flags = raw[offset + 3];
|
|
56
|
+
if (typeof flags !== 'number' || !Number.isInteger(flags) || flags < 0 || flags > 7) {
|
|
57
|
+
throw new ShInternalError('The syntax snapshot contains invalid position flags');
|
|
58
|
+
}
|
|
59
|
+
const position = {
|
|
60
|
+
Offset,
|
|
61
|
+
Line,
|
|
62
|
+
Col,
|
|
63
|
+
IsValid: (flags & 1) !== 0,
|
|
64
|
+
IsRecovered: (flags & 2) !== 0,
|
|
65
|
+
OffsetOverflow: (flags & 4) !== 0,
|
|
66
|
+
};
|
|
67
|
+
if (!isSyntaxPos(position) ||
|
|
68
|
+
(failed && (Offset !== 0 || Line !== 0 || Col !== 0 || flags !== 0))) {
|
|
69
|
+
throw new ShInternalError('The syntax snapshot contains an invalid position observation');
|
|
70
|
+
}
|
|
71
|
+
return position;
|
|
61
72
|
}
|
|
62
73
|
/**
|
|
63
|
-
* Validates complete
|
|
64
|
-
* a weak identity map.
|
|
65
|
-
*
|
|
66
|
-
* The File must already have passed the full syntax boundary validator.
|
|
74
|
+
* Validates complete compact coverage and independent bound outcomes, then stores
|
|
75
|
+
* immutable observations in a weak identity map. No fallback calls can disguise
|
|
76
|
+
* malformed transport. The File must already pass the full boundary validator.
|
|
67
77
|
* @internal
|
|
68
78
|
*/
|
|
69
|
-
export function createPositionSnapshot(file, raw) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
for (const
|
|
76
|
-
if (!
|
|
77
|
-
|
|
78
|
-
!isPath(entry.Path) ||
|
|
79
|
-
!isObservation(entry.Pos, entry.PosError) ||
|
|
80
|
-
!isObservation(entry.End, entry.EndError)) {
|
|
81
|
-
throw new ShInternalError('The syntax snapshot contains an invalid position observation');
|
|
82
|
-
}
|
|
83
|
-
const path = JSON.stringify(entry.Path);
|
|
84
|
-
const node = remaining.get(path);
|
|
85
|
-
if (node === undefined)
|
|
86
|
-
throw new ShInternalError('The syntax snapshot contains an unknown or duplicate node path');
|
|
87
|
-
remaining.delete(path);
|
|
88
|
-
if (isGoString(entry.PosError)) {
|
|
89
|
-
observations.set(node, { error: entry.PosError });
|
|
90
|
-
}
|
|
91
|
-
else if (isGoString(entry.EndError)) {
|
|
92
|
-
observations.set(node, { error: entry.EndError });
|
|
93
|
-
}
|
|
94
|
-
else if (isSyntaxPos(entry.Pos) && isSyntaxPos(entry.End)) {
|
|
95
|
-
observations.set(node, {
|
|
96
|
-
positions: Object.freeze({
|
|
97
|
-
Pos: Object.freeze({ ...entry.Pos }),
|
|
98
|
-
End: Object.freeze({ ...entry.End }),
|
|
99
|
-
}),
|
|
100
|
-
});
|
|
79
|
+
export function createPositionSnapshot(file, raw, rawErrors) {
|
|
80
|
+
if (!Array.isArray(raw) || raw.length % 8 !== 0 || !Array.isArray(rawErrors)) {
|
|
81
|
+
throw new ShInternalError('The syntax snapshot has invalid compact metadata');
|
|
82
|
+
}
|
|
83
|
+
const count = raw.length / 8;
|
|
84
|
+
const failures = new Map();
|
|
85
|
+
for (const row of rawErrors) {
|
|
86
|
+
if (!Array.isArray(row) || row.length !== 3) {
|
|
87
|
+
throw new ShInternalError('The syntax snapshot contains an invalid failure row');
|
|
101
88
|
}
|
|
102
|
-
|
|
103
|
-
|
|
89
|
+
const values = row;
|
|
90
|
+
const [index, pos, end] = values;
|
|
91
|
+
if (typeof index !== 'number' ||
|
|
92
|
+
!Number.isInteger(index) ||
|
|
93
|
+
index < 0 ||
|
|
94
|
+
index >= count ||
|
|
95
|
+
failures.has(index) ||
|
|
96
|
+
!(pos === null || isGoString(pos)) ||
|
|
97
|
+
!(end === null || isGoString(end)) ||
|
|
98
|
+
(pos === null && end === null)) {
|
|
99
|
+
throw new ShInternalError('The syntax snapshot contains an invalid failure observation');
|
|
104
100
|
}
|
|
101
|
+
failures.set(index, [
|
|
102
|
+
pos === null ? null : copyError(pos),
|
|
103
|
+
end === null ? null : copyError(end),
|
|
104
|
+
]);
|
|
105
105
|
}
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
const observations = new WeakMap();
|
|
107
|
+
let index = 0;
|
|
108
|
+
visitNodes(file, (node) => {
|
|
109
|
+
if (index >= count)
|
|
110
|
+
throw new ShInternalError('The syntax snapshot omitted parsed nodes');
|
|
111
|
+
const errors = failures.get(index);
|
|
112
|
+
const posError = errors?.[0] ?? null;
|
|
113
|
+
const endError = errors?.[1] ?? null;
|
|
114
|
+
// Both bounds are validated even when get will replay the other bound's error.
|
|
115
|
+
const Pos = readBound(raw, index * 8, posError !== null);
|
|
116
|
+
const End = readBound(raw, index * 8 + 4, endError !== null);
|
|
117
|
+
const error = posError ?? endError;
|
|
118
|
+
observations.set(node, error !== null
|
|
119
|
+
? { error }
|
|
120
|
+
: {
|
|
121
|
+
positions: Object.freeze({ Pos: Object.freeze(Pos), End: Object.freeze(End) }),
|
|
122
|
+
});
|
|
123
|
+
index++;
|
|
124
|
+
});
|
|
125
|
+
if (index !== count)
|
|
126
|
+
throw new ShInternalError('The syntax snapshot contains excess observations');
|
|
108
127
|
return Object.freeze({
|
|
109
128
|
get(node) {
|
|
110
129
|
const observation = observations.get(node);
|
|
111
130
|
if (observation === undefined)
|
|
112
131
|
return undefined;
|
|
113
|
-
if ('error' in observation)
|
|
114
|
-
|
|
115
|
-
throw new InputError(typeof observation.error === 'string' ? observation.error : observation.error.slice());
|
|
116
|
-
}
|
|
132
|
+
if ('error' in observation)
|
|
133
|
+
throw new InputError(copyError(observation.error));
|
|
117
134
|
return observation.positions;
|
|
118
135
|
},
|
|
119
136
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntax-snapshot.js","sourceRoot":"","sources":["../src/syntax-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA+CrE;;;GAGG;AACH,SAAS,cAAc,CAAC,KAA8B;IACpD,OAAO,CACL,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU;YACxB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC9B,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAC/C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,
|
|
1
|
+
{"version":3,"file":"syntax-snapshot.js","sourceRoot":"","sources":["../src/syntax-snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/syntax-wire.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export declare function encodeWire(value: unknown): string;
|
|
|
17
17
|
/**
|
|
18
18
|
* Restores byte-bearing Go values. Ordinary syntax fields retain their spelling,
|
|
19
19
|
* nulls, defaults, and ordering; no source location or synthetic node is added.
|
|
20
|
+
* JSON.parse owns a fresh graph, so restoration replaces byte tags in that graph
|
|
21
|
+
* without copying its ordinary records and arrays or touching caller-owned data.
|
|
20
22
|
* @internal
|
|
21
23
|
*/
|
|
22
24
|
export declare function decodeWire(text: string): unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntax-wire.d.ts","sourceRoot":"","sources":["../src/syntax-wire.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEpF,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CASvD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAgCjD;AAED
|
|
1
|
+
{"version":3,"file":"syntax-wire.d.ts","sourceRoot":"","sources":["../src/syntax-wire.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEpF,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CASvD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAgCjD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAyChD;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAwB9D;AA4ED,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAS1D;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAE1D"}
|
package/dist/syntax-wire.js
CHANGED
|
@@ -68,6 +68,8 @@ export function encodeWire(value) {
|
|
|
68
68
|
/**
|
|
69
69
|
* Restores byte-bearing Go values. Ordinary syntax fields retain their spelling,
|
|
70
70
|
* nulls, defaults, and ordering; no source location or synthetic node is added.
|
|
71
|
+
* JSON.parse owns a fresh graph, so restoration replaces byte tags in that graph
|
|
72
|
+
* without copying its ordinary records and arrays or touching caller-owned data.
|
|
71
73
|
* @internal
|
|
72
74
|
*/
|
|
73
75
|
export function decodeWire(text) {
|
|
@@ -79,17 +81,39 @@ export function decodeWire(text) {
|
|
|
79
81
|
throw new ShInternalError(`Invalid syntax bridge JSON: ${String(cause)}`);
|
|
80
82
|
}
|
|
81
83
|
const visit = (item) => {
|
|
82
|
-
if (Array.isArray(item))
|
|
83
|
-
|
|
84
|
+
if (Array.isArray(item)) {
|
|
85
|
+
for (let index = 0; index < item.length; index++) {
|
|
86
|
+
const child = item[index];
|
|
87
|
+
const restored = visit(child);
|
|
88
|
+
if (restored !== child)
|
|
89
|
+
item[index] = restored;
|
|
90
|
+
}
|
|
91
|
+
return item;
|
|
92
|
+
}
|
|
84
93
|
if (!isRecord(item))
|
|
85
94
|
return item;
|
|
86
|
-
|
|
95
|
+
const keys = Object.keys(item);
|
|
96
|
+
if (keys.length === 1 && typeof item.Bytes === 'string') {
|
|
87
97
|
const bytes = Buffer.from(item.Bytes, 'base64');
|
|
88
98
|
if (bytes.toString('base64') !== item.Bytes)
|
|
89
99
|
throw new ShInternalError('Invalid base64 in syntax bridge response');
|
|
90
100
|
return new Uint8Array(bytes);
|
|
91
101
|
}
|
|
92
|
-
|
|
102
|
+
for (const key of keys) {
|
|
103
|
+
const child = item[key];
|
|
104
|
+
const restored = visit(child);
|
|
105
|
+
if (restored !== child) {
|
|
106
|
+
// JSON keys, including __proto__, remain own data properties. Defining a
|
|
107
|
+
// replacement cannot invoke a prototype setter or change the record shape.
|
|
108
|
+
Object.defineProperty(item, key, {
|
|
109
|
+
value: restored,
|
|
110
|
+
enumerable: true,
|
|
111
|
+
configurable: true,
|
|
112
|
+
writable: true,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return item;
|
|
93
117
|
};
|
|
94
118
|
return visit(parsed);
|
|
95
119
|
}
|
package/dist/syntax-wire.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntax-wire.js","sourceRoot":"","sources":["../src/syntax-wire.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,aAAa,GAEd,MAAM,+BAA+B,CAAC;AAGvC,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YAC9D,MAAM,IAAI,UAAU,CAClB,4EAA4E,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,IAAa,EAAW,EAAE;QACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC9D,IAAI,IAAI,YAAY,UAAU;YAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvF,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC7B,MAAM,IAAI,UAAU,CAClB,uEAAuE,CACxE,CAAC;YACJ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ;YAC1B,MAAM,IAAI,UAAU,CAClB,0EAA0E,CAC3E,CAAC;QACJ,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;QACtF,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;YAC3E,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"syntax-wire.js","sourceRoot":"","sources":["../src/syntax-wire.ts"],"names":[],"mappings":"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"}
|
package/dist/syntax.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../src/syntax.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAepF,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/E,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAExF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,mEAAmE;IACnE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,kFAAkF;IAClF,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,IAAI,CAEvF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GAAG,UAAU,EAC3B,OAAO,GAAE,YAAiB,GACzB,UAAU,
|
|
1
|
+
{"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../src/syntax.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAepF,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/E,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAExF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,mEAAmE;IACnE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,kFAAkF;IAClF,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,IAAI,CAEvF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GAAG,UAAU,EAC3B,OAAO,GAAE,YAAiB,GACzB,UAAU,CAMZ;AAwBD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CACpB,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,MAAM,EAAE,MAAM,GAAG,MAAM,GACtB,SAAS,CAQX;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,SAAS,cAAc,EACvD,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,WAAW,CAAC,MAAM,CAAC,CAarB"}
|
package/dist/syntax.js
CHANGED
|
@@ -29,7 +29,10 @@ export function parseSync(source, options = {}) {
|
|
|
29
29
|
*/
|
|
30
30
|
export function parseWithPositionsSync(source, options = {}) {
|
|
31
31
|
const { file, response } = invokeParse('parse-with-positions', source, options);
|
|
32
|
-
return Object.freeze({
|
|
32
|
+
return Object.freeze({
|
|
33
|
+
File: file,
|
|
34
|
+
Positions: createPositionSnapshot(file, response.Positions, response.PositionErrors),
|
|
35
|
+
});
|
|
33
36
|
}
|
|
34
37
|
/** Shared source/options/error semantics for both whole-file parsing operations. */
|
|
35
38
|
function invokeParse(operation, source, options) {
|
package/dist/syntax.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntax.js","sourceRoot":"","sources":["../src/syntax.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAmB,MAAM,sBAAsB,CAAC;AAG/E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAqBvE;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAA2B,EAAE,UAAwB,EAAE;IAC/E,OAAO,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAA2B,EAC3B,UAAwB,EAAE;IAE1B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,sBAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"syntax.js","sourceRoot":"","sources":["../src/syntax.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,10 +51,10 @@ export interface SyntaxFieldSchema {
|
|
|
51
51
|
export interface SyntaxRecordSchema {
|
|
52
52
|
/** Whether the actual upstream type implements syntax.Node. */
|
|
53
53
|
readonly node: boolean;
|
|
54
|
-
/** Every exported upstream field, retaining its original spelling. */
|
|
54
|
+
/** Every exported upstream field, retaining its original spelling and lexicographic iteration order for internal position correlation. */
|
|
55
55
|
readonly fields: Readonly<Record<string, SyntaxFieldSchema>>;
|
|
56
56
|
}
|
|
57
|
-
/** Reflection metadata; field order is not upstream Walk order. @public */
|
|
57
|
+
/** Reflection metadata; lexicographic field order correlates internal position occurrences and is not upstream Walk order. @public */
|
|
58
58
|
export declare const SYNTAX_SCHEMA: Readonly<Record<string, SyntaxRecordSchema>>;
|
|
59
59
|
/** Concrete alternatives accepted by upstream interfaces. @public */
|
|
60
60
|
export declare const SYNTAX_INTERFACES: Readonly<Record<string, readonly string[]>>;
|
|
@@ -31,7 +31,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
|
-
* Complete upstream field shapes for reflection and consumer adaptation.
|
|
34
|
+
* Complete upstream field shapes for reflection and consumer adaptation. Fields use lexicographic order to correlate internal parse-time position occurrences with the syntax writer. This order is not upstream Walk order. The public binding freezes this shared metadata; represented syntax records remain mutable.
|
|
35
35
|
*
|
|
36
36
|
* @public
|
|
37
37
|
*/
|
package/package.json
CHANGED
package/shim/sh-ast.wasm
CHANGED
|
Binary file
|