@automaton-labs/aib 0.0.7 → 0.0.9

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 (477) hide show
  1. package/README.md +21 -578
  2. package/config/agent-dx-policy.default.json +31 -0
  3. package/config/control-plane-client.default.json +3 -0
  4. package/dist/agent-dx/agent-dx.js +805 -0
  5. package/dist/agent-dx/presentation.js +32 -0
  6. package/dist/alias-advisor/analyze.js +982 -0
  7. package/dist/alias-advisor/exact-text-cost.js +74 -0
  8. package/dist/alias-advisor/lexical.js +240 -0
  9. package/dist/alias-advisor/model.js +2 -0
  10. package/dist/alias-advisor/path-identity.js +49 -0
  11. package/dist/alias-advisor/ranking.js +171 -0
  12. package/dist/alias-advisor/token-estimator.js +85 -0
  13. package/dist/bin/aib.js +5 -1
  14. package/dist/bin/cli.js +811 -4
  15. package/dist/commands/add-missing-imports-preview-cache.js +99 -2
  16. package/dist/commands/add-missing-imports.js +241 -2
  17. package/dist/commands/apply-module-plan.js +1319 -3
  18. package/dist/commands/background-command.js +378 -2
  19. package/dist/commands/captured-input.js +74 -1
  20. package/dist/commands/config-command.js +314 -2
  21. package/dist/commands/config-output.js +357 -10
  22. package/dist/commands/control-plane-command.js +183 -1
  23. package/dist/commands/declaration-command.js +1209 -7
  24. package/dist/commands/declaration-execution-cache.js +79 -1
  25. package/dist/commands/declaration-format.js +221 -1
  26. package/dist/commands/declaration-preview-cache.js +114 -2
  27. package/dist/commands/diagnostics-command.js +70 -3
  28. package/dist/commands/doctor.js +137 -3
  29. package/dist/commands/execution-command.js +117 -1
  30. package/dist/commands/exports-star-collapse-command.js +178 -0
  31. package/dist/commands/exports-star-command.js +252 -0
  32. package/dist/commands/exports-star-preview-cache.js +84 -0
  33. package/dist/commands/feedback-command.js +176 -3
  34. package/dist/commands/file-move-to-dir-execution-cache.js +92 -1
  35. package/dist/commands/file-move-to-dir-preview-cache.js +125 -2
  36. package/dist/commands/file-move-to-dir-worker.js +54 -0
  37. package/dist/commands/file-move-to-dir.js +1073 -5
  38. package/dist/commands/file-mutation-runtime.js +102 -1
  39. package/dist/commands/file-mutation-worker-apply.js +180 -0
  40. package/dist/commands/file-refactor-batch-execution-cache.js +90 -1
  41. package/dist/commands/file-refactor-batch-preview-cache.js +125 -2
  42. package/dist/commands/file-refactor-batch-worker.js +54 -0
  43. package/dist/commands/file-refactor-batch.js +1154 -5
  44. package/dist/commands/file-rename-execution-cache.js +92 -1
  45. package/dist/commands/file-rename-preview-cache.js +125 -2
  46. package/dist/commands/file-rename-worker.js +54 -0
  47. package/dist/commands/file-rename.js +1053 -5
  48. package/dist/commands/file-text-edit-executor.js +205 -0
  49. package/dist/commands/find-importers.js +52 -1
  50. package/dist/commands/find-unused-imports.js +55 -1
  51. package/dist/commands/generate-docs-command.js +244 -6
  52. package/dist/commands/help-command.js +460 -7
  53. package/dist/commands/import-specifier-policy.js +391 -0
  54. package/dist/commands/imports-command.js +68 -1
  55. package/dist/commands/imports-rebase.js +1138 -0
  56. package/dist/commands/init-skill-usage.js +92 -3
  57. package/dist/commands/init-workspace.js +30 -1
  58. package/dist/commands/inspect-alias-candidates.js +413 -0
  59. package/dist/commands/inspect-cycles.js +811 -5
  60. package/dist/commands/inspect-direct-usages.js +98 -0
  61. package/dist/commands/inspect-duplicates-format.js +229 -0
  62. package/dist/commands/inspect-format-primitives.js +127 -0
  63. package/dist/commands/inspect-format.js +1590 -18
  64. package/dist/commands/inspect-graph.js +1553 -9
  65. package/dist/commands/inspect-imports.js +339 -2
  66. package/dist/commands/inspect-mixed-format.js +524 -0
  67. package/dist/commands/inspect-module-plan-format.js +216 -0
  68. package/dist/commands/inspect-module-plan-serialization.js +402 -0
  69. package/dist/commands/inspect-reference-path-format.js +157 -0
  70. package/dist/commands/inspect-request-values.js +599 -0
  71. package/dist/commands/inspect-selector-kind.js +21 -0
  72. package/dist/commands/inspect-selector.js +50 -0
  73. package/dist/commands/inspect-symbol-format.js +90 -0
  74. package/dist/commands/inspect-topology.js +435 -0
  75. package/dist/commands/inspect-tree.js +827 -5
  76. package/dist/commands/inspect-usages-detail.js +793 -0
  77. package/dist/commands/inspect-usages-evidence.js +31 -0
  78. package/dist/commands/inspect-usages-format.js +367 -0
  79. package/dist/commands/inspect.js +1450 -16
  80. package/dist/commands/internal-command.js +64 -0
  81. package/dist/commands/json-file-input.js +60 -1
  82. package/dist/commands/module-plan-cache.js +156 -2
  83. package/dist/commands/module-plan-standalone.js +208 -0
  84. package/dist/commands/module-plan-timeout.js +77 -1
  85. package/dist/commands/move-preview-cache.js +101 -2
  86. package/dist/commands/mutate-aggregate-output.js +996 -0
  87. package/dist/commands/mutate-child-execution.js +374 -0
  88. package/dist/commands/mutate-command.js +1394 -0
  89. package/dist/commands/mutate-declaration-output.js +313 -0
  90. package/dist/commands/mutate-domain-adapters.js +638 -0
  91. package/dist/commands/mutate-execution-cache.js +114 -0
  92. package/dist/commands/mutate-execution-status.js +598 -0
  93. package/dist/commands/mutate-failure-output.js +531 -0
  94. package/dist/commands/mutate-file-view.js +151 -0
  95. package/dist/commands/mutate-object-output.js +91 -0
  96. package/dist/commands/mutate-output-values.js +97 -0
  97. package/dist/commands/mutate-preview-cache.js +86 -0
  98. package/dist/commands/mutate-response-replay.js +153 -0
  99. package/dist/commands/mutate-result-projection.js +818 -0
  100. package/dist/commands/mutation-eta.js +28 -0
  101. package/dist/commands/mutation-execution-cache.js +140 -3
  102. package/dist/commands/mutation-recovery-journal.js +195 -0
  103. package/dist/commands/normalize-imports.js +1120 -4
  104. package/dist/commands/object-pack-command.js +546 -0
  105. package/dist/commands/object-pack-preview-cache.js +88 -0
  106. package/dist/commands/observability-command.js +47 -3
  107. package/dist/commands/ota-command.js +403 -2
  108. package/dist/commands/print-config.js +10 -1
  109. package/dist/commands/quick-read.js +1113 -11
  110. package/dist/commands/refactor-batch-builder.js +265 -1
  111. package/dist/commands/refactor-batch-execution-cache.js +85 -1
  112. package/dist/commands/refactor-batch-preview-cache.js +96 -2
  113. package/dist/commands/refactor-batch.js +461 -4
  114. package/dist/commands/rename-entities.js +794 -4
  115. package/dist/commands/rename-execution-cache.js +49 -1
  116. package/dist/commands/rename-input.js +22 -1
  117. package/dist/commands/rename-polling-policy.js +68 -0
  118. package/dist/commands/rename-preview-cache.js +96 -2
  119. package/dist/commands/result-view.js +993 -7
  120. package/dist/commands/reveal-command.js +445 -5
  121. package/dist/commands/selector-suggestions.js +93 -0
  122. package/dist/commands/session-workspace.js +1836 -31
  123. package/dist/commands/shared.js +2 -1
  124. package/dist/commands/skills-command.js +315 -0
  125. package/dist/commands/sync-command.js +59 -2
  126. package/dist/commands/worker-command.js +173 -1
  127. package/dist/commands/workspace-cache.js +55 -1
  128. package/dist/config/defaults.js +26 -1
  129. package/dist/config/env-vars.js +77 -1
  130. package/dist/config/glob-match.js +44 -1
  131. package/dist/config/import-rules.js +165 -1
  132. package/dist/config/local-config.js +293 -3
  133. package/dist/config/mutation-comments.js +51 -1
  134. package/dist/config/path-aliases.js +165 -1
  135. package/dist/config/path-display.js +84 -1
  136. package/dist/config/product-storage.js +37 -1
  137. package/dist/config/request-env.js +21 -0
  138. package/dist/config/request-routing-context.js +23 -0
  139. package/dist/config/resolve-command-alias.js +74 -1
  140. package/dist/config/resolve.js +24 -1
  141. package/dist/config/tsconfig-discovery.js +113 -1
  142. package/dist/config/typescript-preferences.js +131 -0
  143. package/dist/config/workspace-root.js +310 -3
  144. package/dist/config/workspace-state.js +254 -1
  145. package/dist/content/content-bundle.js +88 -1
  146. package/dist/diagnostics/module-plan-timeline.js +75 -2
  147. package/dist/diagnostics/readiness-text.js +45 -8
  148. package/dist/dsl/aib-dsl.js +838 -1
  149. package/dist/dsl/declaration-dsl.js +264 -1
  150. package/dist/dsl/file-move-to-dir-dsl.js +123 -1
  151. package/dist/dsl/file-refactor-batch-dsl.js +203 -1
  152. package/dist/dsl/file-rename-dsl.js +135 -1
  153. package/dist/dsl/mutate-dsl.js +746 -0
  154. package/dist/help/bootstrap.bash.md +176 -341
  155. package/dist/help/bootstrap.md +175 -340
  156. package/dist/help/bootstrap.pwsh.md +176 -341
  157. package/dist/help/docs/basics.md +1 -1
  158. package/dist/help/docs/config-setup.import-normalize.md +65 -65
  159. package/dist/help/docs/config-setup.import-rules.md +6 -5
  160. package/dist/help/docs/first-setup.md +6 -5
  161. package/dist/help/docs/help-protocol.md +4 -3
  162. package/dist/help/docs/import.base.md +38 -0
  163. package/dist/help/docs/import.rebase.md +85 -0
  164. package/dist/help/docs/inspect.aliasCandidates.md +39 -0
  165. package/dist/help/docs/inspect.code.md +1 -7
  166. package/dist/help/docs/inspect.file.md +10 -19
  167. package/dist/help/docs/inspect.graph.md +3 -17
  168. package/dist/help/{dsl/docs/inspect.md → docs/inspect.shared.md} +13 -12
  169. package/dist/help/docs/modulePlan.md +24 -28
  170. package/dist/help/docs/move.md +19 -22
  171. package/dist/help/{dsl/topics/file.move.md → docs/moveToDir.md} +36 -34
  172. package/dist/help/docs/mutate.mixed.md +34 -0
  173. package/dist/help/docs/mutation.shared.md +55 -0
  174. package/dist/help/docs/patterns.md +3 -12
  175. package/dist/help/docs/qr.md +12 -6
  176. package/dist/help/docs/quick-map.md +36 -24
  177. package/dist/help/docs/recipe.file-layout.md +10 -10
  178. package/dist/help/docs/recipe.import-boundary.md +92 -0
  179. package/dist/help/docs/recipe.safe-artifact-probing.md +68 -0
  180. package/dist/help/docs/recipe.unfamiliar-area.md +64 -0
  181. package/dist/help/docs/recipes.md +20 -0
  182. package/dist/help/docs/rename.md +19 -27
  183. package/dist/help/docs/renameFile.md +36 -0
  184. package/dist/help/docs/rules.md +26 -0
  185. package/dist/help/dsl/bootstrap.bash.md +176 -341
  186. package/dist/help/dsl/bootstrap.md +175 -340
  187. package/dist/help/dsl/bootstrap.pwsh.md +176 -341
  188. package/dist/help/dsl/docs/basics.md +1 -1
  189. package/dist/help/dsl/docs/config-setup.import-normalize.md +65 -65
  190. package/dist/help/dsl/docs/config-setup.import-rules.md +6 -5
  191. package/dist/help/dsl/docs/first-setup.md +6 -5
  192. package/dist/help/dsl/docs/help-protocol.md +4 -3
  193. package/dist/help/dsl/docs/import.base.md +38 -0
  194. package/dist/help/dsl/docs/import.rebase.md +85 -0
  195. package/dist/help/dsl/docs/inspect.aliasCandidates.md +39 -0
  196. package/dist/help/dsl/docs/inspect.code.md +1 -7
  197. package/dist/help/dsl/docs/inspect.file.md +10 -19
  198. package/dist/help/dsl/docs/inspect.graph.md +3 -17
  199. package/dist/help/{docs/inspect.md → dsl/docs/inspect.shared.md} +13 -12
  200. package/dist/help/dsl/docs/modulePlan.md +24 -28
  201. package/dist/help/dsl/docs/move.md +19 -22
  202. package/dist/help/{topics/file.move.md → dsl/docs/moveToDir.md} +36 -34
  203. package/dist/help/dsl/docs/mutate.mixed.md +34 -0
  204. package/dist/help/dsl/docs/mutation.shared.md +55 -0
  205. package/dist/help/dsl/docs/patterns.md +3 -12
  206. package/dist/help/dsl/docs/qr.md +12 -6
  207. package/dist/help/dsl/docs/quick-map.md +36 -24
  208. package/dist/help/dsl/docs/recipe.file-layout.md +10 -10
  209. package/dist/help/dsl/docs/recipe.import-boundary.md +92 -0
  210. package/dist/help/dsl/docs/recipe.safe-artifact-probing.md +68 -0
  211. package/dist/help/dsl/docs/recipe.unfamiliar-area.md +64 -0
  212. package/dist/help/dsl/docs/recipes.md +20 -0
  213. package/dist/help/dsl/docs/rename.md +19 -27
  214. package/dist/help/dsl/docs/renameFile.md +36 -0
  215. package/dist/help/dsl/docs/rules.md +26 -0
  216. package/dist/help/dsl/full.md +175 -340
  217. package/dist/help/dsl/help-index.md +48 -43
  218. package/dist/help/dsl/snippets/agents.md +2 -2
  219. package/dist/help/dsl/tokens/qr.inline.examples.md +1 -1
  220. package/dist/help/dsl/topics/basics.md +1 -1
  221. package/dist/help/dsl/topics/config-setup.import-normalize.md +65 -65
  222. package/dist/help/dsl/topics/config-setup.import-rules.md +6 -5
  223. package/dist/help/dsl/topics/first-setup.md +6 -5
  224. package/dist/help/dsl/topics/help-protocol.md +4 -3
  225. package/dist/help/dsl/topics/import.base.md +36 -0
  226. package/dist/help/dsl/topics/import.rebase.md +83 -0
  227. package/dist/help/dsl/topics/inspect.aliasCandidates.md +37 -0
  228. package/dist/help/dsl/topics/inspect.code.md +1 -7
  229. package/dist/help/dsl/topics/inspect.file.md +10 -19
  230. package/dist/help/dsl/topics/inspect.graph.md +3 -17
  231. package/dist/help/dsl/topics/{inspect.md → inspect.shared.md} +13 -12
  232. package/dist/help/dsl/topics/modulePlan.md +21 -26
  233. package/dist/help/dsl/topics/move.md +17 -18
  234. package/dist/help/{docs/file.move.md → dsl/topics/moveToDir.md} +33 -35
  235. package/dist/help/dsl/topics/mutate.mixed.md +32 -0
  236. package/dist/help/dsl/topics/mutation.shared.md +53 -0
  237. package/dist/help/dsl/topics/patterns.md +3 -12
  238. package/dist/help/dsl/topics/qr.md +12 -6
  239. package/dist/help/dsl/topics/quick-map.md +36 -24
  240. package/dist/help/dsl/topics/recipe.file-layout.md +10 -10
  241. package/dist/help/dsl/topics/recipe.import-boundary.md +90 -0
  242. package/dist/help/dsl/topics/recipe.safe-artifact-probing.md +66 -0
  243. package/dist/help/dsl/topics/recipe.unfamiliar-area.md +62 -0
  244. package/dist/help/dsl/topics/recipes.md +18 -0
  245. package/dist/help/dsl/topics/rename.md +15 -15
  246. package/dist/help/dsl/topics/renameFile.md +34 -0
  247. package/dist/help/dsl/topics/rules.md +24 -0
  248. package/dist/help/full.md +175 -340
  249. package/dist/help/help-index.md +48 -43
  250. package/dist/help/help-meta.json +98 -48
  251. package/dist/help/index.md +52 -20
  252. package/dist/help/snippets/agents.md +2 -2
  253. package/dist/help/tokens/qr.inline.examples.md +1 -1
  254. package/dist/help/topics/basics.md +1 -1
  255. package/dist/help/topics/config-setup.import-normalize.md +65 -65
  256. package/dist/help/topics/config-setup.import-rules.md +6 -5
  257. package/dist/help/topics/first-setup.md +6 -5
  258. package/dist/help/topics/help-protocol.md +4 -3
  259. package/dist/help/topics/import.base.md +36 -0
  260. package/dist/help/topics/import.rebase.md +83 -0
  261. package/dist/help/topics/inspect.aliasCandidates.md +37 -0
  262. package/dist/help/topics/inspect.code.md +1 -7
  263. package/dist/help/topics/inspect.file.md +10 -19
  264. package/dist/help/topics/inspect.graph.md +3 -17
  265. package/dist/help/topics/{inspect.md → inspect.shared.md} +13 -12
  266. package/dist/help/topics/modulePlan.md +21 -26
  267. package/dist/help/topics/move.md +17 -18
  268. package/dist/help/{dsl/docs/file.move.md → topics/moveToDir.md} +33 -35
  269. package/dist/help/topics/mutate.mixed.md +32 -0
  270. package/dist/help/topics/mutation.shared.md +53 -0
  271. package/dist/help/topics/patterns.md +3 -12
  272. package/dist/help/topics/qr.md +12 -6
  273. package/dist/help/topics/quick-map.md +36 -24
  274. package/dist/help/topics/recipe.file-layout.md +10 -10
  275. package/dist/help/topics/recipe.import-boundary.md +90 -0
  276. package/dist/help/topics/recipe.safe-artifact-probing.md +66 -0
  277. package/dist/help/topics/recipe.unfamiliar-area.md +62 -0
  278. package/dist/help/topics/recipes.md +18 -0
  279. package/dist/help/topics/rename.md +15 -15
  280. package/dist/help/topics/renameFile.md +34 -0
  281. package/dist/help/topics/rules.md +24 -0
  282. package/dist/host/capabilities.js +56 -1
  283. package/dist/imports/standalone-import-analysis.js +602 -0
  284. package/dist/imports/standalone-import-model.js +2 -0
  285. package/dist/imports/standalone-import-process.js +66 -0
  286. package/dist/imports/standalone-import-worker.js +27 -0
  287. package/dist/imports/standalone-ts-project.js +147 -0
  288. package/dist/inspect/inspect-duplicates-service.js +526 -0
  289. package/dist/inspect/inspect-reverse-module-closure.js +338 -0
  290. package/dist/inspect/inspect-source-ranges.js +82 -0
  291. package/dist/inspect/inspect-source-shape.js +649 -0
  292. package/dist/inspect/standalone-inspect-analysis.js +319 -0
  293. package/dist/inspect/standalone-inspect-model.js +9 -0
  294. package/dist/inspect/standalone-inspect-process.js +55 -0
  295. package/dist/inspect/standalone-inspect-usages.js +274 -0
  296. package/dist/inspect/standalone-inspect-worker.js +13 -0
  297. package/dist/metrics/central-metrics.js +101 -2
  298. package/dist/mutation/concrete-edit-plan.js +157 -0
  299. package/dist/mutation/exports-star-collapse-preview.js +361 -0
  300. package/dist/mutation/exports-star-expand-apply.js +373 -0
  301. package/dist/mutation/exports-star-expand-preview.js +807 -0
  302. package/dist/mutation/file-impact-scan.js +182 -0
  303. package/dist/mutation/file-mutation-discovery.js +674 -0
  304. package/dist/mutation/file-mutation-eta.js +99 -0
  305. package/dist/mutation/file-mutation-standalone-apply.js +584 -0
  306. package/dist/mutation/file-mutation-standalone-planner.js +500 -0
  307. package/dist/mutation/file-mutation-tsserver-session.js +473 -0
  308. package/dist/mutation/mutation-estimate.js +45 -0
  309. package/dist/mutation/mutation-plan.js +467 -0
  310. package/dist/mutation/object-mutation-foundation.js +2 -0
  311. package/dist/mutation/object-mutation-partition.js +148 -0
  312. package/dist/mutation/object-pack-semantic-apply.js +507 -0
  313. package/dist/mutation/object-pack-semantic-preview.js +984 -0
  314. package/dist/mutation/object-unpack-semantic-preview.js +993 -0
  315. package/dist/mutation/package-manifest-impact.js +176 -0
  316. package/dist/mutation/rename-owner-worker-child.js +37 -0
  317. package/dist/mutation/rename-owner-worker.js +122 -0
  318. package/dist/mutation/runtime-cycle-query.js +66 -0
  319. package/dist/mutation/semantic-execution-progress.js +63 -0
  320. package/dist/mutation/semantic-export-index.js +474 -0
  321. package/dist/mutation/semantic-impact-scan.js +434 -0
  322. package/dist/mutation/semantic-model.js +2 -0
  323. package/dist/mutation/semantic-move-best-effort-planner.js +209 -0
  324. package/dist/mutation/semantic-move-config-worker-child.js +61 -0
  325. package/dist/mutation/semantic-move-config-worker.js +449 -0
  326. package/dist/mutation/semantic-move-declarations.js +94 -0
  327. package/dist/mutation/semantic-move-metrics.js +119 -0
  328. package/dist/mutation/semantic-move-model.js +2 -0
  329. package/dist/mutation/semantic-move-owner-authority.js +122 -0
  330. package/dist/mutation/semantic-move-owner-candidates.js +300 -0
  331. package/dist/mutation/semantic-move-owner-divergence-harness.js +474 -0
  332. package/dist/mutation/semantic-move-owner-divergence-runner.js +162 -0
  333. package/dist/mutation/semantic-move-plan-hash.js +56 -0
  334. package/dist/mutation/semantic-move-policy.js +360 -0
  335. package/dist/mutation/semantic-move-process.js +218 -0
  336. package/dist/mutation/semantic-move-provider-diagnostics.js +27 -0
  337. package/dist/mutation/semantic-move-standalone-engine.js +919 -0
  338. package/dist/mutation/semantic-move-standalone-planner.js +1553 -0
  339. package/dist/mutation/semantic-move-transaction.js +639 -0
  340. package/dist/mutation/semantic-mutation-engine.js +478 -0
  341. package/dist/mutation/semantic-mutation-runtime.js +521 -0
  342. package/dist/mutation/semantic-planner-retry.js +26 -0
  343. package/dist/mutation/semantic-program-roots.js +69 -0
  344. package/dist/mutation/semantic-rename-commonjs.js +229 -0
  345. package/dist/mutation/semantic-rename-config-worker-child.js +46 -0
  346. package/dist/mutation/semantic-rename-config-worker.js +498 -0
  347. package/dist/mutation/semantic-rename-locations.js +192 -0
  348. package/dist/mutation/semantic-rename-model.js +2 -0
  349. package/dist/mutation/semantic-rename-process.js +217 -0
  350. package/dist/mutation/semantic-rename-standalone-engine.js +302 -0
  351. package/dist/mutation/semantic-rename-standalone-planner.js +567 -0
  352. package/dist/mutation/semantic-rename-transaction.js +333 -0
  353. package/dist/mutation/semantic-unused-import-cleanup.js +248 -0
  354. package/dist/mutation/semantic-worker-retry.js +40 -0
  355. package/dist/mutation/semantic-workspace.js +804 -0
  356. package/dist/mutation/targeted-import-canonicalizer.js +359 -0
  357. package/dist/observability/config.js +206 -1
  358. package/dist/observability/context.js +59 -1
  359. package/dist/observability/failure-snapshot.js +124 -2
  360. package/dist/observability/recent.js +63 -2
  361. package/dist/payloads/read-stdin-json.js +212 -1
  362. package/dist/rg-wrapper/core.js +714 -6
  363. package/dist/rg-wrapper/options.js +125 -1
  364. package/dist/rtk-wrapper/core.js +144 -2
  365. package/dist/rtk-wrapper/git-safety.js +203 -0
  366. package/dist/rtk-wrapper/output-adapter.js +106 -0
  367. package/dist/runtime/buffered-process.js +114 -0
  368. package/dist/runtime/bundled-node.js +97 -1
  369. package/dist/runtime/command-lifecycle.js +2 -0
  370. package/dist/runtime/input-source.js +238 -1
  371. package/dist/runtime/node-cli-identity.js +37 -0
  372. package/dist/runtime/run-command.js +191 -1
  373. package/dist/selectors/parse-entities.js +84 -1
  374. package/dist/semantic/semantic-context-pool.js +830 -0
  375. package/dist/semantic/semantic-context-provider.js +416 -0
  376. package/dist/semantic/semantic-resident-admission.js +38 -0
  377. package/dist/semantic/semantic-worker-child.js +40 -0
  378. package/dist/semantic/semantic-worker-manager.js +460 -0
  379. package/dist/semantic/semantic-worker-protocol.js +2 -0
  380. package/dist/semantic/semantic-worker-runtime.js +38 -0
  381. package/dist/semantic/workspace-semantic-context-pools.js +136 -0
  382. package/dist/session/client.js +359 -1
  383. package/dist/session/daemon-state.js +185 -2
  384. package/dist/session/external-tool-coordinator.js +88 -0
  385. package/dist/session/external-tool-request.js +52 -0
  386. package/dist/session/lane-owner.js +116 -0
  387. package/dist/session/paths.js +71 -1
  388. package/dist/session/runtime-lifecycle.js +225 -0
  389. package/dist/session/runtime-shutdown.js +95 -0
  390. package/dist/session/server.js +1194 -7
  391. package/dist/session/session-health.js +27 -0
  392. package/dist/shared/agent-text.js +29 -1
  393. package/dist/shared/errors.js +496 -30
  394. package/dist/shared/event-loop.js +6 -1
  395. package/dist/shared/hints.js +37 -1
  396. package/dist/shared/metrics.js +43 -1
  397. package/dist/shared/presentation.js +69 -4
  398. package/dist/shared/stdin-examples.js +77 -1
  399. package/dist/shared/stdout.js +6 -2
  400. package/dist/shared/types.js +23 -1
  401. package/dist/tool-runtime/runtime-tools.js +120 -1
  402. package/dist/topology/availability.js +663 -0
  403. package/dist/topology/cache.js +130 -0
  404. package/dist/topology/candidates.js +372 -0
  405. package/dist/topology/core.js +903 -0
  406. package/dist/topology/dependency-snapshot.js +189 -0
  407. package/dist/topology/model.js +2 -0
  408. package/dist/topology/scope.js +100 -0
  409. package/dist/topology/ts-oracle-batch.js +529 -0
  410. package/dist/topology/ts-oracle-host.js +69 -0
  411. package/dist/topology/ts-oracle-model.js +2 -0
  412. package/dist/topology/ts-oracle.js +224 -0
  413. package/dist/topology/tsconfig-loader.js +105 -0
  414. package/dist/topology/workspace-project-index.js +542 -0
  415. package/dist/tracing/config.js +192 -2
  416. package/dist/tracing/failure-summary.js +100 -0
  417. package/dist/tracing/trace.js +318 -5
  418. package/dist/tsc-wrapper/core.js +697 -0
  419. package/dist/workers/control-plane/aib-control-plane-worker.cjs +32 -32
  420. package/dist/workers/control-plane/client-config.default.json +3 -3
  421. package/dist/workers/lexical-worker-child.js +27 -0
  422. package/dist/workers/lexical-worker-manager.js +394 -0
  423. package/dist/workers/lexical-worker-protocol.js +2 -0
  424. package/dist/workers/lexical-worker-runtime.js +25 -0
  425. package/dist/workers/owned-one-shot-process.js +115 -0
  426. package/dist/workers/product-storage.js +23 -1
  427. package/dist/workers/registry.js +241 -1
  428. package/package.json +8 -13
  429. package/scripts/postinstall.cjs +29 -29
  430. package/scripts/provision-runtime.cjs +411 -459
  431. package/dist/client/http-client.js +0 -1
  432. package/dist/client/transport-options.js +0 -1
  433. package/dist/client/websocket-client.js +0 -1
  434. package/dist/commands/entity-resolution.js +0 -1
  435. package/dist/commands/file-command.js +0 -1
  436. package/dist/commands/host-command.js +0 -1
  437. package/dist/commands/inspect-symbol-query.js +0 -1
  438. package/dist/commands/list-instances.js +0 -1
  439. package/dist/commands/module-plan-command.js +0 -1
  440. package/dist/commands/move-command.js +0 -1
  441. package/dist/commands/move-to-file.js +0 -2
  442. package/dist/commands/ping.js +0 -1
  443. package/dist/commands/refactor-command.js +0 -1
  444. package/dist/commands/rename-command.js +0 -1
  445. package/dist/commands/runtime-command.js +0 -4
  446. package/dist/commands/runtime-info.js +0 -1
  447. package/dist/commands/validate-module-plan.js +0 -2
  448. package/dist/compatibility/policy.js +0 -1
  449. package/dist/config/auto-start-ide.js +0 -1
  450. package/dist/discovery/registry.js +0 -1
  451. package/dist/discovery/select-instance.js +0 -1
  452. package/dist/help/docs/file.rename.md +0 -35
  453. package/dist/help/docs/mutation.md +0 -60
  454. package/dist/help/docs/refactor.batch.md +0 -44
  455. package/dist/help/dsl/docs/file.rename.md +0 -35
  456. package/dist/help/dsl/docs/mutation.md +0 -60
  457. package/dist/help/dsl/docs/refactor.batch.md +0 -44
  458. package/dist/help/dsl/topics/file.rename.md +0 -33
  459. package/dist/help/dsl/topics/mutation.md +0 -58
  460. package/dist/help/dsl/topics/refactor.batch.md +0 -33
  461. package/dist/help/topics/file.rename.md +0 -33
  462. package/dist/help/topics/mutation.md +0 -58
  463. package/dist/help/topics/refactor.batch.md +0 -33
  464. package/dist/ide-launch/common.cjs +0 -162
  465. package/dist/managed-host/extension-vsix-resolver.js +0 -1
  466. package/dist/managed-host/manage-serve-web-host.cjs +0 -141
  467. package/dist/managed-host/serve-web-autostart.js +0 -1
  468. package/dist/managed-host/serve-web-host.cjs +0 -2115
  469. package/dist/runtime/managed-runtime-provisioning.js +0 -1
  470. package/dist/shared/diagnostic-catalog.js +0 -1
  471. package/dist/shared/diagnostics.js +0 -1
  472. package/dist/shared/operations.js +0 -1
  473. package/dist/shared/protocol.js +0 -1
  474. package/dist/shared/routes.js +0 -1
  475. package/extension/vscode-refactor-bridge-extension.vsix +0 -0
  476. package/runtimes/launcher/linux-x64/aib +0 -0
  477. package/runtimes/launcher/win-x64/aib.exe +0 -0
