@cplieger/deadset-ts 8.0.0-dev.2 → 8.0.0-dev.20

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 (402) hide show
  1. package/README.md +3 -1
  2. package/THIRD_PARTY_NOTICES.md +27 -0
  3. package/dist/bin/mapper-connection.js +2 -1
  4. package/dist/bin/node-host.js +24 -5
  5. package/dist/src/alias-chain.js +2 -7
  6. package/dist/src/amd.js +81 -0
  7. package/dist/src/analysis.js +269 -432
  8. package/dist/src/augmentations.js +64 -3
  9. package/dist/src/automatic-types.js +10 -29
  10. package/dist/src/bindings.js +382 -0
  11. package/dist/src/calls.js +279 -43
  12. package/dist/src/commands/held.js +499 -0
  13. package/dist/src/commands/read.js +161 -0
  14. package/dist/src/commands/shell.js +169 -0
  15. package/dist/src/commands/tools.js +1847 -0
  16. package/dist/src/component-files.js +3 -2
  17. package/dist/src/component-layer.js +4 -2
  18. package/dist/src/config.js +6 -82
  19. package/dist/src/conformance-record.js +1 -1
  20. package/dist/src/consumers.js +10 -38
  21. package/dist/src/contextual-uses.js +57 -26
  22. package/dist/src/contract/config.generated.js +561 -0
  23. package/dist/src/contract/contract.generated.js +1369 -0
  24. package/dist/src/contract/report.generated.js +866 -0
  25. package/dist/src/dependencies.js +164 -121
  26. package/dist/src/destructuring.js +1 -19
  27. package/dist/src/edges.js +38 -122
  28. package/dist/src/element-access.js +181 -168
  29. package/dist/src/entries/build-scripts.js +222 -0
  30. package/dist/src/{configuration-files.js → entries/configuration-files.js} +52 -256
  31. package/dist/src/{convention-rows.js → entries/convention-rows.js} +170 -30
  32. package/dist/src/entries/conventions.js +740 -0
  33. package/dist/src/{html-entries.js → entries/html-entries.js} +12 -42
  34. package/dist/src/{mdx-entries.js → entries/mdx-entries.js} +5 -28
  35. package/dist/src/entries/run-directories.js +77 -0
  36. package/dist/src/entries/sources.js +144 -0
  37. package/dist/src/entries/static-module.js +670 -0
  38. package/dist/src/entries/test-runners.js +650 -0
  39. package/dist/src/entries/workflow-steps.js +345 -0
  40. package/dist/src/enum-group.js +3 -10
  41. package/dist/src/erased-stores.js +4 -6
  42. package/dist/src/exempt-classes.js +1 -63
  43. package/dist/src/exempt.js +21 -66
  44. package/dist/src/exposure.js +400 -0
  45. package/dist/src/extensions.js +37 -0
  46. package/dist/src/facts.js +38 -0
  47. package/dist/src/failure.js +36 -0
  48. package/dist/src/file-facts.js +3 -26
  49. package/dist/src/findings/completion.js +109 -56
  50. package/dist/src/findings/dependencies-and-module-machinery.js +4 -5
  51. package/dist/src/findings/emitters.js +27 -41
  52. package/dist/src/{implementations.js → findings/implementations.js} +3 -3
  53. package/dist/src/{in-operands.js → findings/in-operands.js} +3 -2
  54. package/dist/src/findings/interfaces.js +4 -5
  55. package/dist/src/findings/intra-function.js +16 -13
  56. package/dist/src/findings/non-code-artifacts.js +17 -12
  57. package/dist/src/findings/reads-and-writes.js +86 -27
  58. package/dist/src/findings/self-check.js +44 -30
  59. package/dist/src/findings/unused-declarations.js +29 -45
  60. package/dist/src/findings/visibility-narrowing.js +23 -31
  61. package/dist/src/findings-pass.js +13 -21
  62. package/dist/src/framework-lifecycle.js +46 -19
  63. package/dist/src/fs/document.js +52 -0
  64. package/dist/src/fs/manifest.js +67 -0
  65. package/dist/src/fs/tree.js +88 -0
  66. package/dist/src/generated-file.js +174 -28
  67. package/dist/src/git-ignore.js +39 -26
  68. package/dist/src/import-bindings.js +73 -28
  69. package/dist/src/index/sites.js +557 -0
  70. package/dist/src/index.js +2 -2
  71. package/dist/src/indexed-access.js +523 -478
  72. package/dist/src/injection-container.js +2 -2
  73. package/dist/src/interface-satisfaction.js +1 -1
  74. package/dist/src/intra-function-parts.js +63 -43
  75. package/dist/src/inventory/commonjs.js +507 -0
  76. package/dist/src/inventory/enumerate.js +167 -0
  77. package/dist/src/inventory/syntax.js +236 -0
  78. package/dist/src/inventory.js +323 -724
  79. package/dist/src/javascript-file.js +48 -0
  80. package/dist/src/json-document.js +198 -67
  81. package/dist/src/keyof-comparisons.js +126 -107
  82. package/dist/src/kinds.js +3 -366
  83. package/dist/src/{components.js → liveness/components.js} +2 -3
  84. package/dist/src/{graph.js → liveness/graph.js} +52 -28
  85. package/dist/src/liveness/matrix.js +99 -0
  86. package/dist/src/liveness/sweep.js +558 -0
  87. package/dist/src/load/classify.js +289 -0
  88. package/dist/src/load/diagnostics.js +87 -0
  89. package/dist/src/load/discover.js +285 -0
  90. package/dist/src/{emit-map.js → load/emit-map.js} +1 -1
  91. package/dist/src/load/expected-module.js +136 -0
  92. package/dist/src/load/load.js +27 -0
  93. package/dist/src/load/module-lookup.js +37 -0
  94. package/dist/src/load/package-scope.js +56 -0
  95. package/dist/src/load/plan.js +313 -0
  96. package/dist/src/load/specifiers.js +113 -0
  97. package/dist/src/load/synthesize.js +152 -0
  98. package/dist/src/load/test-globals.js +207 -0
  99. package/dist/src/load/test-joins.js +82 -0
  100. package/dist/src/{workspace-manifests.js → load/workspace-manifests.js} +4 -4
  101. package/dist/src/{workspace-programs.js → load/workspace-programs.js} +89 -66
  102. package/dist/src/{workspace-resolution.js → load/workspace-resolution.js} +24 -66
  103. package/dist/src/{workspace-run.js → load/workspace-run.js} +7 -7
  104. package/dist/src/{workspace.js → load/workspace.js} +62 -124
  105. package/dist/src/module-declarations.js +70 -85
  106. package/dist/src/overrides.js +134 -112
  107. package/dist/src/partial.js +2 -1
  108. package/dist/src/paths.js +82 -16
  109. package/dist/src/platform-calls.js +78 -0
  110. package/dist/src/platform-symbols.js +134 -0
  111. package/dist/src/position.js +43 -1
  112. package/dist/src/print.js +11 -79
  113. package/dist/src/product.js +13 -0
  114. package/dist/src/query.js +47 -0
  115. package/dist/src/ref.js +12 -20
  116. package/dist/src/references/read-rule.js +1 -0
  117. package/dist/src/references/read-rules.js +48 -0
  118. package/dist/src/references/sink.js +237 -0
  119. package/dist/src/references/sources.js +450 -0
  120. package/dist/src/references.js +117 -1074
  121. package/dist/src/report-schema.js +51 -0
  122. package/dist/src/report.js +57 -41
  123. package/dist/src/reporters/annotations.js +15 -8
  124. package/dist/src/reporters/sarif.js +16 -10
  125. package/dist/src/reporters/template.js +4 -19
  126. package/dist/src/resolve.js +246 -730
  127. package/dist/src/{configured-declarations.js → roots/configured-declarations.js} +22 -24
  128. package/dist/src/{entry-point-gaps.js → roots/entry-point-gaps.js} +6 -15
  129. package/dist/src/roots/manifest.js +216 -0
  130. package/dist/src/roots/published-reach.js +412 -0
  131. package/dist/src/roots/root-set.js +487 -0
  132. package/dist/src/roots/unseen-loads.js +236 -0
  133. package/dist/src/run.js +66 -77
  134. package/dist/src/schema.js +320 -343
  135. package/dist/src/scope.js +38 -115
  136. package/dist/src/serialization-contract.js +601 -22
  137. package/dist/src/session.js +37 -29
  138. package/dist/src/source-files.js +6 -10
  139. package/dist/src/stores.js +4 -2
  140. package/dist/src/suppress-file.js +25 -28
  141. package/dist/src/suppress-inline.js +36 -83
  142. package/dist/src/suppress.js +50 -71
  143. package/dist/src/symbol-keys.js +92 -88
  144. package/dist/src/template-field.js +9 -19
  145. package/dist/src/tests/file-class.js +76 -0
  146. package/dist/src/{outside-tests.js → tests/outside.js} +7 -7
  147. package/dist/src/{test-support.js → tests/support.js} +5 -12
  148. package/dist/src/text/compare.js +26 -0
  149. package/dist/src/text/glob.js +194 -0
  150. package/dist/src/text/named-files.js +298 -0
  151. package/dist/src/text/yaml.js +684 -0
  152. package/dist/src/type-errors.js +11 -232
  153. package/dist/src/type-parameter-reads.js +178 -139
  154. package/dist/src/unimplemented-callees.js +262 -242
  155. package/dist/src/unwrap.js +23 -0
  156. package/dist/src/usage.js +10 -0
  157. package/dist/src/vendor/unbash/ansi-c.js +132 -0
  158. package/dist/src/vendor/unbash/arithmetic-parts.js +37 -0
  159. package/dist/src/vendor/unbash/arithmetic.js +591 -0
  160. package/dist/src/vendor/unbash/assignment.js +131 -0
  161. package/dist/src/vendor/unbash/chars.js +48 -0
  162. package/dist/src/vendor/unbash/command.js +41 -0
  163. package/dist/src/vendor/unbash/expansion.js +80 -0
  164. package/dist/src/vendor/unbash/glob.js +268 -0
  165. package/dist/src/vendor/unbash/heredoc.js +27 -0
  166. package/dist/src/vendor/unbash/internal-types.js +1 -0
  167. package/dist/src/vendor/unbash/lexer.js +4274 -0
  168. package/dist/src/vendor/unbash/limits.js +3 -0
  169. package/dist/src/vendor/unbash/parser.js +1366 -0
  170. package/dist/src/vendor/unbash/parts.js +57 -0
  171. package/dist/src/vendor/unbash/substitution-context.js +8 -0
  172. package/dist/src/vendor/unbash/traversal.js +212 -0
  173. package/dist/src/vendor/unbash/types.js +1 -0
  174. package/dist/src/vendor/unbash/word-value.js +61 -0
  175. package/dist/src/vendor/unbash/word.js +40 -0
  176. package/dist/src/verbs/analyze.js +194 -127
  177. package/dist/src/verbs/describe.js +13 -18
  178. package/dist/src/verbs/explain.js +85 -139
  179. package/dist/src/verbs/print-config.js +2 -1
  180. package/dist/src/verbs/print-projects.js +6 -4
  181. package/dist/src/verbs/print-retained.js +7 -5
  182. package/dist/src/verbs/print-roots.js +4 -2
  183. package/dist/src/verbs/verb.js +1 -5
  184. package/dist/src/verbs/version.js +14 -3
  185. package/jsr.json +2 -1
  186. package/package.json +14 -8
  187. package/src/alias-chain.ts +2 -9
  188. package/src/amd.ts +130 -0
  189. package/src/analysis.ts +424 -650
  190. package/src/augmentations.ts +93 -4
  191. package/src/automatic-types.ts +12 -30
  192. package/src/bindings.ts +460 -0
  193. package/src/calls.ts +338 -46
  194. package/src/commands/held.ts +632 -0
  195. package/src/commands/read.ts +242 -0
  196. package/src/commands/shell.ts +228 -0
  197. package/src/commands/tools.ts +2382 -0
  198. package/src/component-files.ts +4 -2
  199. package/src/component-layer.ts +4 -2
  200. package/src/config.ts +31 -302
  201. package/src/conformance-record.ts +1 -1
  202. package/src/consumers.ts +16 -66
  203. package/src/contextual-uses.ts +66 -34
  204. package/src/contract/config.generated.ts +821 -0
  205. package/src/contract/contract.generated.ts +1452 -0
  206. package/src/contract/report.generated.ts +1241 -0
  207. package/src/dependencies.ts +222 -127
  208. package/src/destructuring.ts +1 -31
  209. package/src/edges.ts +41 -140
  210. package/src/element-access.ts +190 -187
  211. package/src/entries/build-scripts.ts +292 -0
  212. package/src/{configuration-files.ts → entries/configuration-files.ts} +68 -278
  213. package/src/{convention-rows.ts → entries/convention-rows.ts} +227 -31
  214. package/src/{conventions.ts → entries/conventions.ts} +367 -583
  215. package/src/{html-entries.ts → entries/html-entries.ts} +22 -48
  216. package/src/{mdx-entries.ts → entries/mdx-entries.ts} +7 -30
  217. package/src/entries/run-directories.ts +108 -0
  218. package/src/entries/sources.ts +266 -0
  219. package/src/entries/static-module.ts +858 -0
  220. package/src/entries/test-runners.ts +835 -0
  221. package/src/entries/workflow-steps.ts +432 -0
  222. package/src/enum-group.ts +2 -11
  223. package/src/erased-stores.ts +3 -7
  224. package/src/exempt-classes.ts +1 -75
  225. package/src/exempt.ts +70 -98
  226. package/src/exposure.ts +492 -0
  227. package/src/extensions.ts +45 -0
  228. package/src/facts.ts +46 -0
  229. package/src/failure.ts +63 -0
  230. package/src/file-facts.ts +15 -25
  231. package/src/finding.ts +10 -10
  232. package/src/findings/boundary.ts +11 -0
  233. package/src/findings/completion.ts +133 -64
  234. package/src/findings/dependencies-and-module-machinery.ts +4 -7
  235. package/src/findings/emitter.ts +9 -10
  236. package/src/findings/emitters.ts +38 -52
  237. package/src/{implementations.ts → findings/implementations.ts} +4 -4
  238. package/src/{in-operands.ts → findings/in-operands.ts} +4 -3
  239. package/src/findings/interfaces.ts +7 -9
  240. package/src/findings/intra-function.ts +16 -14
  241. package/src/findings/non-code-artifacts.ts +24 -15
  242. package/src/findings/reads-and-writes.ts +118 -41
  243. package/src/findings/self-check.ts +51 -38
  244. package/src/findings/unused-declarations.ts +31 -49
  245. package/src/findings/visibility-narrowing.ts +36 -40
  246. package/src/findings-pass.ts +15 -31
  247. package/src/framework-lifecycle.ts +47 -19
  248. package/src/fs/document.ts +70 -0
  249. package/src/fs/manifest.ts +96 -0
  250. package/src/fs/tree.ts +110 -0
  251. package/src/generated-file.ts +242 -35
  252. package/src/git-ignore.ts +50 -26
  253. package/src/host.ts +12 -5
  254. package/src/import-bindings.ts +98 -29
  255. package/src/index/sites.ts +781 -0
  256. package/src/index.ts +2 -2
  257. package/src/indexed-access.ts +570 -527
  258. package/src/injection-container.ts +2 -2
  259. package/src/interface-satisfaction.ts +2 -2
  260. package/src/intra-function-parts.ts +73 -44
  261. package/src/inventory/commonjs.ts +696 -0
  262. package/src/inventory/enumerate.ts +203 -0
  263. package/src/inventory/syntax.ts +311 -0
  264. package/src/inventory.ts +442 -895
  265. package/src/javascript-file.ts +54 -0
  266. package/src/json-document.ts +241 -76
  267. package/src/keyof-comparisons.ts +133 -122
  268. package/src/kinds.ts +5 -413
  269. package/src/{components.ts → liveness/components.ts} +4 -6
  270. package/src/{graph.ts → liveness/graph.ts} +100 -35
  271. package/src/liveness/matrix.ts +162 -0
  272. package/src/liveness/sweep.ts +855 -0
  273. package/src/load/classify.ts +433 -0
  274. package/src/load/diagnostics.ts +154 -0
  275. package/src/load/discover.ts +471 -0
  276. package/src/{emit-map.ts → load/emit-map.ts} +1 -1
  277. package/src/load/expected-module.ts +194 -0
  278. package/src/load/load.ts +73 -0
  279. package/src/load/module-lookup.ts +50 -0
  280. package/src/load/package-scope.ts +74 -0
  281. package/src/load/plan.ts +513 -0
  282. package/src/load/specifiers.ts +171 -0
  283. package/src/load/synthesize.ts +230 -0
  284. package/src/load/test-globals.ts +251 -0
  285. package/src/load/test-joins.ts +98 -0
  286. package/src/{workspace-manifests.ts → load/workspace-manifests.ts} +5 -5
  287. package/src/{workspace-programs.ts → load/workspace-programs.ts} +128 -85
  288. package/src/{workspace-resolution.ts → load/workspace-resolution.ts} +41 -77
  289. package/src/{workspace-run.ts → load/workspace-run.ts} +18 -16
  290. package/src/{workspace.ts → load/workspace.ts} +90 -134
  291. package/src/module-declarations.ts +74 -98
  292. package/src/overrides.ts +162 -134
  293. package/src/partial.ts +3 -2
  294. package/src/paths.ts +92 -16
  295. package/src/platform-calls.ts +119 -0
  296. package/src/platform-symbols.ts +189 -0
  297. package/src/position.ts +44 -1
  298. package/src/print.ts +12 -92
  299. package/src/product.ts +18 -0
  300. package/src/query.ts +92 -0
  301. package/src/ref.ts +12 -20
  302. package/src/references/read-rule.ts +60 -0
  303. package/src/references/read-rules.ts +55 -0
  304. package/src/references/sink.ts +314 -0
  305. package/src/references/sources.ts +632 -0
  306. package/src/references.ts +187 -1450
  307. package/src/report-schema.ts +68 -0
  308. package/src/report.ts +103 -226
  309. package/src/reporters/annotations.ts +22 -11
  310. package/src/reporters/json.ts +1 -1
  311. package/src/reporters/reporter.ts +2 -4
  312. package/src/reporters/reporters.ts +1 -1
  313. package/src/reporters/sarif.ts +29 -16
  314. package/src/reporters/template.ts +4 -20
  315. package/src/reporters/text.ts +3 -3
  316. package/src/resolve.ts +284 -1115
  317. package/src/{configured-declarations.ts → roots/configured-declarations.ts} +27 -29
  318. package/src/{entry-point-gaps.ts → roots/entry-point-gaps.ts} +7 -16
  319. package/src/roots/manifest.ts +303 -0
  320. package/src/roots/published-reach.ts +486 -0
  321. package/src/{roots.ts → roots/root-set.ts} +286 -469
  322. package/src/roots/unseen-loads.ts +345 -0
  323. package/src/run.ts +75 -91
  324. package/src/schema.ts +391 -388
  325. package/src/scope.ts +46 -138
  326. package/src/serialization-contract.ts +769 -23
  327. package/src/session.ts +87 -55
  328. package/src/source-files.ts +6 -11
  329. package/src/stores.ts +15 -3
  330. package/src/suppress-file.ts +24 -33
  331. package/src/suppress-inline.ts +55 -91
  332. package/src/suppress.ts +78 -79
  333. package/src/symbol-keys.ts +104 -107
  334. package/src/template-field.ts +15 -25
  335. package/src/tests/file-class.ts +135 -0
  336. package/src/{outside-tests.ts → tests/outside.ts} +16 -10
  337. package/src/{test-support.ts → tests/support.ts} +15 -21
  338. package/src/text/compare.ts +27 -0
  339. package/src/text/glob.ts +210 -0
  340. package/src/text/named-files.ts +388 -0
  341. package/src/text/yaml.ts +747 -0
  342. package/src/type-errors.ts +18 -288
  343. package/src/type-parameter-reads.ts +187 -158
  344. package/src/unimplemented-callees.ts +297 -280
  345. package/src/unwrap.ts +34 -0
  346. package/src/usage.ts +10 -0
  347. package/src/vendor/unbash/LICENSE +15 -0
  348. package/src/vendor/unbash/VENDORED.md +16 -0
  349. package/src/vendor/unbash/ansi-c.ts +132 -0
  350. package/src/vendor/unbash/arithmetic-parts.ts +53 -0
  351. package/src/vendor/unbash/arithmetic.ts +641 -0
  352. package/src/vendor/unbash/assignment.ts +163 -0
  353. package/src/vendor/unbash/chars.ts +48 -0
  354. package/src/vendor/unbash/command.ts +47 -0
  355. package/src/vendor/unbash/expansion.ts +144 -0
  356. package/src/vendor/unbash/glob.ts +284 -0
  357. package/src/vendor/unbash/heredoc.ts +34 -0
  358. package/src/vendor/unbash/internal-types.ts +94 -0
  359. package/src/vendor/unbash/lexer.ts +4352 -0
  360. package/src/vendor/unbash/limits.ts +3 -0
  361. package/src/vendor/unbash/parser.ts +1612 -0
  362. package/src/vendor/unbash/parts.ts +96 -0
  363. package/src/vendor/unbash/substitution-context.ts +20 -0
  364. package/src/vendor/unbash/traversal.ts +182 -0
  365. package/src/vendor/unbash/types.ts +660 -0
  366. package/src/vendor/unbash/word-value.ts +64 -0
  367. package/src/vendor/unbash/word.ts +50 -0
  368. package/src/verbs/analyze.ts +255 -164
  369. package/src/verbs/describe.ts +19 -17
  370. package/src/verbs/explain.ts +93 -169
  371. package/src/verbs/print-config.ts +2 -1
  372. package/src/verbs/print-projects.ts +6 -4
  373. package/src/verbs/print-retained.ts +7 -5
  374. package/src/verbs/print-roots.ts +4 -2
  375. package/src/verbs/verb.ts +2 -8
  376. package/src/verbs/version.ts +15 -3
  377. package/dist/src/base-url.js +0 -18
  378. package/dist/src/conventions.js +0 -937
  379. package/dist/src/discover.js +0 -468
  380. package/dist/src/entry-points.js +0 -529
  381. package/dist/src/glob.js +0 -65
  382. package/dist/src/manifest.js +0 -165
  383. package/dist/src/matrix.js +0 -246
  384. package/dist/src/pnpm-workspace.js +0 -120
  385. package/dist/src/roots.js +0 -672
  386. package/dist/src/setup-failure.js +0 -23
  387. package/dist/src/sweep.js +0 -224
  388. package/dist/src/test-joins.js +0 -101
  389. package/dist/src/version.js +0 -7
  390. package/dist/src/workflow-steps.js +0 -185
  391. package/src/base-url.ts +0 -24
  392. package/src/discover.ts +0 -653
  393. package/src/entry-points.ts +0 -687
  394. package/src/glob.ts +0 -67
  395. package/src/manifest.ts +0 -234
  396. package/src/matrix.ts +0 -423
  397. package/src/pnpm-workspace.ts +0 -135
  398. package/src/setup-failure.ts +0 -39
  399. package/src/sweep.ts +0 -347
  400. package/src/test-joins.ts +0 -120
  401. package/src/version.ts +0 -7
  402. package/src/workflow-steps.ts +0 -216
