sh-ast 0.1.0 → 0.3.0

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.
Files changed (40) hide show
  1. package/dist/analyze/enumerate-commands.d.ts +7 -1
  2. package/dist/analyze/enumerate-commands.d.ts.map +1 -1
  3. package/dist/analyze/enumerate-commands.js +7 -1
  4. package/dist/analyze/enumerate-commands.js.map +1 -1
  5. package/dist/analyze/index.d.ts +12 -4
  6. package/dist/analyze/index.d.ts.map +1 -1
  7. package/dist/analyze/index.js +18 -15
  8. package/dist/analyze/index.js.map +1 -1
  9. package/dist/analyze/resolve-argv0.d.ts +335 -0
  10. package/dist/analyze/resolve-argv0.d.ts.map +1 -0
  11. package/dist/analyze/resolve-argv0.js +510 -0
  12. package/dist/analyze/resolve-argv0.js.map +1 -0
  13. package/dist/analyze/resolve-word.d.ts +5 -0
  14. package/dist/analyze/resolve-word.d.ts.map +1 -1
  15. package/dist/analyze/resolve-word.js +5 -0
  16. package/dist/analyze/resolve-word.js.map +1 -1
  17. package/dist/analyze.d.ts +592 -211
  18. package/dist/errors.d.ts +81 -16
  19. package/dist/errors.d.ts.map +1 -1
  20. package/dist/errors.js +90 -17
  21. package/dist/errors.js.map +1 -1
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/parse-depth-guard.d.ts +11 -0
  27. package/dist/parse-depth-guard.d.ts.map +1 -0
  28. package/dist/parse-depth-guard.js +633 -0
  29. package/dist/parse-depth-guard.js.map +1 -0
  30. package/dist/parse.d.ts +7 -2
  31. package/dist/parse.d.ts.map +1 -1
  32. package/dist/parse.js +15 -8
  33. package/dist/parse.js.map +1 -1
  34. package/dist/sh-ast.d.ts +165 -45
  35. package/dist/types.d.ts +5 -1
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/wasm-instance.js +3 -3
  38. package/dist/wasm-instance.js.map +1 -1
  39. package/generated/node-types.d.ts +44 -0
  40. package/package.json +1 -1