@@ -0,0 +1,903 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.buildProjectTopologySnapshot = buildProjectTopologySnapshot;
40
+ exports.describeTopologyFile = describeTopologyFile;
41
+ exports.resolveTopologyReachability = resolveTopologyReachability;
42
+ exports.buildBoundaryRelations = buildBoundaryRelations;
43
+ const fs = __importStar(require("node:fs"));
44
+ const path = __importStar(require("node:path"));
45
+ const typescript_1 = __importDefault(require("typescript"));
46
+ const tsconfig_discovery_1 = require("../config/tsconfig-discovery");
47
+ const errors_1 = require("../shared/errors");
48
+ const dependency_snapshot_1 = require("./dependency-snapshot");
49
+ const scope_1 = require("./scope");
50
+ const SOURCE_EXTENSIONS = [".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"];
51
+ const EXCLUDED_DIRS = new Set(["node_modules", ".git", ".tmp", ".next", "dist", "out", "coverage"]);
52
+ function buildProjectTopologySnapshot(root, options = {}) {
53
+ const startedAt = Date.now();
54
+ const workspaceRoot = path.resolve(root);
55
+ const diagnostics = [];
56
+ const scope = (0, scope_1.createTopologyScope)(workspaceRoot, options.scope);
57
+ const tsconfigStartedAt = Date.now();
58
+ const tsconfigResult = readTsConfigSnapshots(workspaceRoot, diagnostics, scope);
59
+ const tsconfigs = tsconfigResult.configs;
60
+ const tsconfigMs = Date.now() - tsconfigStartedAt;
61
+ const packageStartedAt = Date.now();
62
+ const packages = readPackageSnapshots(workspaceRoot, diagnostics, scope);
63
+ const packageMs = Date.now() - packageStartedAt;
64
+ const dependencyStartedAt = Date.now();
65
+ const dependencySnapshot = (0, dependency_snapshot_1.buildTopologyDependencySnapshot)(workspaceRoot, packages);
66
+ const dependencyMs = Date.now() - dependencyStartedAt;
67
+ const totalMs = Date.now() - startedAt;
68
+ return {
69
+ operation: "inspect.topology",
70
+ version: 1,
71
+ root: workspaceRoot,
72
+ mode: "lazy",
73
+ builtAt: new Date().toISOString(),
74
+ buildMs: totalMs,
75
+ timings: {
76
+ scopeMs: scope.timings.totalMs,
77
+ tsconfigDiscoveryMs: tsconfigResult.discoveryMs,
78
+ tsconfigMs,
79
+ packageMs,
80
+ dependencyMs,
81
+ totalMs
82
+ },
83
+ scope: {
84
+ mode: scope.mode,
85
+ defaultExcludes: scope.defaultExcludes,
86
+ configExcludes: scope.configExcludes
87
+ },
88
+ dependencySnapshot,
89
+ tsconfigs,
90
+ packages,
91
+ diagnostics
92
+ };
93
+ }
94
+ function describeTopologyFile(snapshot, filePath) {
95
+ return describeFileOwnership(snapshot, resolveInsideRoot(snapshot.root, filePath));
96
+ }
97
+ function resolveTopologyReachability(snapshot, fromFile, toFile) {
98
+ const from = resolveInsideRoot(snapshot.root, fromFile);
99
+ const to = resolveInsideRoot(snapshot.root, toFile);
100
+ const diagnostics = [];
101
+ if (!fs.existsSync(from)) {
102
+ diagnostics.push({ code: "TOPOLOGY_FROM_NOT_FOUND", message: "Importer file does not exist.", file: toDisplayPath(snapshot.root, from) });
103
+ }
104
+ if (!fs.existsSync(to)) {
105
+ diagnostics.push({ code: "TOPOLOGY_TO_NOT_FOUND", message: "Target file does not exist.", file: toDisplayPath(snapshot.root, to) });
106
+ }
107
+ const owner = {
108
+ from: describeFileOwnership(snapshot, from),
109
+ to: describeFileOwnership(snapshot, to)
110
+ };
111
+ const candidates = buildImportSpecifierCandidates(snapshot, from, to, owner);
112
+ return {
113
+ from: toDisplayPath(snapshot.root, from),
114
+ to: toDisplayPath(snapshot.root, to),
115
+ reachable: candidates.some((candidate) => candidate.valid),
116
+ owner,
117
+ candidates,
118
+ diagnostics: [...diagnostics, ...owner.from.diagnostics, ...owner.to.diagnostics]
119
+ };
120
+ }
121
+ function buildBoundaryRelations(snapshot, boundaryPath) {
122
+ const target = resolveInsideRoot(snapshot.root, boundaryPath);
123
+ const targetPackage = findOwningPackage(snapshot, target);
124
+ const targetRoot = targetPackage?.root ?? target;
125
+ const diagnostics = [];
126
+ if (!targetPackage) {
127
+ diagnostics.push({
128
+ code: "TOPOLOGY_BOUNDARY_PACKAGE_NOT_FOUND",
129
+ message: "Boundary path is not inside a discovered package.",
130
+ file: toDisplayPath(snapshot.root, target)
131
+ });
132
+ }
133
+ const canImport = [];
134
+ const canBeImportedBy = [];
135
+ for (const pkg of snapshot.packages) {
136
+ if (pkg.root === targetRoot) {
137
+ continue;
138
+ }
139
+ canImport.push(packageRelation(snapshot.root, targetPackage ?? undefined, pkg));
140
+ canBeImportedBy.push(packageRelation(snapshot.root, pkg, targetPackage ?? undefined));
141
+ }
142
+ return {
143
+ boundary: toDisplayPath(snapshot.root, targetRoot),
144
+ ...(targetPackage?.root ? { packageRoot: toDisplayPath(snapshot.root, targetPackage.root) } : {}),
145
+ ...(targetPackage?.name ? { packageName: targetPackage.name } : {}),
146
+ canImport: canImport.sort(compareBoundaryRelations),
147
+ canBeImportedBy: canBeImportedBy.sort(compareBoundaryRelations),
148
+ diagnostics
149
+ };
150
+ }
151
+ function readTsConfigSnapshots(root, diagnostics, scope) {
152
+ const discovery = (0, tsconfig_discovery_1.discoverTsconfigFiles)(root, {
153
+ includeDefaultExcluded: true,
154
+ includeConfigExcluded: true
155
+ });
156
+ const cache = new Map();
157
+ const configs = discovery.visible
158
+ .filter((file) => scope.isPathInScope(file))
159
+ .map((file) => readEffectiveTsConfig(file, cache, diagnostics))
160
+ .filter((config) => config !== null)
161
+ .map((config) => ({
162
+ file: toDisplayPath(root, config.file),
163
+ baseUrl: toDisplayPath(root, config.baseUrl),
164
+ paths: config.paths.map((mapping) => ({
165
+ ...mapping,
166
+ baseUrl: toDisplayPath(root, mapping.baseUrl)
167
+ })),
168
+ ...(config.extends ? { extends: toDisplayPath(root, config.extends) } : {}),
169
+ ...(config.files ? { files: config.files } : {}),
170
+ ...(config.include ? { include: config.include } : {}),
171
+ ...(config.exclude ? { exclude: config.exclude } : {}),
172
+ ...(config.references ? { references: config.references.map((reference) => toDisplayPath(root, reference)) } : {}),
173
+ ...(typeof config.composite === "boolean" ? { composite: config.composite } : {}),
174
+ ...(config.module ? { module: config.module } : {}),
175
+ ...(config.moduleResolution ? { moduleResolution: config.moduleResolution } : {}),
176
+ ...(config.customConditions ? { customConditions: config.customConditions } : {}),
177
+ ...(config.rootDir ? { rootDir: toDisplayPath(root, config.rootDir) } : {}),
178
+ ...(config.rootDirs ? { rootDirs: config.rootDirs.map((entry) => toDisplayPath(root, entry)) } : {})
179
+ }))
180
+ .sort((left, right) => left.file.localeCompare(right.file));
181
+ return { configs, discoveryMs: discovery.durationMs };
182
+ }
183
+ function readPackageSnapshots(root, diagnostics, scope) {
184
+ const packages = [];
185
+ const workspaceFilter = readWorkspacePackageFilter(root, diagnostics);
186
+ for (const packageJson of walkPackageJson(root)) {
187
+ if (!scope.isPathInScope(packageJson)) {
188
+ continue;
189
+ }
190
+ if (workspaceFilter && !workspaceFilter(packageJson)) {
191
+ continue;
192
+ }
193
+ try {
194
+ const raw = parseJsoncObject(fs.readFileSync(packageJson, "utf8"));
195
+ const dependencies = dependencyNames(raw);
196
+ const name = typeof raw.name === "string" && raw.name.trim() !== "" ? raw.name.trim() : undefined;
197
+ const exportsValue = normalizePackageMapValue(raw.exports);
198
+ const importsValue = normalizePackageMapValue(raw.imports);
199
+ packages.push({
200
+ root: path.dirname(packageJson),
201
+ packageJson,
202
+ ...(name ? { name } : {}),
203
+ ...(typeof raw.main === "string" ? { main: raw.main } : {}),
204
+ ...(typeof raw.module === "string" ? { module: raw.module } : {}),
205
+ ...(typeof raw.types === "string" ? { types: raw.types } : {}),
206
+ ...(typeof raw.typings === "string" ? { typings: raw.typings } : {}),
207
+ dependencies,
208
+ ...(exportsValue ? { exports: exportsValue } : {}),
209
+ ...(importsValue ? { imports: importsValue } : {}),
210
+ ...(typeof raw.private === "boolean" ? { private: raw.private } : {})
211
+ });
212
+ }
213
+ catch (error) {
214
+ diagnostics.push({
215
+ code: "TOPOLOGY_PACKAGE_JSON_UNREADABLE",
216
+ message: error instanceof Error ? error.message : "Could not read package.json.",
217
+ file: toDisplayPath(root, packageJson)
218
+ });
219
+ }
220
+ }
221
+ return packages.sort((left, right) => toDisplayPath(root, left.root).localeCompare(toDisplayPath(root, right.root)));
222
+ }
223
+ function buildImportSpecifierCandidates(snapshot, fromFile, toFile, owner) {
224
+ const candidates = [];
225
+ const fromPackageRoot = owner.from.packageRoot;
226
+ const toPackageRoot = owner.to.packageRoot;
227
+ const samePackage = Boolean(fromPackageRoot && toPackageRoot && fromPackageRoot === toPackageRoot);
228
+ candidates.push({
229
+ specifier: relativeSpecifier(fromFile, toFile),
230
+ kind: "relative",
231
+ valid: fs.existsSync(toFile),
232
+ reason: samePackage ? "relative path inside same package" : "relative path can reach target; cross-package relative is discouraged",
233
+ policy: samePackage ? "allowed" : "discouraged"
234
+ });
235
+ const fromTsConfig = owner.from.tsconfig
236
+ ? snapshot.tsconfigs.find((config) => config.file === owner.from.tsconfig)
237
+ : undefined;
238
+ if (fromTsConfig) {
239
+ for (const candidate of aliasCandidates(snapshot.root, fromTsConfig, toFile)) {
240
+ candidates.push(candidate);
241
+ }
242
+ }
243
+ const targetPackage = owner.to.packageRoot
244
+ ? snapshot.packages.find((pkg) => toDisplayPath(snapshot.root, pkg.root) === owner.to.packageRoot)
245
+ : undefined;
246
+ const fromPackage = owner.from.packageRoot
247
+ ? snapshot.packages.find((pkg) => toDisplayPath(snapshot.root, pkg.root) === owner.from.packageRoot)
248
+ : undefined;
249
+ if (targetPackage?.name) {
250
+ const dependencyAllowsPackage = fromPackage?.root === targetPackage.root ||
251
+ Boolean(fromPackage?.dependencies.includes(targetPackage.name));
252
+ const subpath = packageSubpath(targetPackage.root, toFile);
253
+ const exportAllowsSubpath = subpath === "" || packageExportsSubpath(targetPackage, subpath);
254
+ const valid = Boolean(dependencyAllowsPackage && exportAllowsSubpath);
255
+ candidates.push({
256
+ specifier: subpath ? `${targetPackage.name}/${subpath}` : targetPackage.name,
257
+ kind: "package",
258
+ valid,
259
+ packageName: targetPackage.name,
260
+ reason: !dependencyAllowsPackage
261
+ ? "importing package does not declare target package dependency"
262
+ : exportAllowsSubpath
263
+ ? "package dependency/self import is present and subpath is public"
264
+ : "package dependency exists, but target subpath is not proven public by package exports"
265
+ });
266
+ }
267
+ if (fromPackage?.root === targetPackage?.root && fromPackage?.imports) {
268
+ const importCandidate = packageImportCandidate(fromPackage, toFile);
269
+ if (importCandidate) {
270
+ candidates.push(importCandidate);
271
+ }
272
+ }
273
+ return uniqueCandidates(candidates);
274
+ }
275
+ function aliasCandidates(root, config, toFile) {
276
+ const targetNoExt = withoutSourceExtension(toFile);
277
+ const candidates = [];
278
+ for (const mapping of config.paths) {
279
+ for (const rawTarget of mapping.targets) {
280
+ const specifier = aliasCandidate(targetNoExt, {
281
+ ...mapping,
282
+ baseUrl: path.resolve(root, mapping.baseUrl)
283
+ }, rawTarget);
284
+ if (specifier) {
285
+ candidates.push({
286
+ specifier,
287
+ kind: "tsconfig-path",
288
+ valid: true,
289
+ reason: `matched tsconfig paths pattern ${mapping.pattern}`,
290
+ tsconfig: config.file
291
+ });
292
+ }
293
+ }
294
+ }
295
+ return candidates.sort((left, right) => left.specifier.length - right.specifier.length || left.specifier.localeCompare(right.specifier));
296
+ }
297
+ function describeFileOwnership(snapshot, file) {
298
+ const tsconfig = findOwningTsConfig(snapshot, file);
299
+ const pkg = findOwningPackage(snapshot, file);
300
+ const diagnostics = [];
301
+ if (!tsconfig) {
302
+ diagnostics.push({
303
+ code: "TOPOLOGY_TSCONFIG_NOT_FOUND",
304
+ message: "No discovered tsconfig owns this file.",
305
+ file: toDisplayPath(snapshot.root, file)
306
+ });
307
+ }
308
+ if (!pkg) {
309
+ diagnostics.push({
310
+ code: "TOPOLOGY_PACKAGE_NOT_FOUND",
311
+ message: "No discovered package.json owns this file.",
312
+ file: toDisplayPath(snapshot.root, file)
313
+ });
314
+ }
315
+ return {
316
+ file: toDisplayPath(snapshot.root, file),
317
+ ...(tsconfig ? { tsconfig: tsconfig.file } : {}),
318
+ ...(pkg ? { packageRoot: toDisplayPath(snapshot.root, pkg.root) } : {}),
319
+ ...(pkg?.name ? { packageName: pkg.name } : {}),
320
+ diagnostics
321
+ };
322
+ }
323
+ function findOwningTsConfig(snapshot, file) {
324
+ const absolute = path.resolve(file);
325
+ return snapshot.tsconfigs
326
+ .map((config) => ({ config, dir: path.dirname(path.resolve(snapshot.root, config.file)) }))
327
+ .filter((item) => isPathInsideOrEqual(absolute, item.dir) && fileMatchesTsConfig(snapshot.root, absolute, item.config))
328
+ .sort((left, right) => right.dir.length - left.dir.length ||
329
+ tsconfigOwnerRank(left.config.file) - tsconfigOwnerRank(right.config.file) ||
330
+ left.config.file.localeCompare(right.config.file))[0]?.config ?? null;
331
+ }
332
+ function findOwningPackage(snapshot, file) {
333
+ const absolute = path.resolve(file);
334
+ return snapshot.packages
335
+ .filter((pkg) => isPathInsideOrEqual(absolute, pkg.root))
336
+ .sort((left, right) => right.root.length - left.root.length)[0] ?? null;
337
+ }
338
+ function readEffectiveTsConfig(configPath, cache, diagnostics) {
339
+ const normalized = path.resolve(configPath);
340
+ if (cache.has(normalized)) {
341
+ return cache.get(normalized) ?? null;
342
+ }
343
+ cache.set(normalized, null);
344
+ const raw = readRawTsConfig(normalized, diagnostics);
345
+ if (!raw) {
346
+ return null;
347
+ }
348
+ const parentPath = raw.extends ? resolveExtendsTsConfig(normalized, raw.extends) : null;
349
+ const parent = parentPath ? readEffectiveTsConfig(parentPath, cache, diagnostics) : null;
350
+ const configDir = path.dirname(normalized);
351
+ const baseUrl = raw.compilerOptions?.baseUrl
352
+ ? path.resolve(configDir, raw.compilerOptions.baseUrl)
353
+ : parent?.baseUrl ?? configDir;
354
+ const localPaths = raw.compilerOptions?.paths;
355
+ const paths = localPaths
356
+ ? Object.entries(localPaths)
357
+ .flatMap(([pattern, targets]) => createPathMappings(pattern, targets, baseUrl))
358
+ .sort(compareMappings)
359
+ : parent?.paths ?? [];
360
+ const result = {
361
+ file: normalized,
362
+ baseUrl,
363
+ paths,
364
+ ...(raw.files ? { files: raw.files } : {}),
365
+ ...(raw.include ? { include: raw.include } : {}),
366
+ ...(raw.exclude ? { exclude: raw.exclude } : {}),
367
+ ...(raw.references ? { references: raw.references.map((reference) => path.resolve(configDir, reference)) } : {}),
368
+ ...(typeof raw.compilerOptions?.composite === "boolean" ? { composite: raw.compilerOptions.composite } : typeof parent?.composite === "boolean" ? { composite: parent.composite } : {}),
369
+ ...(raw.compilerOptions?.module ? { module: raw.compilerOptions.module } : parent?.module ? { module: parent.module } : {}),
370
+ ...(raw.compilerOptions?.moduleResolution ? { moduleResolution: raw.compilerOptions.moduleResolution } : parent?.moduleResolution ? { moduleResolution: parent.moduleResolution } : {}),
371
+ ...(raw.compilerOptions?.customConditions ? { customConditions: raw.compilerOptions.customConditions } : parent?.customConditions ? { customConditions: parent.customConditions } : {}),
372
+ ...(raw.compilerOptions?.rootDir ? { rootDir: path.resolve(configDir, raw.compilerOptions.rootDir) } : parent?.rootDir ? { rootDir: parent.rootDir } : {}),
373
+ ...(raw.compilerOptions?.rootDirs ? { rootDirs: raw.compilerOptions.rootDirs.map((entry) => path.resolve(configDir, entry)) } : parent?.rootDirs ? { rootDirs: parent.rootDirs } : {}),
374
+ ...(parentPath ? { extends: parentPath } : {})
375
+ };
376
+ cache.set(normalized, result);
377
+ return result;
378
+ }
379
+ function readRawTsConfig(file, diagnostics) {
380
+ try {
381
+ const parsed = typescript_1.default.parseConfigFileTextToJson(file, fs.readFileSync(file, "utf8"));
382
+ if (parsed.error) {
383
+ diagnostics.push({
384
+ code: "TOPOLOGY_TSCONFIG_PARSE_FAILED",
385
+ message: typescript_1.default.flattenDiagnosticMessageText(parsed.error.messageText, "\n"),
386
+ file
387
+ });
388
+ return null;
389
+ }
390
+ const raw = isRecord(parsed.config) ? parsed.config : {};
391
+ const compilerOptions = isRecord(raw.compilerOptions) ? raw.compilerOptions : {};
392
+ const paths = isRecord(compilerOptions.paths) ? readPathsObject(compilerOptions.paths) : undefined;
393
+ return {
394
+ file,
395
+ ...(typeof raw.extends === "string" ? { extends: raw.extends } : {}),
396
+ ...(Array.isArray(raw.files) ? { files: readStringArray(raw.files) } : {}),
397
+ ...(Array.isArray(raw.include) ? { include: readStringArray(raw.include) } : {}),
398
+ ...(Array.isArray(raw.exclude) ? { exclude: readStringArray(raw.exclude) } : {}),
399
+ ...(Array.isArray(raw.references) ? { references: readTsConfigReferencePaths(raw.references) } : {}),
400
+ compilerOptions: {
401
+ ...(typeof compilerOptions.baseUrl === "string" ? { baseUrl: compilerOptions.baseUrl } : {}),
402
+ ...(paths ? { paths } : {}),
403
+ ...(typeof compilerOptions.composite === "boolean" ? { composite: compilerOptions.composite } : {}),
404
+ ...(typeof compilerOptions.module === "string" ? { module: compilerOptions.module } : {}),
405
+ ...(typeof compilerOptions.moduleResolution === "string" ? { moduleResolution: compilerOptions.moduleResolution } : {}),
406
+ ...(Array.isArray(compilerOptions.customConditions) ? { customConditions: readStringArray(compilerOptions.customConditions) } : {}),
407
+ ...(typeof compilerOptions.rootDir === "string" ? { rootDir: compilerOptions.rootDir } : {}),
408
+ ...(Array.isArray(compilerOptions.rootDirs) ? { rootDirs: readStringArray(compilerOptions.rootDirs) } : {})
409
+ }
410
+ };
411
+ }
412
+ catch (error) {
413
+ diagnostics.push({
414
+ code: "TOPOLOGY_TSCONFIG_UNREADABLE",
415
+ message: error instanceof Error ? error.message : "Could not read tsconfig.",
416
+ file
417
+ });
418
+ return null;
419
+ }
420
+ }
421
+ function createPathMappings(pattern, targets, baseUrl) {
422
+ return [{
423
+ pattern,
424
+ targets,
425
+ baseUrl,
426
+ specificity: pattern.replace("*", "").length
427
+ }];
428
+ }
429
+ function aliasCandidate(targetNoExt, mapping, rawTarget) {
430
+ const starIndex = rawTarget.indexOf("*");
431
+ if (starIndex < 0) {
432
+ const absoluteTarget = withoutSourceExtension(path.resolve(mapping.baseUrl, rawTarget));
433
+ return absoluteTarget === targetNoExt && !mapping.pattern.includes("*") ? mapping.pattern : null;
434
+ }
435
+ const targetPrefix = withoutSourceExtension(path.resolve(mapping.baseUrl, rawTarget.slice(0, starIndex)));
436
+ const targetSuffix = withoutSourceExtension(rawTarget.slice(starIndex + 1));
437
+ if (!targetNoExt.startsWith(targetPrefix) || (targetSuffix && !targetNoExt.endsWith(targetSuffix))) {
438
+ return null;
439
+ }
440
+ const wildcard = targetNoExt.slice(targetPrefix.length, targetSuffix ? -targetSuffix.length : undefined).replace(/^[/\\]/, "");
441
+ return mapping.pattern.replace("*", wildcard.replace(/\\/g, "/"));
442
+ }
443
+ function packageRelation(root, from, to) {
444
+ const fromLabel = from ? toDisplayPath(root, from.root) : "<unknown>";
445
+ const toLabel = to ? toDisplayPath(root, to.root) : "<unknown>";
446
+ if (!from || !to) {
447
+ return {
448
+ from: fromLabel,
449
+ to: toLabel,
450
+ reachable: false,
451
+ reasons: ["package boundary is unknown"]
452
+ };
453
+ }
454
+ if (from.root === to.root) {
455
+ return {
456
+ from: fromLabel,
457
+ to: toLabel,
458
+ reachable: true,
459
+ reasons: ["same package"]
460
+ };
461
+ }
462
+ if (to.name && from.dependencies.includes(to.name)) {
463
+ return {
464
+ from: fromLabel,
465
+ to: toLabel,
466
+ reachable: true,
467
+ reasons: [`${from.name ?? fromLabel} declares dependency ${to.name}`]
468
+ };
469
+ }
470
+ const referenceReason = tsconfigReferenceReason(root, from, to);
471
+ if (referenceReason) {
472
+ return {
473
+ from: fromLabel,
474
+ to: toLabel,
475
+ reachable: true,
476
+ reasons: [referenceReason]
477
+ };
478
+ }
479
+ return {
480
+ from: fromLabel,
481
+ to: toLabel,
482
+ reachable: false,
483
+ reasons: to.name ? [`missing dependency ${to.name}`] : ["target package has no name"]
484
+ };
485
+ }
486
+ function walkPackageJson(root) {
487
+ const results = [];
488
+ visit(root);
489
+ return results;
490
+ function visit(dir) {
491
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
492
+ const full = path.join(dir, entry.name);
493
+ if (entry.isDirectory()) {
494
+ if (!EXCLUDED_DIRS.has(entry.name)) {
495
+ visit(full);
496
+ }
497
+ continue;
498
+ }
499
+ if (entry.isFile() && entry.name === "package.json") {
500
+ results.push(full);
501
+ }
502
+ }
503
+ }
504
+ }
505
+ function readWorkspacePackageFilter(root, diagnostics) {
506
+ const rootPackageJson = path.join(root, "package.json");
507
+ const patterns = [
508
+ ...readPackageJsonWorkspacePatterns(rootPackageJson, diagnostics),
509
+ ...readPnpmWorkspacePatterns(path.join(root, "pnpm-workspace.yaml"), diagnostics)
510
+ ];
511
+ const positives = uniqueStrings(patterns.filter((pattern) => !pattern.startsWith("!")));
512
+ const negatives = uniqueStrings(patterns.filter((pattern) => pattern.startsWith("!")).map((pattern) => pattern.slice(1)));
513
+ if (positives.length === 0) {
514
+ return null;
515
+ }
516
+ return (packageJson) => {
517
+ if (path.resolve(packageJson) === path.resolve(rootPackageJson)) {
518
+ return true;
519
+ }
520
+ const packageDir = toDisplayPath(root, path.dirname(packageJson));
521
+ return positives.some((pattern) => workspacePatternMatches(packageDir, pattern)) &&
522
+ !negatives.some((pattern) => workspacePatternMatches(packageDir, pattern));
523
+ };
524
+ }
525
+ function workspacePatternMatches(packageDir, pattern) {
526
+ const normalizedPattern = pattern.replace(/\\/g, "/").replace(/\/$/, "");
527
+ if (!containsGlob(normalizedPattern)) {
528
+ return packageDir === normalizedPattern;
529
+ }
530
+ return globToRegExp(normalizedPattern).test(packageDir);
531
+ }
532
+ function readPackageJsonWorkspacePatterns(file, diagnostics) {
533
+ if (!fs.existsSync(file)) {
534
+ return [];
535
+ }
536
+ try {
537
+ const raw = parseJsoncObject(fs.readFileSync(file, "utf8"));
538
+ const workspaces = raw.workspaces;
539
+ if (Array.isArray(workspaces)) {
540
+ return readStringArray(workspaces);
541
+ }
542
+ if (isRecord(workspaces) && Array.isArray(workspaces.packages)) {
543
+ return readStringArray(workspaces.packages);
544
+ }
545
+ }
546
+ catch (error) {
547
+ diagnostics.push({
548
+ code: "TOPOLOGY_WORKSPACE_PACKAGE_JSON_UNREADABLE",
549
+ message: error instanceof Error ? error.message : "Could not read package workspaces.",
550
+ file: toDisplayPath(path.dirname(file), file)
551
+ });
552
+ }
553
+ return [];
554
+ }
555
+ function readPnpmWorkspacePatterns(file, diagnostics) {
556
+ if (!fs.existsSync(file)) {
557
+ return [];
558
+ }
559
+ try {
560
+ const patterns = [];
561
+ const lines = fs.readFileSync(file, "utf8").split(/\r?\n/);
562
+ let inPackages = false;
563
+ for (const line of lines) {
564
+ if (/^\s*packages\s*:\s*$/.test(line)) {
565
+ inPackages = true;
566
+ continue;
567
+ }
568
+ if (inPackages && /^\S/.test(line) && !/^\s*-/.test(line)) {
569
+ break;
570
+ }
571
+ if (!inPackages) {
572
+ continue;
573
+ }
574
+ const match = line.match(/^\s*-\s*['"]?([^'"]+?)['"]?\s*(?:#.*)?$/);
575
+ if (match?.[1]) {
576
+ patterns.push(match[1].trim());
577
+ }
578
+ }
579
+ return patterns;
580
+ }
581
+ catch (error) {
582
+ diagnostics.push({
583
+ code: "TOPOLOGY_PNPM_WORKSPACE_UNREADABLE",
584
+ message: error instanceof Error ? error.message : "Could not read pnpm workspace.",
585
+ file: toDisplayPath(path.dirname(file), file)
586
+ });
587
+ return [];
588
+ }
589
+ }
590
+ function dependencyNames(raw) {
591
+ return uniqueStrings([
592
+ ...objectKeys(raw.dependencies),
593
+ ...objectKeys(raw.devDependencies),
594
+ ...objectKeys(raw.peerDependencies),
595
+ ...objectKeys(raw.optionalDependencies)
596
+ ]);
597
+ }
598
+ function normalizePackageMapValue(value) {
599
+ if (isRecord(value)) {
600
+ return value;
601
+ }
602
+ if (typeof value === "string" || Array.isArray(value)) {
603
+ return { ".": value };
604
+ }
605
+ return undefined;
606
+ }
607
+ function objectKeys(value) {
608
+ return isRecord(value) ? Object.keys(value).sort() : [];
609
+ }
610
+ function readPathsObject(value) {
611
+ const paths = {};
612
+ for (const [key, rawTargets] of Object.entries(value)) {
613
+ if (!Array.isArray(rawTargets)) {
614
+ continue;
615
+ }
616
+ const targets = rawTargets.filter((target) => typeof target === "string" && target.trim() !== "");
617
+ if (targets.length > 0) {
618
+ paths[key] = targets;
619
+ }
620
+ }
621
+ return Object.keys(paths).length > 0 ? paths : undefined;
622
+ }
623
+ function resolveExtendsTsConfig(configPath, rawExtends) {
624
+ const configDir = path.dirname(configPath);
625
+ const base = rawExtends.startsWith(".") || path.isAbsolute(rawExtends)
626
+ ? path.resolve(configDir, rawExtends)
627
+ : path.resolve(configDir, "node_modules", rawExtends);
628
+ const candidates = path.extname(base)
629
+ ? [base]
630
+ : [`${base}.json`, path.join(base, "tsconfig.json")];
631
+ return candidates.find((candidate) => fs.existsSync(candidate) && fs.statSync(candidate).isFile()) ?? null;
632
+ }
633
+ function resolveInsideRoot(root, value) {
634
+ const resolved = path.resolve(root, value);
635
+ if (!isPathInsideOrEqual(resolved, root)) {
636
+ throw new errors_1.CliError("TOPOLOGY_PATH_OUTSIDE_WORKSPACE", "Topology paths must stay inside the workspace.", {
637
+ root,
638
+ path: value
639
+ });
640
+ }
641
+ return resolved;
642
+ }
643
+ function relativeSpecifier(fromFile, toFile) {
644
+ let specifier = withoutSourceExtension(path.relative(path.dirname(fromFile), toFile)).replace(/\\/g, "/");
645
+ if (!specifier.startsWith(".")) {
646
+ specifier = `./${specifier}`;
647
+ }
648
+ return specifier;
649
+ }
650
+ function packageSubpath(packageRoot, toFile) {
651
+ const relative = withoutSourceExtension(path.relative(packageRoot, toFile)).replace(/\\/g, "/");
652
+ const withoutSrc = relative.replace(/^src\//, "");
653
+ return withoutSrc === "index" ? "" : withoutSrc;
654
+ }
655
+ function packageExportsSubpath(pkg, subpath) {
656
+ if (!pkg.exports) {
657
+ return false;
658
+ }
659
+ const key = `./${subpath}`;
660
+ return packageMapAllowsSubpath(pkg.exports, key);
661
+ }
662
+ function packageMapAllowsSubpath(map, key) {
663
+ if (Object.prototype.hasOwnProperty.call(map, key) ||
664
+ Object.prototype.hasOwnProperty.call(map, `${key}.js`) ||
665
+ Object.prototype.hasOwnProperty.call(map, `${key}.ts`)) {
666
+ return true;
667
+ }
668
+ for (const pattern of Object.keys(map)) {
669
+ if (!pattern.includes("*")) {
670
+ continue;
671
+ }
672
+ const [prefix = "", suffix = ""] = pattern.split("*");
673
+ if (key.startsWith(prefix) && key.endsWith(suffix)) {
674
+ return true;
675
+ }
676
+ }
677
+ return false;
678
+ }
679
+ function packageImportCandidate(pkg, toFile) {
680
+ if (!pkg.imports) {
681
+ return null;
682
+ }
683
+ const relative = withoutSourceExtension(path.relative(pkg.root, toFile)).replace(/\\/g, "/");
684
+ for (const [pattern, rawTarget] of Object.entries(pkg.imports)) {
685
+ if (!pattern.startsWith("#")) {
686
+ continue;
687
+ }
688
+ const specifier = packageImportSpecifierForTarget(pattern, rawTarget, relative);
689
+ if (specifier) {
690
+ return {
691
+ specifier,
692
+ kind: "package-import",
693
+ valid: true,
694
+ ...(pkg.name ? { packageName: pkg.name } : {}),
695
+ reason: `matched package imports pattern ${pattern}`
696
+ };
697
+ }
698
+ }
699
+ return null;
700
+ }
701
+ function packageImportSpecifierForTarget(pattern, rawTarget, relativeTargetNoExt) {
702
+ const targets = flattenPackageTargetStrings(rawTarget);
703
+ for (const target of targets) {
704
+ const normalized = withoutSourceExtension(target.replace(/^\.\//, "")).replace(/\\/g, "/");
705
+ const starIndex = normalized.indexOf("*");
706
+ if (starIndex < 0) {
707
+ if (normalized === relativeTargetNoExt && !pattern.includes("*")) {
708
+ return pattern;
709
+ }
710
+ continue;
711
+ }
712
+ const prefix = normalized.slice(0, starIndex);
713
+ const suffix = normalized.slice(starIndex + 1);
714
+ if (!relativeTargetNoExt.startsWith(prefix) || (suffix && !relativeTargetNoExt.endsWith(suffix))) {
715
+ continue;
716
+ }
717
+ const wildcard = relativeTargetNoExt.slice(prefix.length, suffix ? -suffix.length : undefined).replace(/^[/\\]/, "");
718
+ return pattern.replace("*", wildcard);
719
+ }
720
+ return null;
721
+ }
722
+ function flattenPackageTargetStrings(value) {
723
+ if (typeof value === "string") {
724
+ return [value];
725
+ }
726
+ if (Array.isArray(value)) {
727
+ return value.flatMap(flattenPackageTargetStrings);
728
+ }
729
+ if (isRecord(value)) {
730
+ return Object.values(value).flatMap(flattenPackageTargetStrings);
731
+ }
732
+ return [];
733
+ }
734
+ function withoutSourceExtension(file) {
735
+ const ext = path.extname(file);
736
+ return SOURCE_EXTENSIONS.includes(ext) ? file.slice(0, -ext.length) : file;
737
+ }
738
+ function compareMappings(left, right) {
739
+ return right.specificity - left.specificity || left.pattern.localeCompare(right.pattern);
740
+ }
741
+ function compareBoundaryRelations(left, right) {
742
+ return Number(right.reachable) - Number(left.reachable) || left.from.localeCompare(right.from) || left.to.localeCompare(right.to);
743
+ }
744
+ function tsconfigOwnerRank(file) {
745
+ return path.basename(file).toLowerCase() === "tsconfig.json" ? 0 : 1;
746
+ }
747
+ function tsconfigReferenceReason(root, from, to) {
748
+ if (!from || !to) {
749
+ return null;
750
+ }
751
+ const fromConfig = path.join(from.root, "tsconfig.json");
752
+ if (!fs.existsSync(fromConfig)) {
753
+ return null;
754
+ }
755
+ const raw = readRawTsConfig(fromConfig, []);
756
+ if (!raw?.references) {
757
+ return null;
758
+ }
759
+ const targetConfig = path.join(to.root, "tsconfig.json");
760
+ const referenced = raw.references.some((reference) => {
761
+ const resolved = path.resolve(path.dirname(fromConfig), reference);
762
+ return path.resolve(resolved) === path.resolve(to.root) ||
763
+ path.resolve(resolved, "tsconfig.json") === path.resolve(targetConfig) ||
764
+ path.resolve(resolved) === path.resolve(targetConfig);
765
+ });
766
+ return referenced ? `${toDisplayPath(root, fromConfig)} references ${toDisplayPath(root, targetConfig)}` : null;
767
+ }
768
+ function fileMatchesTsConfig(root, file, config) {
769
+ const configPath = path.resolve(root, config.file);
770
+ const configDir = path.dirname(configPath);
771
+ const relative = path.relative(configDir, file).replace(/\\/g, "/");
772
+ if (relative.startsWith("..") || path.isAbsolute(relative)) {
773
+ return false;
774
+ }
775
+ if (config.files && config.files.length > 0) {
776
+ return config.files.some((entry) => path.resolve(configDir, entry) === file);
777
+ }
778
+ const include = config.include && config.include.length > 0 ? config.include : ["**/*"];
779
+ const exclude = config.exclude ?? ["node_modules", "bower_components", "jspm_packages"];
780
+ return include.some((pattern) => globMatches(relative, pattern)) &&
781
+ !exclude.some((pattern) => globMatches(relative, pattern) || relative === pattern || relative.startsWith(`${pattern.replace(/\/$/, "")}/`));
782
+ }
783
+ function globMatches(relativePath, pattern) {
784
+ const normalizedPattern = pattern.replace(/\\/g, "/").replace(/\/$/, "");
785
+ if (normalizedPattern === relativePath) {
786
+ return true;
787
+ }
788
+ if (!containsGlob(normalizedPattern)) {
789
+ return relativePath === normalizedPattern || relativePath.startsWith(`${normalizedPattern}/`);
790
+ }
791
+ return globToRegExp(normalizedPattern).test(relativePath);
792
+ }
793
+ function containsGlob(value) {
794
+ return value.includes("*") || value.includes("?");
795
+ }
796
+ function globToRegExp(pattern) {
797
+ let source = "^";
798
+ for (let index = 0; index < pattern.length; index += 1) {
799
+ const char = pattern[index];
800
+ const next = pattern[index + 1];
801
+ const nextNext = pattern[index + 2];
802
+ if (char === "*" && next === "*" && nextNext === "/") {
803
+ source += "(?:.*/)?";
804
+ index += 2;
805
+ continue;
806
+ }
807
+ if (char === "*" && next === "*") {
808
+ source += ".*";
809
+ index += 1;
810
+ continue;
811
+ }
812
+ if (char === "*") {
813
+ source += "[^/]*";
814
+ continue;
815
+ }
816
+ if (char === "?") {
817
+ source += "[^/]";
818
+ continue;
819
+ }
820
+ source += escapeRegExp(char ?? "");
821
+ }
822
+ source += "$";
823
+ return new RegExp(source);
824
+ }
825
+ function readStringArray(value) {
826
+ return value.filter((item) => typeof item === "string" && item.trim() !== "");
827
+ }
828
+ function readTsConfigReferencePaths(value) {
829
+ return value.flatMap((item) => isRecord(item) && typeof item.path === "string" ? [item.path] : []);
830
+ }
831
+ function uniqueCandidates(candidates) {
832
+ const byKey = new Map();
833
+ for (const candidate of candidates) {
834
+ byKey.set(`${candidate.kind}\n${candidate.specifier}`, candidate);
835
+ }
836
+ return Array.from(byKey.values()).sort((left, right) => left.kind.localeCompare(right.kind) ||
837
+ left.specifier.length - right.specifier.length ||
838
+ left.specifier.localeCompare(right.specifier));
839
+ }
840
+ function uniqueStrings(values) {
841
+ return Array.from(new Set(values.filter((value) => value !== ""))).sort();
842
+ }
843
+ function isPathInsideOrEqual(candidate, parent) {
844
+ const relative = path.relative(path.resolve(parent), path.resolve(candidate));
845
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
846
+ }
847
+ function toDisplayPath(root, file) {
848
+ const relative = path.relative(root, file).replace(/\\/g, "/");
849
+ return relative === "" ? "." : relative;
850
+ }
851
+ function parseJsoncObject(text) {
852
+ return JSON.parse(stripJsonComments(text));
853
+ }
854
+ function stripJsonComments(text) {
855
+ let result = "";
856
+ let inString = false;
857
+ let escaped = false;
858
+ for (let index = 0; index < text.length; index += 1) {
859
+ const char = text[index] ?? "";
860
+ const next = text[index + 1] ?? "";
861
+ if (inString) {
862
+ result += char;
863
+ if (escaped) {
864
+ escaped = false;
865
+ }
866
+ else if (char === "\\") {
867
+ escaped = true;
868
+ }
869
+ else if (char === "\"") {
870
+ inString = false;
871
+ }
872
+ continue;
873
+ }
874
+ if (char === "\"") {
875
+ inString = true;
876
+ result += char;
877
+ continue;
878
+ }
879
+ if (char === "/" && next === "/") {
880
+ while (index < text.length && text[index] !== "\n") {
881
+ index += 1;
882
+ }
883
+ result += "\n";
884
+ continue;
885
+ }
886
+ if (char === "/" && next === "*") {
887
+ index += 2;
888
+ while (index < text.length && !(text[index] === "*" && text[index + 1] === "/")) {
889
+ index += 1;
890
+ }
891
+ index += 1;
892
+ continue;
893
+ }
894
+ result += char;
895
+ }
896
+ return result;
897
+ }
898
+ function isRecord(value) {
899
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
900
+ }
901
+ function escapeRegExp(value) {
902
+ return value.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
903
+ }