@@ -0,0 +1,131 @@
1
+ // Code generated by scripts/vendor-unbash.ts from unbash 6.0.0 (968c14992a43dc06ce29c9f51858abd4a87851ea). DO NOT EDIT.
2
+ // @ts-nocheck
3
+ import { Lexer, LexContext, Token } from "./lexer.js";
4
+ import { skipLineContinuations } from "./chars.js";
5
+ import { arrayPartsResolver, computeBareWordParts, embeddedPartsResolver, wordPartsResolver } from "./parts.js";
6
+ import { WordImpl } from "./word.js";
7
+ class ArrayValueImpl {
8
+ type = "ArrayValue";
9
+ pos;
10
+ end;
11
+ #source;
12
+ #depth;
13
+ #context;
14
+ #elements;
15
+ constructor(source, pos, end, depth, context) {
16
+ this.pos = pos;
17
+ this.end = end;
18
+ this.#source = source;
19
+ this.#depth = depth;
20
+ this.#context = context;
21
+ }
22
+ get elements() {
23
+ if (this.#elements)
24
+ return this.#elements;
25
+ const lexer = new Lexer(this.#source, this.pos + 1, this.end - 1, false, this.#context);
26
+ lexer._nestingDepth = this.#depth;
27
+ const elements = [];
28
+ while (lexer.peek(LexContext.ArrayElement).token !== Token.EOF) {
29
+ const token = lexer.next(LexContext.ArrayElement);
30
+ if (token.token !== Token.Word && token.token !== Token.Assignment)
31
+ continue;
32
+ const text = token.raw ? token.value : this.#source.slice(token.pos, token.end);
33
+ const indexed = text.charCodeAt(0) === 91;
34
+ const context = lexer.getSubstitutionContext();
35
+ const source = !indexed && token.raw && token.keywordEligible ? undefined : this.#source;
36
+ const resolver = source === undefined
37
+ ? computeBareWordParts
38
+ : indexed
39
+ ? arrayPartsResolver(context)
40
+ : wordPartsResolver(context);
41
+ elements.push(new WordImpl(text, token.pos, token.end, source, resolver, this.#depth));
42
+ }
43
+ this.#elements = elements;
44
+ return elements;
45
+ }
46
+ toJSON() {
47
+ return { type: this.type, pos: this.pos, end: this.end, elements: this.elements };
48
+ }
49
+ }
50
+ export class AssignmentImpl {
51
+ type = "Assignment";
52
+ pos;
53
+ end;
54
+ text;
55
+ #source;
56
+ #depth;
57
+ #context;
58
+ #operatorPos;
59
+ #name = null;
60
+ #append;
61
+ #index;
62
+ #value = null;
63
+ constructor(text, pos, end, source, operatorPos, depth, context) {
64
+ this.pos = pos;
65
+ this.end = end;
66
+ this.text = text;
67
+ this.#source = source;
68
+ this.#operatorPos = operatorPos;
69
+ this.#depth = depth;
70
+ this.#context = context;
71
+ }
72
+ get name() {
73
+ return this.#name ?? this.resolveTarget();
74
+ }
75
+ get append() {
76
+ if (this.#name === null)
77
+ this.resolveTarget();
78
+ return this.#append;
79
+ }
80
+ get index() {
81
+ if (this.#name === null)
82
+ this.resolveTarget();
83
+ return this.#index;
84
+ }
85
+ get value() {
86
+ if (this.#value !== null)
87
+ return this.#value;
88
+ const start = this.#operatorPos + 1;
89
+ const arrayStart = skipLineContinuations(this.#source, start, this.end);
90
+ this.#value =
91
+ this.#source.charCodeAt(arrayStart) === 40 && this.#source.charCodeAt(this.end - 1) === 41
92
+ ? new ArrayValueImpl(this.#source, arrayStart, this.end, this.#depth, this.#context)
93
+ : new WordImpl(this.#source.slice(start, this.end), start, this.end, this.#source, wordPartsResolver(this.#context), this.#depth);
94
+ return this.#value;
95
+ }
96
+ resolveTarget() {
97
+ const equal = this.#operatorPos - this.pos;
98
+ let nameEnd = equal;
99
+ let appendPos = equal;
100
+ while (appendPos >= 2 && this.text.charCodeAt(appendPos - 2) === 92 && this.text.charCodeAt(appendPos - 1) === 10)
101
+ appendPos -= 2;
102
+ if (this.text.charCodeAt(appendPos - 1) === 43) {
103
+ this.#append = true;
104
+ nameEnd = appendPos - 1;
105
+ }
106
+ const bracket = this.text.indexOf("[");
107
+ if (bracket > 0 && bracket < nameEnd) {
108
+ const close = this.text.lastIndexOf("]", equal);
109
+ if (close > bracket) {
110
+ const start = this.pos + bracket + 1;
111
+ const end = this.pos + close;
112
+ this.#index = new WordImpl(this.#source.slice(start, end), start, end, this.#source, embeddedPartsResolver(this.#context), this.#depth);
113
+ nameEnd = bracket;
114
+ }
115
+ }
116
+ const name = this.text.slice(0, nameEnd);
117
+ return (this.#name = name.includes("\\\n") ? name.split("\\\n").join("") : name);
118
+ }
119
+ toJSON() {
120
+ return {
121
+ type: this.type,
122
+ pos: this.pos,
123
+ end: this.end,
124
+ text: this.text,
125
+ name: this.name,
126
+ append: this.append,
127
+ index: this.index,
128
+ value: this.value,
129
+ };
130
+ }
131
+ }
@@ -0,0 +1,48 @@
1
+ // Code generated by scripts/vendor-unbash.ts from unbash 6.0.0 (968c14992a43dc06ce29c9f51858abd4a87851ea). DO NOT EDIT.
2
+ // @ts-nocheck
3
+ export const CH_TAB = 9;
4
+ export const CH_NL = 10;
5
+ export const CH_SPACE = 32;
6
+ export const CH_BANG = 33;
7
+ export const CH_DQUOTE = 34;
8
+ export const CH_HASH = 35;
9
+ export const CH_DOLLAR = 36;
10
+ export const CH_PERCENT = 37;
11
+ export const CH_AMP = 38;
12
+ export const CH_SQUOTE = 39;
13
+ export const CH_LPAREN = 40;
14
+ export const CH_RPAREN = 41;
15
+ export const CH_STAR = 42;
16
+ export const CH_PLUS = 43;
17
+ export const CH_COMMA = 44;
18
+ export const CH_DASH = 45;
19
+ export const CH_DOT = 46;
20
+ export const CH_SLASH = 47;
21
+ export const CH_0 = 48;
22
+ export const CH_9 = 57;
23
+ export const CH_COLON = 58;
24
+ export const CH_SEMI = 59;
25
+ export const CH_LT = 60;
26
+ export const CH_EQ = 61;
27
+ export const CH_GT = 62;
28
+ export const CH_QUESTION = 63;
29
+ export const CH_AT = 64;
30
+ export const CH_A = 65;
31
+ export const CH_Z = 90;
32
+ export const CH_LBRACKET = 91;
33
+ export const CH_BACKSLASH = 92;
34
+ export const CH_RBRACKET = 93;
35
+ export const CH_CARET = 94;
36
+ export const CH_UNDERSCORE = 95;
37
+ export const CH_BACKTICK = 96;
38
+ export const CH_a = 97;
39
+ export const CH_z = 122;
40
+ export const CH_LBRACE = 123;
41
+ export const CH_PIPE = 124;
42
+ export const CH_RBRACE = 125;
43
+ export const CH_TILDE = 126;
44
+ export function skipLineContinuations(source, pos, end) {
45
+ while (pos + 1 < end && source.charCodeAt(pos) === CH_BACKSLASH && source.charCodeAt(pos + 1) === CH_NL)
46
+ pos += 2;
47
+ return pos;
48
+ }
@@ -0,0 +1,41 @@
1
+ const isArgument = (item) => item.type === "Word" || item.type === "Assignment";
2
+ export class CommandImpl {
3
+ type = "Command";
4
+ pos;
5
+ end;
6
+ name;
7
+ prefix;
8
+ suffix;
9
+ #args;
10
+ #redirects;
11
+ constructor(pos, end, name, prefix, suffix) {
12
+ this.pos = pos;
13
+ this.end = end;
14
+ this.name = name;
15
+ this.prefix = prefix;
16
+ this.suffix = suffix;
17
+ }
18
+ get args() {
19
+ if (this.#args === undefined) {
20
+ const suffix = this.suffix;
21
+ this.#args = suffix.every(isArgument) ? suffix : suffix.filter(isArgument);
22
+ }
23
+ return this.#args;
24
+ }
25
+ get redirects() {
26
+ if (this.#redirects === undefined) {
27
+ const redirects = [];
28
+ for (const item of this.prefix)
29
+ if (item.type !== "Assignment")
30
+ redirects.push(item);
31
+ for (const item of this.suffix)
32
+ if (!isArgument(item))
33
+ redirects.push(item);
34
+ this.#redirects = redirects;
35
+ }
36
+ return this.#redirects;
37
+ }
38
+ toJSON() {
39
+ return { type: this.type, pos: this.pos, end: this.end, name: this.name, prefix: this.prefix, suffix: this.suffix };
40
+ }
41
+ }
@@ -0,0 +1,80 @@
1
+ // The window is held only until the script resolves; a part constructed without one has no script.
2
+ export class ScriptExpansionImpl {
3
+ static _resolveScript;
4
+ type;
5
+ pos;
6
+ end;
7
+ text;
8
+ #window;
9
+ #script = undefined;
10
+ constructor(type, pos, end, text, window) {
11
+ this.type = type;
12
+ this.pos = pos;
13
+ this.end = end;
14
+ this.text = text;
15
+ this.#window = window;
16
+ }
17
+ get script() {
18
+ const window = this.#window;
19
+ if (window !== undefined) {
20
+ const script = ScriptExpansionImpl._resolveScript(window.source, window.start, window.end, window.depth, window.parenBoundary, window.context);
21
+ if (window.context === undefined)
22
+ script.source = window.source;
23
+ this.script = script;
24
+ }
25
+ return this.#script;
26
+ }
27
+ set script(script) {
28
+ this.#script = script;
29
+ this.#window = undefined;
30
+ }
31
+ toJSON() {
32
+ return { type: this.type, pos: this.pos, end: this.end, text: this.text, script: this.script };
33
+ }
34
+ }
35
+ export class ProcessSubstitutionImpl extends ScriptExpansionImpl {
36
+ operator;
37
+ constructor(pos, end, text, operator, window) {
38
+ super("ProcessSubstitution", pos, end, text, window);
39
+ this.operator = operator;
40
+ }
41
+ toJSON() {
42
+ return {
43
+ type: this.type,
44
+ pos: this.pos,
45
+ end: this.end,
46
+ text: this.text,
47
+ operator: this.operator,
48
+ script: this.script,
49
+ };
50
+ }
51
+ }
52
+ export class ArithmeticExpansionImpl {
53
+ static _resolveExpression;
54
+ type = "ArithmeticExpansion";
55
+ pos;
56
+ end;
57
+ text;
58
+ #window;
59
+ #expression = undefined;
60
+ constructor(pos, end, text, window) {
61
+ this.pos = pos;
62
+ this.end = end;
63
+ this.text = text;
64
+ this.#window = window;
65
+ }
66
+ get expression() {
67
+ const window = this.#window;
68
+ if (window !== undefined) {
69
+ this.expression = ArithmeticExpansionImpl._resolveExpression(window.body, window.offset, window.source, window.depth, window.context, window.depth + 1);
70
+ }
71
+ return this.#expression;
72
+ }
73
+ set expression(expression) {
74
+ this.#expression = expression;
75
+ this.#window = undefined;
76
+ }
77
+ toJSON() {
78
+ return { type: this.type, pos: this.pos, end: this.end, text: this.text, expression: this.expression };
79
+ }
80
+ }
@@ -0,0 +1,268 @@
1
+ import { unescapeBareValue, wordPartsValue } from "./word-value.js";
2
+ import { CH_BACKSLASH, CH_BANG, CH_CARET, CH_COLON, CH_DASH, CH_DOT, CH_EQ, CH_LBRACKET, CH_LPAREN, CH_NL, CH_QUESTION, CH_RBRACKET, CH_STAR, skipLineContinuations, } from "./chars.js";
3
+ export function hasGlobCharacters(text) {
4
+ return /[*?[]/.test(text);
5
+ }
6
+ const bracketSyntax = new Uint8Array(128);
7
+ bracketSyntax[CH_BANG] = 1;
8
+ bracketSyntax[CH_CARET] = 1;
9
+ bracketSyntax[CH_LBRACKET] = 1;
10
+ bracketSyntax[CH_RBRACKET] = 1;
11
+ bracketSyntax[CH_COLON] = 1;
12
+ bracketSyntax[CH_DOT] = 1;
13
+ bracketSyntax[CH_EQ] = 1;
14
+ bracketSyntax[CH_DASH] = 1;
15
+ bracketSyntax[CH_BACKSLASH] = 1;
16
+ // Bracket extents follow Bash's matcher (lib/glob/sm_loop.c, BRACKMATCH and PARSE_SUBBRACKET on
17
+ // the path where no member matches): `[:name:]` and `[=c=]` end at the first `:]` or `=]` unless a
18
+ // raw `]` comes first, `[.sym.]` ends at the first `.]` even past a `]`, a class or equivalence
19
+ // never starts a range, and a `-` range end consumes one member, be it an escape, a plain `[` or a
20
+ // collating symbol (also behind an escaped `[`). Quoted and expanded parts are single opaque
21
+ // members; Bash additionally lets quoted `]`, `:`, `=`, `.` and `[` take part in symbol and range
22
+ // scanning after re-escaping them, which this scan leaves out.
23
+ function bracketEnds(source, start, end, parts, offset) {
24
+ let close = end - 1;
25
+ while (close > start && source.charCodeAt(close) !== CH_RBRACKET)
26
+ close--;
27
+ if (close === start)
28
+ return null;
29
+ // Tokens: each special character, and runs of plain members (continuations vanish, quoted or
30
+ // expanded parts are plain). Only specials change an extent, so a run acts as one member except
31
+ // as a range end, which consumes just its first member.
32
+ const positions = [];
33
+ const kinds = [];
34
+ const members = [];
35
+ let partIndex = 0;
36
+ let symbols = false;
37
+ for (let pos = start; pos < end; pos++) {
38
+ while (parts && partIndex < parts.length && parts[partIndex].end <= pos + offset)
39
+ partIndex++;
40
+ const part = parts?.[partIndex];
41
+ const tokenPos = pos;
42
+ let kind = 0;
43
+ if (part && part.pos <= pos + offset && part.type !== "Literal") {
44
+ pos = part.end - offset - 1;
45
+ }
46
+ else {
47
+ kind = source.charCodeAt(pos);
48
+ if (kind === CH_BACKSLASH && pos + 1 < end && source.charCodeAt(pos + 1) === CH_NL) {
49
+ pos++;
50
+ continue;
51
+ }
52
+ if (kind >= 128 || !bracketSyntax[kind])
53
+ kind = 0;
54
+ }
55
+ const last = kinds.length - 1;
56
+ if (kind === 0 && last >= 0 && kinds[last] === 0) {
57
+ members[last]++;
58
+ continue;
59
+ }
60
+ if (last >= 0 && kinds[last] === CH_LBRACKET && (kind === CH_COLON || kind === CH_EQ || kind === CH_DOT)) {
61
+ symbols = true;
62
+ }
63
+ positions.push(tokenPos);
64
+ kinds.push(kind);
65
+ members.push(1);
66
+ }
67
+ const count = kinds.length;
68
+ // PARSE_SUBBRACKET memoized per opener: symbolEnd[t] is the token after the `X]` closing the
69
+ // symbol that `[X` opens at token t, or -1. One right-to-left pass tracks the nearest raw `]`
70
+ // and the nearest `:]`, `=]` and `.]` beyond the opener. Escaped characters are separate tokens,
71
+ // so a `\]` still stops a `:` or `=` scan as it does in Bash.
72
+ let symbolEnd;
73
+ if (symbols) {
74
+ symbolEnd = new Int32Array(count).fill(-1);
75
+ let close = -1;
76
+ let colon = -1;
77
+ let eq = -1;
78
+ let dot = -1;
79
+ for (let i = count - 1; i >= 0; i--) {
80
+ // The scan for the opener at i starts two tokens in, so fold token i + 2 in first.
81
+ const kind = kinds[i + 2];
82
+ if (kind === CH_RBRACKET)
83
+ close = i + 2;
84
+ else if (kinds[i + 3] === CH_RBRACKET) {
85
+ if (kind === CH_COLON)
86
+ colon = i + 2;
87
+ else if (kind === CH_EQ)
88
+ eq = i + 2;
89
+ else if (kind === CH_DOT)
90
+ dot = i + 2;
91
+ }
92
+ if (kinds[i] !== CH_LBRACKET)
93
+ continue;
94
+ const type = kinds[i + 1];
95
+ const found = type === CH_COLON ? colon : type === CH_EQ ? eq : type === CH_DOT ? dot : -1;
96
+ if (found !== -1 && (type === CH_DOT || close === -1 || close > found))
97
+ symbolEnd[i] = found + 2;
98
+ }
99
+ }
100
+ const subBracket = (open) => (symbolEnd === undefined ? -1 : symbolEnd[open]);
101
+ // endFrom[t]: the token after the `]` closing a bracket whose next member starts at token t, or
102
+ // -1 when the pattern runs out and the opening `[` stays literal.
103
+ const endFrom = new Int32Array(count + 2).fill(-1);
104
+ const resume = (next, range) => {
105
+ if (next >= count)
106
+ return -1;
107
+ if (range && kinds[next] === CH_DASH && next + 1 < count && kinds[next + 1] !== CH_RBRACKET) {
108
+ let last = next + 1;
109
+ if (kinds[last] === CH_BACKSLASH) {
110
+ if (last + 1 >= count)
111
+ return -1;
112
+ last++;
113
+ }
114
+ let after = last + 1;
115
+ if (kinds[last] === CH_LBRACKET && kinds[last + 1] === CH_DOT) {
116
+ const symbol = subBracket(last);
117
+ if (symbol !== -1)
118
+ after = symbol;
119
+ }
120
+ else if (kinds[last] === 0 && members[last] > 1) {
121
+ // The run's later members stay members, and its last one may start the next range.
122
+ return endFrom[last];
123
+ }
124
+ if (after >= count)
125
+ return -1;
126
+ return kinds[after] === CH_RBRACKET ? after + 1 : endFrom[after];
127
+ }
128
+ return kinds[next] === CH_RBRACKET ? next + 1 : endFrom[next];
129
+ };
130
+ for (let t = count - 1; t >= 0; t--) {
131
+ const kind = kinds[t];
132
+ let after = t + 1;
133
+ let range = true;
134
+ if (kind === CH_BACKSLASH) {
135
+ if (t + 1 >= count)
136
+ continue;
137
+ after = t + 2;
138
+ }
139
+ else if (kind === CH_LBRACKET) {
140
+ const type = kinds[t + 1];
141
+ if (type === CH_COLON || type === CH_EQ || type === CH_DOT) {
142
+ const symbol = subBracket(t);
143
+ if (symbol !== -1) {
144
+ after = symbol;
145
+ range = type === CH_DOT;
146
+ }
147
+ }
148
+ }
149
+ endFrom[t] = resume(after, range);
150
+ }
151
+ const ends = new Map();
152
+ for (let t = 0; t < count; t++) {
153
+ if (kinds[t] !== CH_LBRACKET)
154
+ continue;
155
+ let first = t + 1;
156
+ if (kinds[first] === CH_BANG || kinds[first] === CH_CARET)
157
+ first++;
158
+ if (first >= count)
159
+ continue;
160
+ const close = kinds[first] === CH_RBRACKET ? resume(first + 1, true) : endFrom[first];
161
+ if (close !== -1)
162
+ ends.set(positions[t], positions[close - 1] + 1);
163
+ }
164
+ return ends;
165
+ }
166
+ function appendRange(source, start, end, parts, index, offset, result) {
167
+ while (start < end) {
168
+ while (parts && index < parts.length && parts[index].end <= start + offset)
169
+ index++;
170
+ const part = parts?.[index];
171
+ if (part && part.pos === start + offset && part.end <= end + offset) {
172
+ result.push(part);
173
+ start = part.end - offset;
174
+ index++;
175
+ continue;
176
+ }
177
+ const stop = part ? Math.min(end, (part.pos > start + offset ? part.pos : part.end) - offset) : end;
178
+ const text = source.slice(start, stop);
179
+ result.push({ type: "Literal", pos: start + offset, end: stop + offset, text, value: unescapeBareValue(text) });
180
+ start = stop;
181
+ }
182
+ return index;
183
+ }
184
+ export function parseGlobParts(source, start, end, parts, offset = 0) {
185
+ let result;
186
+ let brackets;
187
+ let partIndex = 0;
188
+ let emittedIndex = 0;
189
+ let literalStart = start;
190
+ for (let pos = start; pos < end; pos++) {
191
+ while (parts && partIndex < parts.length && parts[partIndex].end <= pos + offset)
192
+ partIndex++;
193
+ const part = parts?.[partIndex];
194
+ if (part && part.pos <= pos + offset && part.type !== "Literal") {
195
+ pos = part.end - offset - 1;
196
+ continue;
197
+ }
198
+ const character = source.charCodeAt(pos);
199
+ if (character === CH_BACKSLASH) {
200
+ pos++;
201
+ continue;
202
+ }
203
+ let globEnd;
204
+ if (character === CH_STAR || character === CH_QUESTION) {
205
+ const limit = part ? Math.min(end, part.end - offset) : end;
206
+ // Embedded-word scans can leave extglob operators inside Literal parts.
207
+ const next = skipLineContinuations(source, pos + 1, limit);
208
+ if (next < limit && source.charCodeAt(next) === CH_LPAREN)
209
+ continue;
210
+ globEnd = pos + 1;
211
+ if (character === CH_STAR) {
212
+ while (globEnd < limit && source.charCodeAt(globEnd) === CH_STAR) {
213
+ const next = skipLineContinuations(source, globEnd + 1, limit);
214
+ if (next < limit && source.charCodeAt(next) === CH_LPAREN)
215
+ break;
216
+ globEnd++;
217
+ }
218
+ }
219
+ }
220
+ else if (character === CH_LBRACKET) {
221
+ if (brackets === undefined)
222
+ brackets = bracketEnds(source, pos, end, parts, offset);
223
+ const close = brackets?.get(pos);
224
+ if (close === undefined)
225
+ continue;
226
+ globEnd = close;
227
+ }
228
+ else {
229
+ continue;
230
+ }
231
+ if (!result)
232
+ result = [];
233
+ emittedIndex = appendRange(source, literalStart, pos, parts, emittedIndex, offset, result);
234
+ const text = source.slice(pos, globEnd);
235
+ let glob;
236
+ if (character === CH_LBRACKET) {
237
+ const interior = [];
238
+ emittedIndex = appendRange(source, pos + 1, globEnd - 1, parts, emittedIndex, offset, interior);
239
+ glob = {
240
+ type: "Glob",
241
+ kind: "bracket",
242
+ pos: pos + offset,
243
+ end: globEnd + offset,
244
+ text,
245
+ value: "[" + wordPartsValue(interior) + "]",
246
+ parts: interior,
247
+ };
248
+ }
249
+ else {
250
+ glob = {
251
+ type: "Glob",
252
+ kind: character === CH_STAR ? "star" : "question",
253
+ pos: pos + offset,
254
+ end: globEnd + offset,
255
+ text,
256
+ value: text,
257
+ parts: undefined,
258
+ };
259
+ }
260
+ result.push(glob);
261
+ literalStart = globEnd;
262
+ pos = globEnd - 1;
263
+ }
264
+ if (!result)
265
+ return parts ?? undefined;
266
+ appendRange(source, literalStart, end, parts, emittedIndex, offset, result);
267
+ return result;
268
+ }
@@ -0,0 +1,27 @@
1
+ import { computeHereDocBodyParts } from "./parts.js";
2
+ export class HereDocBodyImpl {
3
+ type = "HereDocBody";
4
+ pos;
5
+ end;
6
+ text = "";
7
+ #source;
8
+ #depth;
9
+ #context;
10
+ #parts;
11
+ constructor(source, pos, quoted, depth, context) {
12
+ this.pos = pos;
13
+ this.end = pos;
14
+ this.#source = source;
15
+ this.#depth = depth;
16
+ this.#context = context;
17
+ this.#parts = quoted ? undefined : null;
18
+ }
19
+ get parts() {
20
+ if (this.#parts === null)
21
+ this.#parts = computeHereDocBodyParts(this.#source, this, this.#depth, this.#context);
22
+ return this.#parts;
23
+ }
24
+ toJSON() {
25
+ return { type: this.type, pos: this.pos, end: this.end, text: this.text, parts: this.parts };
26
+ }
27
+ }
@@ -0,0 +1 @@
1
+ export {};