@@ -145,7 +145,13 @@ export interface CommandSite {
145
145
  * nesting-depth guard below, regardless of how many stages/links it has.
146
146
  *
147
147
  * @param root - Any `ShNode` — typically a `File` from `parseSync`, but any
148
- * subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled.
148
+ * subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled. Note
149
+ * `parseSync` itself already refuses (via its own `ShParseMaxDepthError`) any
150
+ * input whose estimated nesting exceeds *its* limit before ever producing a
151
+ * tree — see `parse-depth-guard.ts` — so a `root` sourced from `parseSync`
152
+ * has already passed that earlier, lower-level line of defense; this
153
+ * module's own guard below remains a second, independent backstop for
154
+ * trees built or mutated some other way.
149
155
  * @throws {@link ShAnalyzeMaxDepthError} if `root`'s genuinely nested
150
156
  * structure (subshells within subshells, chained command/process
151
157
  * substitutions, deeply nested `if`/`case`/loop/function/`time`/`{ }`
@@ -1 +1 @@
1
- {"version":3,"file":"enumerate-commands.d.ts","sourceRoot":"","sources":["../../src/analyze/enumerate-commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhC;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,oIAAoI;IACpI,QAAQ,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,CAAC;IACzC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C;AA2aD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAU7D"}
1
+ {"version":3,"file":"enumerate-commands.d.ts","sourceRoot":"","sources":["../../src/analyze/enumerate-commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhC;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,oIAAoI;IACpI,QAAQ,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,CAAC;IACzC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C;AA2aD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAU7D"}
@@ -364,7 +364,13 @@ function visitCommand(cmd, context, sites, depth) {
364
364
  * nesting-depth guard below, regardless of how many stages/links it has.
365
365
  *
366
366
  * @param root - Any `ShNode` — typically a `File` from `parseSync`, but any
367
- * subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled.
367
+ * subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled. Note
368
+ * `parseSync` itself already refuses (via its own `ShParseMaxDepthError`) any
369
+ * input whose estimated nesting exceeds *its* limit before ever producing a
370
+ * tree — see `parse-depth-guard.ts` — so a `root` sourced from `parseSync`
371
+ * has already passed that earlier, lower-level line of defense; this
372
+ * module's own guard below remains a second, independent backstop for
373
+ * trees built or mutated some other way.
368
374
  * @throws {@link ShAnalyzeMaxDepthError} if `root`'s genuinely nested
369
375
  * structure (subshells within subshells, chained command/process
370
376
  * substitutions, deeply nested `if`/`case`/loop/function/`time`/`{ }`
@@ -1 +1 @@
1
- {"version":3,"file":"enumerate-commands.js","sourceRoot":"","sources":["../../src/analyze/enumerate-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enumerate-commands.js","sourceRoot":"","sources":["../../src/analyze/enumerate-commands.ts"],"names":[],"mappings":"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"}
@@ -6,13 +6,21 @@
6
6
  * inventory asks first. Its second, {@link enumerateCommands}, answers
7
7
  * "where are all the commands, and how is each one reached?" — finding
8
8
  * every `CallExpr` anywhere in the tree, including ones hidden inside
9
- * command/process substitutions nested in words. Facts only: no policy, no
10
- * hardcoded command/wrapper lists (see {@link WordResolution}'s and
11
- * {@link CommandSite}'s doc comments).
9
+ * command/process substitutions nested in words. Its third,
10
+ * {@link resolveArgv0}, answers "what command is *actually* run, once
11
+ * transparent wrappers like `env`/`sudo`/`nohup` are followed?" — argv0
12
+ * alone is trivially spoofable through those, so this is the question a
13
+ * permission/policy check must ask instead. Facts only: no policy, no
14
+ * hardcoded command/wrapper lists beyond documented, overridable defaults
15
+ * (see {@link WordResolution}'s, {@link CommandSite}'s, and
16
+ * {@link Argv0Resolution}'s doc comments).
12
17
  */
13
18
  export { resolveWord } from './resolve-word.js';
14
19
  export type { ResolveWordOptions, WordResolution, WordResolutionReason } from './resolve-word.js';
15
20
  export { enumerateCommands } from './enumerate-commands.js';
16
21
  export type { CommandContext, CommandSite } from './enumerate-commands.js';
17
- export { ShAnalyzeMaxDepthError } from '../errors.js';
22
+ export { DEFAULT_TRANSPARENT_WRAPPERS, resolveArgv0 } from './resolve-argv0.js';
23
+ export type { Argv0ChainWord, Argv0Resolution, Argv0UnresolvedReason, Argv0UnresolvedWord, ResolveArgv0Options, WrapperSpec, } from './resolve-argv0.js';
24
+ export { ShAnalyzeInvalidWrapperSpecError, ShAnalyzeMaxDepthError, ShAstError } from '../errors.js';
25
+ export type { Position, ShNode } from '../types.js';
18
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAElG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAK3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAElG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EACV,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAU5B,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AASpG,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -6,22 +6,25 @@
6
6
  * inventory asks first. Its second, {@link enumerateCommands}, answers
7
7
  * "where are all the commands, and how is each one reached?" — finding
8
8
  * every `CallExpr` anywhere in the tree, including ones hidden inside
9
- * command/process substitutions nested in words. Facts only: no policy, no
10
- * hardcoded command/wrapper lists (see {@link WordResolution}'s and
11
- * {@link CommandSite}'s doc comments).
9
+ * command/process substitutions nested in words. Its third,
10
+ * {@link resolveArgv0}, answers "what command is *actually* run, once
11
+ * transparent wrappers like `env`/`sudo`/`nohup` are followed?" — argv0
12
+ * alone is trivially spoofable through those, so this is the question a
13
+ * permission/policy check must ask instead. Facts only: no policy, no
14
+ * hardcoded command/wrapper lists beyond documented, overridable defaults
15
+ * (see {@link WordResolution}'s, {@link CommandSite}'s, and
16
+ * {@link Argv0Resolution}'s doc comments).
12
17
  */
13
18
  export { resolveWord } from './resolve-word.js';
14
19
  export { enumerateCommands } from './enumerate-commands.js';
15
- // Re-exported from the root errors module so a consumer of enumerateCommands
16
- // can `import { ShAnalyzeMaxDepthError } from 'sh-ast/analyze'` without also
17
- // reaching into the root `sh-ast` entry point.
18
- export { ShAnalyzeMaxDepthError } from '../errors.js';
19
- // `ShNode` (resolveWord's parameter type) is deliberately *not* re-exported
20
- // here: it's the root `sh-ast` entry point's type (see `sh-ast`'s own
21
- // `index.ts`), and every caller of `resolveWord` already has a `ShNode` in
22
- // hand from `parseSync`/`walk` there. This is a known, intentional
23
- // "ae-forgotten-export" in this subpath's api-report — `sh-ast/analyze`
24
- // consumes the root layer's type without re-exporting it, rather than
25
- // re-exporting it (and its own transitive doc-linked types) just to
26
- // silence API Extractor.
20
+ export { DEFAULT_TRANSPARENT_WRAPPERS, resolveArgv0 } from './resolve-argv0.js';
21
+ // Re-exported from the root errors module so a consumer of enumerateCommands/
22
+ // resolveArgv0 can `import { ShAnalyzeMaxDepthError } from 'sh-ast/analyze'`
23
+ // without also reaching into the root `sh-ast` entry point. `ShAstError`
24
+ // is the shared base every analyze-layer error extends (see
25
+ // `ShAnalyzeMaxDepthError`, `ShAnalyzeInvalidWrapperSpecError`), so it's
26
+ // re-exported here too otherwise a consumer could not `catch`/reference
27
+ // the base class without also importing from the root `sh-ast` entry point
28
+ // (see #23).
29
+ export { ShAnalyzeInvalidWrapperSpecError, ShAnalyzeMaxDepthError, ShAstError } from '../errors.js';
27
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,6EAA6E;AAC7E,6EAA6E;AAC7E,+CAA+C;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,4EAA4E;AAC5E,sEAAsE;AACtE,2EAA2E;AAC3E,mEAAmE;AACnE,wEAAwE;AACxE,sEAAsE;AACtE,oEAAoE;AACpE,yBAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUhF,8EAA8E;AAC9E,6EAA6E;AAC7E,yEAAyE;AACzE,4DAA4D;AAC5D,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,aAAa;AACb,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,335 @@
1
+ import type { CommandSite } from './enumerate-commands.js';
2
+ import type { WordResolution } from './resolve-word.js';
3
+ /**
4
+ * A data-only description of one "transparent wrapper" — a command whose
5
+ * own argv0 is not the *effective* command actually run, because it just
6
+ * locates and re-execs another command (`env`, `sudo`, `nohup`, …).
7
+ * {@link resolveArgv0} interprets every field here structurally (skip N
8
+ * words, recognize this literal flag, …); adding a new `WrapperSpec` never
9
+ * requires a code change to {@link resolveArgv0} itself — that's what makes
10
+ * {@link DEFAULT_TRANSPARENT_WRAPPERS} data rather than a set of hardcoded
11
+ * `if (name === 'env')` branches, and what lets a caller extend or replace
12
+ * the table with their own project-specific wrappers (e.g. a `with-retry`
13
+ * helper).
14
+ *
15
+ * Every flag/operand-recognizing field is checked against a word's
16
+ * *statically resolved* text only (its `.text` on a {@link WordResolution}
17
+ * `static: true` result) — a dynamic word can never be identified as one of
18
+ * a wrapper's own flags or operands (see {@link resolveArgv0}'s doc comment
19
+ * for why an unrecognizable word always ends the chain rather than being
20
+ * guessed through).
21
+ *
22
+ * This shape may grow new optional fields in a **minor** release as this
23
+ * bridge models more wrapper flag conventions; existing fields' meaning
24
+ * never changes.
25
+ *
26
+ * @public
27
+ */
28
+ export interface WrapperSpec {
29
+ /**
30
+ * The literal, exact argv0 text (after quote/escape removal) that
31
+ * identifies this wrapper — e.g. `['env']`. Matched only against a
32
+ * `static: true` word; see {@link WrapperSpec}'s doc comment.
33
+ *
34
+ * Matching is **exact-name-only** — never basename matching. `sudo` does
35
+ * not match `/usr/bin/sudo` or `./sudo`; only a word whose *entire*
36
+ * resolved text equals one of `names` is recognized. This is a
37
+ * deliberate, narrower-than-real-world policy choice (a real shell would
38
+ * happily run `/usr/bin/sudo`), not an oversight: silently treating any
39
+ * path *ending in* a known wrapper name as that wrapper would be a
40
+ * different, broader matching policy this package isn't making on a
41
+ * caller's behalf. A caller who wants path-aware matching can express it
42
+ * explicitly via a custom {@link ResolveArgv0Options.transparentWrappers}
43
+ * table (e.g. `names: ['sudo', '/usr/bin/sudo']`).
44
+ */
45
+ readonly names: readonly string[];
46
+ /**
47
+ * When `true`, a `NAME=value`-shaped operand (an unquoted identifier
48
+ * followed by `=`, e.g. `A=1`) appearing after the wrapper name is
49
+ * skipped — this is `env`'s and `sudo`'s own `VAR=val` *operand*
50
+ * mechanism (setting variables in the wrapped command's environment),
51
+ * which is a distinct, per-wrapper concept from the shell-level
52
+ * `CallExpr.assigns` prefixes {@link Argv0Resolution.assignmentsSkipped}
53
+ * counts.
54
+ */
55
+ readonly skipAssignmentOperands?: boolean;
56
+ /** Exact flag tokens that take no operand of their own (e.g. `-i`, `-c`). */
57
+ readonly noArgFlags?: readonly string[];
58
+ /**
59
+ * A regular expression matched against a whole flag-position word for
60
+ * flag *shapes* that aren't fixed strings — e.g. `nice`'s legacy attached
61
+ * adjustment form (`nice -10 cmd`). Consumes no separate operand word,
62
+ * like {@link WrapperSpec.noArgFlags}.
63
+ */
64
+ readonly noArgFlagPattern?: RegExp;
65
+ /**
66
+ * Exact flag tokens that take an operand (e.g. `-u user`, `-n 10`).
67
+ * Recognized in every standard getopt-style form:
68
+ *
69
+ * - Separate word: `-u user` (both words skipped).
70
+ * - Attached short form: `-uuser` (one word — everything after the flag
71
+ * character is the operand text, exactly like real getopt).
72
+ * - Clustered with preceding no-operand short flags:
73
+ * `-Eu user`/`-Euuser` (`-E` from {@link WrapperSpec.noArgFlags},
74
+ * `-u` from here) — see {@link resolveArgv0}'s doc comment for the
75
+ * clustering algorithm.
76
+ * - Attached long form (only for an entry starting with `--`):
77
+ * `--long-flag=value` (one word).
78
+ *
79
+ * Any of these forms is recognized without a separate `WrapperSpec`
80
+ * field — the shapes are derived structurally from `argFlags` and
81
+ * `noArgFlags` together, matching how real short-option parsing works,
82
+ * rather than needing to be spelled out per wrapper.
83
+ */
84
+ readonly argFlags?: readonly string[];
85
+ /**
86
+ * Exact flag tokens (and, for a `--`-prefixed entry, its attached
87
+ * `--flag=value` form; for a short `-X` entry, its attached `-Xvalue`
88
+ * form) that make the **whole** {@link resolveArgv0} resolution
89
+ * unresolvable the moment they're seen, rather than being skipped like
90
+ * {@link WrapperSpec.argFlags} or ending the chain normally like an
91
+ * unrecognized word. For a flag whose *value itself* structurally embeds
92
+ * the real command in a way no `WrapperSpec` field can name a fixed
93
+ * "the wrapped command is word N" position for — e.g. `env -S string`
94
+ * splices `string`'s own words into argv, so the real command is
95
+ * *inside* that operand, not identifiable as a separate word at all (see
96
+ * `env`'s table entry). Reported via
97
+ * {@link Argv0Resolution.effective}'s `'embedded-command'` reason.
98
+ */
99
+ readonly unresolvableFlags?: readonly string[];
100
+ /**
101
+ * Exact flag tokens whose mere presence means this wrapper's own
102
+ * invocation *is* the effective command — nothing after it is ever the
103
+ * wrapped command, regardless of what other words follow. E.g.
104
+ * `command -v rm` doesn't execute `rm` at all; it prints whether `rm`
105
+ * is a recognized command name (Bash Reference Manual §4.1). Checked
106
+ * independently of word position (not "the Nth flag"), and takes
107
+ * precedence the moment it's seen — see `command`'s table entry.
108
+ */
109
+ readonly stopsChainFlags?: readonly string[];
110
+ /**
111
+ * The number of plain (non-flag, non-assignment-operand) words this
112
+ * wrapper requires *before* the wrapped command word — e.g. `timeout`'s
113
+ * mandatory `DURATION` operand (`timeout 10 rm -rf x`).
114
+ */
115
+ readonly positionalOperandsBeforeCommand?: number;
116
+ }
117
+ /**
118
+ * `sh-ast/analyze`'s default {@link WrapperSpec} table — every entry's
119
+ * flag/operand handling is hand-derived from that wrapper's own manual
120
+ * page (or, for shell builtins, the Bash Reference Manual/POSIX Shell &
121
+ * Utilities volume), cited per entry below, and cross-checked empirically
122
+ * against the real utility where one was locally available (GNU coreutils
123
+ * `env`/`nice` directly; `sudo` via `sudo -h`'s usage/option summary only
124
+ * — never executed, per this package's "facts only" posture and basic
125
+ * safety hygiene). This table is *data*, not policy: it names no
126
+ * "dangerous" commands, makes no safety judgment, and a caller can freely
127
+ * replace or extend it via {@link ResolveArgv0Options.transparentWrappers}
128
+ * (see {@link resolveArgv0}'s criterion-4-style configurability guarantee).
129
+ *
130
+ * Frozen (including each entry object and its own array/regexp fields) so
131
+ * immutability of this shared, module-scoped table is a contract, not just
132
+ * a convention any importer happens to honor — mirrors `visitorKeys`'s and
133
+ * `CHILD_TYPE_SCHEMA`'s freezing in `visitor-keys.ts`/`normalize.ts`.
134
+ *
135
+ * `xargs` is deliberately **excluded**: unlike every entry here, `xargs`
136
+ * doesn't simply re-exec a single wrapped command word it can point to
137
+ * statically — it invokes `command [initial-arguments]` once per *batch*
138
+ * of additional arguments assembled from its own stdin at run time
139
+ * (batched per `-n`/`-L`/line-splitting rules, GNU xargs(1)). Treating it
140
+ * as transparent would misrepresent what's actually invoked: the "wrapped
141
+ * command" is only ever a syntactic *prefix* of the real, stdin-dependent
142
+ * argv, and that prefix can itself be entirely absent (bare `xargs` reruns
143
+ * each stdin-derived line as its own command). No `WrapperSpec` shape here
144
+ * can honestly express that, so `xargs` is left for a caller to model
145
+ * explicitly if their use case calls for it, rather than shipped as a
146
+ * silently-wrong default.
147
+ *
148
+ * @see https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins — `command`, `exec` (Bash Reference Manual §4.1)
149
+ * @see https://pubs.opengroup.org/onlinepubs/9699919799/utilities/command.html — POSIX `command`
150
+ * @see https://www.gnu.org/software/coreutils/manual/html_node/env-invocation.html — GNU coreutils `env`
151
+ * @see https://pubs.opengroup.org/onlinepubs/9699919799/utilities/env.html — POSIX `env`
152
+ * @see https://pubs.opengroup.org/onlinepubs/9699919799/utilities/nohup.html — POSIX `nohup`
153
+ * @see https://www.gnu.org/software/coreutils/manual/html_node/nice-invocation.html — GNU coreutils `nice`
154
+ * @see https://pubs.opengroup.org/onlinepubs/9699919799/utilities/nice.html — POSIX `nice`
155
+ * @see https://pubs.opengroup.org/onlinepubs/9699919799/utilities/time.html — POSIX `time` utility (distinct from the bash `time` *reserved word*, which mvdan/sh models as a transparent `TimeClause` — see {@link WrapperSpec}'s `time` entry below)
156
+ * @see https://www.gnu.org/software/coreutils/manual/html_node/timeout-invocation.html — GNU coreutils `timeout`
157
+ * @see https://www.sudo.ws/docs/man/sudo.man/ — `sudo(8)`
158
+ * @see https://www.gnu.org/software/findutils/manual/html_node/find_html/xargs-options.html — GNU `xargs` (why it's excluded, above)
159
+ * @public
160
+ */
161
+ export declare const DEFAULT_TRANSPARENT_WRAPPERS: readonly WrapperSpec[];
162
+ /**
163
+ * Options accepted by {@link resolveArgv0}.
164
+ *
165
+ * @public
166
+ */
167
+ export interface ResolveArgv0Options {
168
+ /**
169
+ * The transparent-wrapper table to follow. Defaults to
170
+ * {@link DEFAULT_TRANSPARENT_WRAPPERS}. Pass a replacement array to drop
171
+ * a default entry entirely (that wrapper is then treated as an ordinary,
172
+ * non-transparent effective command), or add project-specific entries
173
+ * (e.g. a `with-retry` wrapper) — the table is plain data, not baked-in
174
+ * policy.
175
+ *
176
+ * Validated at the {@link resolveArgv0} boundary: a malformed entry (a
177
+ * non-array `names`, an empty `names`, or a wrong-typed flag field)
178
+ * throws {@link ShAnalyzeInvalidWrapperSpecError} immediately, rather
179
+ * than failing later with a confusing native `TypeError` deep inside
180
+ * flag matching.
181
+ */
182
+ readonly transparentWrappers?: readonly WrapperSpec[];
183
+ }
184
+ /**
185
+ * Why {@link resolveArgv0} couldn't identify a single, definite effective
186
+ * command — distinct from {@link WordResolutionReason}, which is about why
187
+ * one *word*'s text is unknowable at the shell-syntax level (an expansion,
188
+ * a glob, …). `Argv0UnresolvedReason` instead reflects `resolveArgv0`'s own
189
+ * wrapper-table-driven analysis of an otherwise statically-known word:
190
+ *
191
+ * - `'unknown-flag'` — a statically known word shaped like a flag (starts
192
+ * with `-`, isn't exactly `--`) for the wrapper currently being
193
+ * followed, but that doesn't match any flag/operand shape
194
+ * {@link WrapperSpec} recognizes for it. Never guessed through as the
195
+ * wrapped command — see {@link resolveArgv0}'s doc comment.
196
+ * - `'embedded-command'` — a wrapper flag whose value structurally embeds
197
+ * the real command rather than naming it as a separate word (e.g.
198
+ * `env -S 'rm -rf /'` — see {@link WrapperSpec.unresolvableFlags}'s doc
199
+ * comment).
200
+ *
201
+ * This union may grow in a **minor** release (mirroring
202
+ * `WordResolutionReason`'s and `CommandContext`'s semver policy in
203
+ * `resolve-word.ts`/`enumerate-commands.ts`) — a reason this version
204
+ * doesn't yet know about only ever accompanies `static: false`; an
205
+ * exhaustive `switch` should still include a `default` case.
206
+ *
207
+ * @public
208
+ */
209
+ export type Argv0UnresolvedReason = 'unknown-flag' | 'embedded-command';
210
+ /**
211
+ * A word position {@link resolveArgv0} could not resolve to either a known
212
+ * static text or one of {@link WordResolution}'s own `static: false`
213
+ * reasons — see {@link Argv0UnresolvedReason}'s doc comment. Shares
214
+ * `WordResolution`'s `static: false` discriminant shape by design, so a
215
+ * consumer that only branches on `.static` treats it identically to any
216
+ * other unresolvable word.
217
+ *
218
+ * @public
219
+ */
220
+ export interface Argv0UnresolvedWord {
221
+ readonly static: false;
222
+ readonly reason: Argv0UnresolvedReason;
223
+ }
224
+ /**
225
+ * The result of statically resolving one position in an
226
+ * {@link Argv0Resolution.chain}: either an ordinary {@link WordResolution}
227
+ * (from `resolveWord`) or an {@link Argv0UnresolvedWord} (a `resolveArgv0`-
228
+ * level "we don't know", distinct from any reason `resolveWord` itself
229
+ * would report).
230
+ *
231
+ * @public
232
+ */
233
+ export type Argv0ChainWord = WordResolution | Argv0UnresolvedWord;
234
+ /**
235
+ * The result of following a {@link CommandSite}'s argv0 through zero or
236
+ * more transparent wrappers to the effective command actually invoked.
237
+ * Facts only — no safety verdict; see {@link resolveArgv0}'s doc comment.
238
+ *
239
+ * @public
240
+ */
241
+ export interface Argv0Resolution {
242
+ /**
243
+ * Every word resolved along the way, outermost wrapper first, ending
244
+ * with {@link Argv0Resolution.effective} — e.g. for
245
+ * `nohup env A=1 command rm x` this is the four resolutions for
246
+ * `nohup`, `env`, `command`, `rm`, in that order. Always has at least
247
+ * one element.
248
+ */
249
+ readonly chain: readonly Argv0ChainWord[];
250
+ /**
251
+ * The last element of {@link Argv0Resolution.chain} — the effective
252
+ * command, or, if resolution hit a statically-unknowable word anywhere
253
+ * along the chain (an expansion, a glob, an unrecognized flag, an
254
+ * embedded-command operand, …), that unknowable result itself.
255
+ * **A `static: false` word is never guessed through**: the moment one is
256
+ * reached (whether at argv0, several wrappers deep, or synthesized by
257
+ * `resolveArgv0` itself for an unrecognized flag), it becomes
258
+ * `effective` and the chain stops — this is the security-relevant
259
+ * guarantee that makes `sudo -u x "$prog"` report an unknowable
260
+ * effective command rather than silently treating `sudo` itself as the
261
+ * answer, and makes `sudo -D /tmp rm x` (an unrecognized `sudo` flag)
262
+ * report `'unknown-flag'` rather than misreporting `rm` — or, worse,
263
+ * `/tmp` — as the effective command.
264
+ */
265
+ readonly effective: Argv0ChainWord;
266
+ /**
267
+ * The number of `VAR=val` shell-assignment prefixes on the `CallExpr`
268
+ * itself (`CommandSite.node.assigns`, e.g. the `FOO=bar` in
269
+ * `FOO=bar rm x`) that were skipped to reach argv0. This is a distinct
270
+ * mechanism from a wrapper's own `VAR=val` *operands* (e.g. `env`'s or
271
+ * `sudo`'s, see {@link WrapperSpec.skipAssignmentOperands}) — always
272
+ * exactly `CommandSite.node.assigns`'s length, independent of the
273
+ * wrapper chain found afterward.
274
+ */
275
+ readonly assignmentsSkipped: number;
276
+ }
277
+ /**
278
+ * Follows `site`'s argv0 through zero or more *transparent wrappers* —
279
+ * commands whose own argv0 isn't the command actually run, because they
280
+ * just locate and re-exec another command (`env FOO=1 rm -rf /`,
281
+ * `command rm`, `nohup rm`, `sudo -u x "$prog"`) — to the **effective**
282
+ * command: the one a permission/policy check must actually judge, since
283
+ * argv0 alone is trivially spoofable through any of these.
284
+ *
285
+ * The wrapper table ({@link ResolveArgv0Options.transparentWrappers},
286
+ * defaulting to {@link DEFAULT_TRANSPARENT_WRAPPERS}) is plain data: each
287
+ * {@link WrapperSpec} declares how to locate the word it wraps, and
288
+ * neither this function nor the table encodes any safety judgment about
289
+ * *which* commands are dangerous — matching {@link CommandSite}'s and
290
+ * {@link resolveWord}'s "facts only" posture. A caller can drop a default
291
+ * entry (that name then resolves as an ordinary, non-transparent
292
+ * command) or add their own (e.g. a project's `with-retry` helper) and
293
+ * both directions are followed identically to any built-in entry.
294
+ *
295
+ * **A statically-unknowable word is never guessed through** — three
296
+ * distinct cases all stop the chain immediately at that word rather than
297
+ * falling back to any other guess:
298
+ *
299
+ * 1. `argv0` or any wrapper's located word itself resolves `static: false`
300
+ * (an expansion, tilde, glob, …) — `sudo -u x "$prog"` reports
301
+ * `effective: { static: false, reason: 'expansion' }` with
302
+ * `chain: [<sudo>, <"$prog">]`, not `rm`/`sudo`/anything static.
303
+ * 2. A *statically known* word shaped like a flag (`-`-prefixed, not
304
+ * `--`) doesn't match any flag/operand shape the current
305
+ * {@link WrapperSpec} recognizes — `sudo -D /tmp rm x` (`-D` isn't
306
+ * modeled for `sudo`) reports an `effective` of `static: false` with
307
+ * `reason: 'unknown-flag'`, **not** `rm` (the pre-fix behavior: any
308
+ * unrecognized word, flag-shaped or not, was silently treated as the
309
+ * wrapped command — a false report that hid the real effective
310
+ * command behind a flag this table simply hadn't modeled yet).
311
+ * 3. A recognized flag's value structurally embeds the real command
312
+ * rather than naming it as a separate word — `env -S 'rm -rf /'`
313
+ * reports `effective: { static: false, reason: 'embedded-command' }`
314
+ * (see {@link WrapperSpec.unresolvableFlags}'s doc comment).
315
+ *
316
+ * `VAR=val` shell-assignment prefixes on the `CallExpr` itself
317
+ * (`CommandSite.node.assigns`, e.g. `FOO=bar rm x`) are always skipped and
318
+ * counted in {@link Argv0Resolution.assignmentsSkipped} — a mechanism
319
+ * distinct from a wrapper's own `VAR=val` *operands* (`env A=1 rm x`,
320
+ * `sudo A=1 rm x`), which {@link WrapperSpec.skipAssignmentOperands}
321
+ * handles per-wrapper.
322
+ *
323
+ * @param site - A {@link CommandSite}, typically from {@link enumerateCommands}.
324
+ * @param options - See {@link ResolveArgv0Options}.
325
+ * @throws TypeError if `site.argv` is empty — a programmer-error misuse of
326
+ * the API (every `CommandSite` `enumerateCommands` ever produces has at
327
+ * least one argv word; see its doc comment), not a "malformed shell
328
+ * source" case.
329
+ * @throws {@link ShAnalyzeInvalidWrapperSpecError} if
330
+ * `options.transparentWrappers` contains a malformed entry (see
331
+ * {@link ResolveArgv0Options.transparentWrappers}'s doc comment).
332
+ * @public
333
+ */
334
+ export declare function resolveArgv0(site: CommandSite, options?: ResolveArgv0Options): Argv0Resolution;
335
+ //# sourceMappingURL=resolve-argv0.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-argv0.d.ts","sourceRoot":"","sources":["../../src/analyze/resolve-argv0.ts"],"names":[],"mappings":"AAGA,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;;;;;;;;OAQG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAE1C,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,EA8G7D,CAAC;AAEH;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAExE;;;;;;;;;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;AAmTD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAgC9F"}