@opensip-cli/graph-typescript 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +31 -0
- package/dist/__tests__/_pipeline.d.ts +40 -0
- package/dist/__tests__/_pipeline.d.ts.map +1 -0
- package/dist/__tests__/_pipeline.js +67 -0
- package/dist/__tests__/_pipeline.js.map +1 -0
- package/dist/__tests__/acceptance/_fixture-runner.d.ts +13 -0
- package/dist/__tests__/acceptance/_fixture-runner.d.ts.map +1 -0
- package/dist/__tests__/acceptance/_fixture-runner.js +55 -0
- package/dist/__tests__/acceptance/_fixture-runner.js.map +1 -0
- package/dist/__tests__/acceptance/alias-resolution.test.d.ts +8 -0
- package/dist/__tests__/acceptance/alias-resolution.test.d.ts.map +1 -0
- package/dist/__tests__/acceptance/alias-resolution.test.js +39 -0
- package/dist/__tests__/acceptance/alias-resolution.test.js.map +1 -0
- package/dist/__tests__/acceptance/arrow-callback-resolution.test.d.ts +8 -0
- package/dist/__tests__/acceptance/arrow-callback-resolution.test.d.ts.map +1 -0
- package/dist/__tests__/acceptance/arrow-callback-resolution.test.js +33 -0
- package/dist/__tests__/acceptance/arrow-callback-resolution.test.js.map +1 -0
- package/dist/__tests__/acceptance/constructor-calls.test.d.ts +7 -0
- package/dist/__tests__/acceptance/constructor-calls.test.d.ts.map +1 -0
- package/dist/__tests__/acceptance/constructor-calls.test.js +36 -0
- package/dist/__tests__/acceptance/constructor-calls.test.js.map +1 -0
- package/dist/__tests__/acceptance/interface-dispatch.test.d.ts +8 -0
- package/dist/__tests__/acceptance/interface-dispatch.test.d.ts.map +1 -0
- package/dist/__tests__/acceptance/interface-dispatch.test.js +44 -0
- package/dist/__tests__/acceptance/interface-dispatch.test.js.map +1 -0
- package/dist/__tests__/acceptance/inventory-completeness.test.d.ts +9 -0
- package/dist/__tests__/acceptance/inventory-completeness.test.d.ts.map +1 -0
- package/dist/__tests__/acceptance/inventory-completeness.test.js +72 -0
- package/dist/__tests__/acceptance/inventory-completeness.test.js.map +1 -0
- package/dist/__tests__/acceptance/jsx-resolution.test.d.ts +7 -0
- package/dist/__tests__/acceptance/jsx-resolution.test.d.ts.map +1 -0
- package/dist/__tests__/acceptance/jsx-resolution.test.js +46 -0
- package/dist/__tests__/acceptance/jsx-resolution.test.js.map +1 -0
- package/dist/__tests__/acceptance/module-init.test.d.ts +10 -0
- package/dist/__tests__/acceptance/module-init.test.d.ts.map +1 -0
- package/dist/__tests__/acceptance/module-init.test.js +40 -0
- package/dist/__tests__/acceptance/module-init.test.js.map +1 -0
- package/dist/__tests__/acceptance/projectdir-normalization.test.d.ts +7 -0
- package/dist/__tests__/acceptance/projectdir-normalization.test.d.ts.map +1 -0
- package/dist/__tests__/acceptance/projectdir-normalization.test.js +51 -0
- package/dist/__tests__/acceptance/projectdir-normalization.test.js.map +1 -0
- package/dist/__tests__/body-twin-edges.test.d.ts +12 -0
- package/dist/__tests__/body-twin-edges.test.d.ts.map +1 -0
- package/dist/__tests__/body-twin-edges.test.js +85 -0
- package/dist/__tests__/body-twin-edges.test.js.map +1 -0
- package/dist/__tests__/cache-key.test.d.ts +8 -0
- package/dist/__tests__/cache-key.test.d.ts.map +1 -0
- package/dist/__tests__/cache-key.test.js +86 -0
- package/dist/__tests__/cache-key.test.js.map +1 -0
- package/dist/__tests__/depends-on-emission.test.d.ts +19 -0
- package/dist/__tests__/depends-on-emission.test.d.ts.map +1 -0
- package/dist/__tests__/depends-on-emission.test.js +165 -0
- package/dist/__tests__/depends-on-emission.test.js.map +1 -0
- package/dist/__tests__/discover.test.d.ts +9 -0
- package/dist/__tests__/discover.test.d.ts.map +1 -0
- package/dist/__tests__/discover.test.js +72 -0
- package/dist/__tests__/discover.test.js.map +1 -0
- package/dist/__tests__/edge-helpers/method-target.test.d.ts +8 -0
- package/dist/__tests__/edge-helpers/method-target.test.d.ts.map +1 -0
- package/dist/__tests__/edge-helpers/method-target.test.js +96 -0
- package/dist/__tests__/edge-helpers/method-target.test.js.map +1 -0
- package/dist/__tests__/edge-helpers/resolve-decl.test.d.ts +13 -0
- package/dist/__tests__/edge-helpers/resolve-decl.test.d.ts.map +1 -0
- package/dist/__tests__/edge-helpers/resolve-decl.test.js +176 -0
- package/dist/__tests__/edge-helpers/resolve-decl.test.js.map +1 -0
- package/dist/__tests__/edge-resolvers/branches.test.d.ts +11 -0
- package/dist/__tests__/edge-resolvers/branches.test.d.ts.map +1 -0
- package/dist/__tests__/edge-resolvers/branches.test.js +305 -0
- package/dist/__tests__/edge-resolvers/branches.test.js.map +1 -0
- package/dist/__tests__/edge-resolvers/contract.test.d.ts +8 -0
- package/dist/__tests__/edge-resolvers/contract.test.d.ts.map +1 -0
- package/dist/__tests__/edge-resolvers/contract.test.js +30 -0
- package/dist/__tests__/edge-resolvers/contract.test.js.map +1 -0
- package/dist/__tests__/edge-resolvers/resolver-units.test.d.ts +17 -0
- package/dist/__tests__/edge-resolvers/resolver-units.test.d.ts.map +1 -0
- package/dist/__tests__/edge-resolvers/resolver-units.test.js +286 -0
- package/dist/__tests__/edge-resolvers/resolver-units.test.js.map +1 -0
- package/dist/__tests__/fast-vs-exact.test.d.ts +16 -0
- package/dist/__tests__/fast-vs-exact.test.d.ts.map +1 -0
- package/dist/__tests__/fast-vs-exact.test.js +116 -0
- package/dist/__tests__/fast-vs-exact.test.js.map +1 -0
- package/dist/__tests__/graph-cli.test.d.ts +9 -0
- package/dist/__tests__/graph-cli.test.d.ts.map +1 -0
- package/dist/__tests__/graph-cli.test.js +417 -0
- package/dist/__tests__/graph-cli.test.js.map +1 -0
- package/dist/__tests__/heap-preflight.test.d.ts +10 -0
- package/dist/__tests__/heap-preflight.test.d.ts.map +1 -0
- package/dist/__tests__/heap-preflight.test.js +166 -0
- package/dist/__tests__/heap-preflight.test.js.map +1 -0
- package/dist/__tests__/inventory-differential.test.d.ts +15 -0
- package/dist/__tests__/inventory-differential.test.d.ts.map +1 -0
- package/dist/__tests__/inventory-differential.test.js +319 -0
- package/dist/__tests__/inventory-differential.test.js.map +1 -0
- package/dist/__tests__/inventory-helpers/hash-body.test.d.ts +11 -0
- package/dist/__tests__/inventory-helpers/hash-body.test.d.ts.map +1 -0
- package/dist/__tests__/inventory-helpers/hash-body.test.js +34 -0
- package/dist/__tests__/inventory-helpers/hash-body.test.js.map +1 -0
- package/dist/__tests__/inventory-helpers/synthesize-name.test.d.ts +9 -0
- package/dist/__tests__/inventory-helpers/synthesize-name.test.d.ts.map +1 -0
- package/dist/__tests__/inventory-helpers/synthesize-name.test.js +30 -0
- package/dist/__tests__/inventory-helpers/synthesize-name.test.js.map +1 -0
- package/dist/__tests__/inventory-property-tests.test.d.ts +24 -0
- package/dist/__tests__/inventory-property-tests.test.d.ts.map +1 -0
- package/dist/__tests__/inventory-property-tests.test.js +521 -0
- package/dist/__tests__/inventory-property-tests.test.js.map +1 -0
- package/dist/__tests__/inventory-shape-coverage.test.d.ts +16 -0
- package/dist/__tests__/inventory-shape-coverage.test.d.ts.map +1 -0
- package/dist/__tests__/inventory-shape-coverage.test.js +586 -0
- package/dist/__tests__/inventory-shape-coverage.test.js.map +1 -0
- package/dist/__tests__/inventory-visitors/contract.test.d.ts +9 -0
- package/dist/__tests__/inventory-visitors/contract.test.d.ts.map +1 -0
- package/dist/__tests__/inventory-visitors/contract.test.js +33 -0
- package/dist/__tests__/inventory-visitors/contract.test.js.map +1 -0
- package/dist/__tests__/lang-adapter-contract.test.d.ts +19 -0
- package/dist/__tests__/lang-adapter-contract.test.d.ts.map +1 -0
- package/dist/__tests__/lang-adapter-contract.test.js +880 -0
- package/dist/__tests__/lang-adapter-contract.test.js.map +1 -0
- package/dist/__tests__/lang-adapter-registry.test.d.ts +10 -0
- package/dist/__tests__/lang-adapter-registry.test.d.ts.map +1 -0
- package/dist/__tests__/lang-adapter-registry.test.js +151 -0
- package/dist/__tests__/lang-adapter-registry.test.js.map +1 -0
- package/dist/__tests__/normalize-project-dir.test.d.ts +5 -0
- package/dist/__tests__/normalize-project-dir.test.d.ts.map +1 -0
- package/dist/__tests__/normalize-project-dir.test.js +47 -0
- package/dist/__tests__/normalize-project-dir.test.js.map +1 -0
- package/dist/__tests__/orchestrate.test.d.ts +8 -0
- package/dist/__tests__/orchestrate.test.d.ts.map +1 -0
- package/dist/__tests__/orchestrate.test.js +213 -0
- package/dist/__tests__/orchestrate.test.js.map +1 -0
- package/dist/__tests__/parse-fast.test.d.ts +9 -0
- package/dist/__tests__/parse-fast.test.d.ts.map +1 -0
- package/dist/__tests__/parse-fast.test.js +114 -0
- package/dist/__tests__/parse-fast.test.js.map +1 -0
- package/dist/__tests__/rules/_helpers.d.ts +18 -0
- package/dist/__tests__/rules/_helpers.d.ts.map +1 -0
- package/dist/__tests__/rules/_helpers.js +62 -0
- package/dist/__tests__/rules/_helpers.js.map +1 -0
- package/dist/__tests__/rules/duplicated-function-body.test.d.ts +5 -0
- package/dist/__tests__/rules/duplicated-function-body.test.d.ts.map +1 -0
- package/dist/__tests__/rules/duplicated-function-body.test.js +39 -0
- package/dist/__tests__/rules/duplicated-function-body.test.js.map +1 -0
- package/dist/__tests__/rules/orphan-subtree.test.d.ts +5 -0
- package/dist/__tests__/rules/orphan-subtree.test.d.ts.map +1 -0
- package/dist/__tests__/rules/orphan-subtree.test.js +75 -0
- package/dist/__tests__/rules/orphan-subtree.test.js.map +1 -0
- package/dist/__tests__/rules/rule-hints-integration.test.d.ts +20 -0
- package/dist/__tests__/rules/rule-hints-integration.test.d.ts.map +1 -0
- package/dist/__tests__/rules/rule-hints-integration.test.js +279 -0
- package/dist/__tests__/rules/rule-hints-integration.test.js.map +1 -0
- package/dist/__tests__/tool-register.test.d.ts +16 -0
- package/dist/__tests__/tool-register.test.d.ts.map +1 -0
- package/dist/__tests__/tool-register.test.js +210 -0
- package/dist/__tests__/tool-register.test.js.map +1 -0
- package/dist/__tests__/value-reference-unit.test.d.ts +13 -0
- package/dist/__tests__/value-reference-unit.test.d.ts.map +1 -0
- package/dist/__tests__/value-reference-unit.test.js +226 -0
- package/dist/__tests__/value-reference-unit.test.js.map +1 -0
- package/dist/__tests__/value-reference.test.d.ts +15 -0
- package/dist/__tests__/value-reference.test.d.ts.map +1 -0
- package/dist/__tests__/value-reference.test.js +115 -0
- package/dist/__tests__/value-reference.test.js.map +1 -0
- package/dist/__tests__/walk-fast.test.d.ts +8 -0
- package/dist/__tests__/walk-fast.test.d.ts.map +1 -0
- package/dist/__tests__/walk-fast.test.js +51 -0
- package/dist/__tests__/walk-fast.test.js.map +1 -0
- package/dist/__tests__/walk-reexports.test.d.ts +7 -0
- package/dist/__tests__/walk-reexports.test.d.ts.map +1 -0
- package/dist/__tests__/walk-reexports.test.js +79 -0
- package/dist/__tests__/walk-reexports.test.js.map +1 -0
- package/dist/cache-key.d.ts +41 -0
- package/dist/cache-key.d.ts.map +1 -0
- package/dist/cache-key.js +94 -0
- package/dist/cache-key.js.map +1 -0
- package/dist/discover.d.ts +25 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +124 -0
- package/dist/discover.js.map +1 -0
- package/dist/edge-helpers/cross-package-context.d.ts +34 -0
- package/dist/edge-helpers/cross-package-context.d.ts.map +1 -0
- package/dist/edge-helpers/cross-package-context.js +97 -0
- package/dist/edge-helpers/cross-package-context.js.map +1 -0
- package/dist/edge-helpers/declaration-to-node.d.ts +58 -0
- package/dist/edge-helpers/declaration-to-node.d.ts.map +1 -0
- package/dist/edge-helpers/declaration-to-node.js +93 -0
- package/dist/edge-helpers/declaration-to-node.js.map +1 -0
- package/dist/edge-helpers/find-catalog-entry.d.ts +24 -0
- package/dist/edge-helpers/find-catalog-entry.d.ts.map +1 -0
- package/dist/edge-helpers/find-catalog-entry.js +45 -0
- package/dist/edge-helpers/find-catalog-entry.js.map +1 -0
- package/dist/edge-helpers/method-target.d.ts +22 -0
- package/dist/edge-helpers/method-target.d.ts.map +1 -0
- package/dist/edge-helpers/method-target.js +46 -0
- package/dist/edge-helpers/method-target.js.map +1 -0
- package/dist/edge-helpers/resolution-trace.d.ts +24 -0
- package/dist/edge-helpers/resolution-trace.d.ts.map +1 -0
- package/dist/edge-helpers/resolution-trace.js +38 -0
- package/dist/edge-helpers/resolution-trace.js.map +1 -0
- package/dist/edge-helpers/resolve-decl.d.ts +44 -0
- package/dist/edge-helpers/resolve-decl.d.ts.map +1 -0
- package/dist/edge-helpers/resolve-decl.js +170 -0
- package/dist/edge-helpers/resolve-decl.js.map +1 -0
- package/dist/edge-helpers/unalias-symbol.d.ts +10 -0
- package/dist/edge-helpers/unalias-symbol.d.ts.map +1 -0
- package/dist/edge-helpers/unalias-symbol.js +29 -0
- package/dist/edge-helpers/unalias-symbol.js.map +1 -0
- package/dist/edge-resolvers/__tests__/boundary.test.d.ts +15 -0
- package/dist/edge-resolvers/__tests__/boundary.test.d.ts.map +1 -0
- package/dist/edge-resolvers/__tests__/boundary.test.js +227 -0
- package/dist/edge-resolvers/__tests__/boundary.test.js.map +1 -0
- package/dist/edge-resolvers/__tests__/callee-anchor.test.d.ts +10 -0
- package/dist/edge-resolvers/__tests__/callee-anchor.test.d.ts.map +1 -0
- package/dist/edge-resolvers/__tests__/callee-anchor.test.js +63 -0
- package/dist/edge-resolvers/__tests__/callee-anchor.test.js.map +1 -0
- package/dist/edge-resolvers/__tests__/syntactic.test.d.ts +12 -0
- package/dist/edge-resolvers/__tests__/syntactic.test.d.ts.map +1 -0
- package/dist/edge-resolvers/__tests__/syntactic.test.js +215 -0
- package/dist/edge-resolvers/__tests__/syntactic.test.js.map +1 -0
- package/dist/edge-resolvers/boundary.d.ts +41 -0
- package/dist/edge-resolvers/boundary.d.ts.map +1 -0
- package/dist/edge-resolvers/boundary.js +130 -0
- package/dist/edge-resolvers/boundary.js.map +1 -0
- package/dist/edge-resolvers/catalog-fallback.d.ts +13 -0
- package/dist/edge-resolvers/catalog-fallback.d.ts.map +1 -0
- package/dist/edge-resolvers/catalog-fallback.js +30 -0
- package/dist/edge-resolvers/catalog-fallback.js.map +1 -0
- package/dist/edge-resolvers/direct-call.d.ts +10 -0
- package/dist/edge-resolvers/direct-call.d.ts.map +1 -0
- package/dist/edge-resolvers/direct-call.js +45 -0
- package/dist/edge-resolvers/direct-call.js.map +1 -0
- package/dist/edge-resolvers/jsx-element.d.ts +16 -0
- package/dist/edge-resolvers/jsx-element.d.ts.map +1 -0
- package/dist/edge-resolvers/jsx-element.js +67 -0
- package/dist/edge-resolvers/jsx-element.js.map +1 -0
- package/dist/edge-resolvers/new-expression.d.ts +11 -0
- package/dist/edge-resolvers/new-expression.d.ts.map +1 -0
- package/dist/edge-resolvers/new-expression.js +56 -0
- package/dist/edge-resolvers/new-expression.js.map +1 -0
- package/dist/edge-resolvers/polymorphic.d.ts +8 -0
- package/dist/edge-resolvers/polymorphic.d.ts.map +1 -0
- package/dist/edge-resolvers/polymorphic.js +57 -0
- package/dist/edge-resolvers/polymorphic.js.map +1 -0
- package/dist/edge-resolvers/property-access.d.ts +10 -0
- package/dist/edge-resolvers/property-access.d.ts.map +1 -0
- package/dist/edge-resolvers/property-access.js +56 -0
- package/dist/edge-resolvers/property-access.js.map +1 -0
- package/dist/edge-resolvers/syntactic.d.ts +105 -0
- package/dist/edge-resolvers/syntactic.d.ts.map +1 -0
- package/dist/edge-resolvers/syntactic.js +294 -0
- package/dist/edge-resolvers/syntactic.js.map +1 -0
- package/dist/edge-resolvers/types.d.ts +37 -0
- package/dist/edge-resolvers/types.d.ts.map +1 -0
- package/dist/edge-resolvers/types.js +10 -0
- package/dist/edge-resolvers/types.js.map +1 -0
- package/dist/edges-value-reference.d.ts +26 -0
- package/dist/edges-value-reference.d.ts.map +1 -0
- package/dist/edges-value-reference.js +138 -0
- package/dist/edges-value-reference.js.map +1 -0
- package/dist/edges.d.ts +65 -0
- package/dist/edges.d.ts.map +1 -0
- package/dist/edges.js +392 -0
- package/dist/edges.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +346 -0
- package/dist/index.js.map +1 -0
- package/dist/inventory-helpers/classify-visibility.d.ts +13 -0
- package/dist/inventory-helpers/classify-visibility.d.ts.map +1 -0
- package/dist/inventory-helpers/classify-visibility.js +56 -0
- package/dist/inventory-helpers/classify-visibility.js.map +1 -0
- package/dist/inventory-helpers/extract-decorators.d.ts +6 -0
- package/dist/inventory-helpers/extract-decorators.d.ts.map +1 -0
- package/dist/inventory-helpers/extract-decorators.js +33 -0
- package/dist/inventory-helpers/extract-decorators.js.map +1 -0
- package/dist/inventory-helpers/extract-params.d.ts +7 -0
- package/dist/inventory-helpers/extract-params.d.ts.map +1 -0
- package/dist/inventory-helpers/extract-params.js +28 -0
- package/dist/inventory-helpers/extract-params.js.map +1 -0
- package/dist/inventory-helpers/hash-body.d.ts +43 -0
- package/dist/inventory-helpers/hash-body.d.ts.map +1 -0
- package/dist/inventory-helpers/hash-body.js +52 -0
- package/dist/inventory-helpers/hash-body.js.map +1 -0
- package/dist/inventory-helpers/synthesize-name.d.ts +16 -0
- package/dist/inventory-helpers/synthesize-name.d.ts.map +1 -0
- package/dist/inventory-helpers/synthesize-name.js +17 -0
- package/dist/inventory-helpers/synthesize-name.js.map +1 -0
- package/dist/inventory-visitors/arrow-function.d.ts +8 -0
- package/dist/inventory-visitors/arrow-function.d.ts.map +1 -0
- package/dist/inventory-visitors/arrow-function.js +55 -0
- package/dist/inventory-visitors/arrow-function.js.map +1 -0
- package/dist/inventory-visitors/class-static-init.d.ts +17 -0
- package/dist/inventory-visitors/class-static-init.d.ts.map +1 -0
- package/dist/inventory-visitors/class-static-init.js +45 -0
- package/dist/inventory-visitors/class-static-init.js.map +1 -0
- package/dist/inventory-visitors/constructor-declaration.d.ts +7 -0
- package/dist/inventory-visitors/constructor-declaration.d.ts.map +1 -0
- package/dist/inventory-visitors/constructor-declaration.js +47 -0
- package/dist/inventory-visitors/constructor-declaration.js.map +1 -0
- package/dist/inventory-visitors/function-declaration.d.ts +7 -0
- package/dist/inventory-visitors/function-declaration.d.ts.map +1 -0
- package/dist/inventory-visitors/function-declaration.js +59 -0
- package/dist/inventory-visitors/function-declaration.js.map +1 -0
- package/dist/inventory-visitors/function-expression.d.ts +7 -0
- package/dist/inventory-visitors/function-expression.d.ts.map +1 -0
- package/dist/inventory-visitors/function-expression.js +56 -0
- package/dist/inventory-visitors/function-expression.js.map +1 -0
- package/dist/inventory-visitors/getter-setter.d.ts +7 -0
- package/dist/inventory-visitors/getter-setter.d.ts.map +1 -0
- package/dist/inventory-visitors/getter-setter.js +63 -0
- package/dist/inventory-visitors/getter-setter.js.map +1 -0
- package/dist/inventory-visitors/method-declaration.d.ts +7 -0
- package/dist/inventory-visitors/method-declaration.d.ts.map +1 -0
- package/dist/inventory-visitors/method-declaration.js +75 -0
- package/dist/inventory-visitors/method-declaration.js.map +1 -0
- package/dist/inventory-visitors/module-init.d.ts +15 -0
- package/dist/inventory-visitors/module-init.d.ts.map +1 -0
- package/dist/inventory-visitors/module-init.js +40 -0
- package/dist/inventory-visitors/module-init.js.map +1 -0
- package/dist/inventory-visitors/types.d.ts +26 -0
- package/dist/inventory-visitors/types.d.ts.map +1 -0
- package/dist/inventory-visitors/types.js +14 -0
- package/dist/inventory-visitors/types.js.map +1 -0
- package/dist/normalize-project-dir.d.ts +14 -0
- package/dist/normalize-project-dir.d.ts.map +1 -0
- package/dist/normalize-project-dir.js +36 -0
- package/dist/normalize-project-dir.js.map +1 -0
- package/dist/parse-fast.d.ts +41 -0
- package/dist/parse-fast.d.ts.map +1 -0
- package/dist/parse-fast.js +91 -0
- package/dist/parse-fast.js.map +1 -0
- package/dist/parse.d.ts +42 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +75 -0
- package/dist/parse.js.map +1 -0
- package/dist/test-file.d.ts +7 -0
- package/dist/test-file.d.ts.map +1 -0
- package/dist/test-file.js +42 -0
- package/dist/test-file.js.map +1 -0
- package/dist/walk.d.ts +125 -0
- package/dist/walk.d.ts.map +1 -0
- package/dist/walk.js +393 -0
- package/dist/walk.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inventory differential tests (Tier 2).
|
|
3
|
+
*
|
|
4
|
+
* The most powerful test in the suite: take real TypeScript files from
|
|
5
|
+
* the workspace, enumerate every callable declaration using the
|
|
6
|
+
* TypeScript Compiler API directly, run graph's stage 1 against the
|
|
7
|
+
* same files, and assert the symmetric difference is empty (modulo a
|
|
8
|
+
* documented deny-list of intentional exclusions).
|
|
9
|
+
*
|
|
10
|
+
* If this test passes for the chosen sample files, function detection
|
|
11
|
+
* is correct on real-world TypeScript. If it fails, the failing items
|
|
12
|
+
* are real bugs to investigate — they are not test artifacts.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=inventory-differential.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory-differential.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/inventory-differential.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inventory differential tests (Tier 2).
|
|
3
|
+
*
|
|
4
|
+
* The most powerful test in the suite: take real TypeScript files from
|
|
5
|
+
* the workspace, enumerate every callable declaration using the
|
|
6
|
+
* TypeScript Compiler API directly, run graph's stage 1 against the
|
|
7
|
+
* same files, and assert the symmetric difference is empty (modulo a
|
|
8
|
+
* documented deny-list of intentional exclusions).
|
|
9
|
+
*
|
|
10
|
+
* If this test passes for the chosen sample files, function detection
|
|
11
|
+
* is correct on real-world TypeScript. If it fails, the failing items
|
|
12
|
+
* are real bugs to investigate — they are not test artifacts.
|
|
13
|
+
*/
|
|
14
|
+
import { dirname, relative, resolve } from 'node:path';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
import ts from 'typescript';
|
|
17
|
+
import { describe, expect, it } from 'vitest';
|
|
18
|
+
import { discoverFiles } from '../discover.js';
|
|
19
|
+
import { buildCatalog } from './_pipeline.js';
|
|
20
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
21
|
+
const REPO_ROOT = resolve(HERE, '../../../../..');
|
|
22
|
+
/**
|
|
23
|
+
* Walk a single source file and enumerate every callable declaration
|
|
24
|
+
* the TypeScript Compiler API would surface.
|
|
25
|
+
*
|
|
26
|
+
* Excludes — these are the intentionally-excluded shapes (matching
|
|
27
|
+
* graph's design). They are documented inline to keep the test honest:
|
|
28
|
+
* if graph silently misses any of these the negative tests in
|
|
29
|
+
* inventory-shape-coverage.test.ts catch it; this test only asserts
|
|
30
|
+
* positive parity for shapes that should be in the catalog.
|
|
31
|
+
*
|
|
32
|
+
* - MethodSignature, PropertySignature, IndexSignature on
|
|
33
|
+
* InterfaceDeclaration / TypeLiteralNode — type-level only, no body.
|
|
34
|
+
* - FunctionTypeNode / ConstructorTypeNode in a type-position context.
|
|
35
|
+
* - Function declarations / methods with no body (overload signatures,
|
|
36
|
+
* abstract members, ambient `declare`).
|
|
37
|
+
*/
|
|
38
|
+
function enumerateCallablesFromTs(sourceFile, filePathProjectRel) {
|
|
39
|
+
const out = [];
|
|
40
|
+
const enclosingClass = [];
|
|
41
|
+
function siteOf(node) {
|
|
42
|
+
const start = node.getStart(sourceFile);
|
|
43
|
+
const lc = sourceFile.getLineAndCharacterOfPosition(start);
|
|
44
|
+
return { line: lc.line + 1, column: lc.character };
|
|
45
|
+
}
|
|
46
|
+
function visit(node) {
|
|
47
|
+
// Skip type-position descendants entirely — anything inside a
|
|
48
|
+
// TypeNode (function type alias, type literal, interface body) is
|
|
49
|
+
// not a callable.
|
|
50
|
+
if (ts.isTypeAliasDeclaration(node) ||
|
|
51
|
+
ts.isInterfaceDeclaration(node) ||
|
|
52
|
+
ts.isTypeLiteralNode(node) ||
|
|
53
|
+
ts.isFunctionTypeNode(node) ||
|
|
54
|
+
ts.isConstructorTypeNode(node)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) {
|
|
58
|
+
const className = node.name?.text ?? '<anon-class>';
|
|
59
|
+
enclosingClass.push(className);
|
|
60
|
+
ts.forEachChild(node, visit);
|
|
61
|
+
enclosingClass.pop();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (ts.isFunctionDeclaration(node)) {
|
|
65
|
+
// Body-less declarations (overload signatures, ambient declares)
|
|
66
|
+
// are not callables — graph excludes them by design.
|
|
67
|
+
if (!node.body) {
|
|
68
|
+
ts.forEachChild(node, visit);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const name = node.name?.text ?? '<anon>';
|
|
72
|
+
const { line, column } = siteOf(node);
|
|
73
|
+
out.push({
|
|
74
|
+
label: `function:${name}`,
|
|
75
|
+
line,
|
|
76
|
+
column,
|
|
77
|
+
filePath: filePathProjectRel,
|
|
78
|
+
kind: 'function',
|
|
79
|
+
});
|
|
80
|
+
ts.forEachChild(node, visit);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (ts.isMethodDeclaration(node)) {
|
|
84
|
+
// Abstract / overload-signature methods have no body.
|
|
85
|
+
if (!node.body) {
|
|
86
|
+
ts.forEachChild(node, visit);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const cls = enclosingClass.at(-1) ?? '<anon-class>';
|
|
90
|
+
const nameNode = node.name;
|
|
91
|
+
let name;
|
|
92
|
+
if (ts.isIdentifier(nameNode))
|
|
93
|
+
name = nameNode.text;
|
|
94
|
+
else if (ts.isStringLiteral(nameNode))
|
|
95
|
+
name = nameNode.text;
|
|
96
|
+
else if (ts.isPrivateIdentifier(nameNode))
|
|
97
|
+
name = nameNode.text;
|
|
98
|
+
else
|
|
99
|
+
name = '<computed>';
|
|
100
|
+
const { line, column } = siteOf(node);
|
|
101
|
+
out.push({
|
|
102
|
+
label: `method:${cls}.${name}`,
|
|
103
|
+
line,
|
|
104
|
+
column,
|
|
105
|
+
filePath: filePathProjectRel,
|
|
106
|
+
kind: 'method',
|
|
107
|
+
});
|
|
108
|
+
ts.forEachChild(node, visit);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (ts.isConstructorDeclaration(node)) {
|
|
112
|
+
if (!node.body) {
|
|
113
|
+
ts.forEachChild(node, visit);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const cls = enclosingClass.at(-1) ?? '<anon-class>';
|
|
117
|
+
const { line, column } = siteOf(node);
|
|
118
|
+
out.push({
|
|
119
|
+
label: `constructor:${cls}`,
|
|
120
|
+
line,
|
|
121
|
+
column,
|
|
122
|
+
filePath: filePathProjectRel,
|
|
123
|
+
kind: 'constructor',
|
|
124
|
+
});
|
|
125
|
+
ts.forEachChild(node, visit);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (ts.isGetAccessor(node)) {
|
|
129
|
+
if (!node.body) {
|
|
130
|
+
ts.forEachChild(node, visit);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const cls = enclosingClass.at(-1) ?? '<anon-class>';
|
|
134
|
+
const nameNode = node.name;
|
|
135
|
+
const name = ts.isIdentifier(nameNode) || ts.isStringLiteral(nameNode) ? nameNode.text : '<computed>';
|
|
136
|
+
const { line, column } = siteOf(node);
|
|
137
|
+
out.push({
|
|
138
|
+
label: `get:${cls}.${name}`,
|
|
139
|
+
line,
|
|
140
|
+
column,
|
|
141
|
+
filePath: filePathProjectRel,
|
|
142
|
+
kind: 'getter',
|
|
143
|
+
});
|
|
144
|
+
ts.forEachChild(node, visit);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (ts.isSetAccessor(node)) {
|
|
148
|
+
if (!node.body) {
|
|
149
|
+
ts.forEachChild(node, visit);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const cls = enclosingClass.at(-1) ?? '<anon-class>';
|
|
153
|
+
const nameNode = node.name;
|
|
154
|
+
const name = ts.isIdentifier(nameNode) || ts.isStringLiteral(nameNode) ? nameNode.text : '<computed>';
|
|
155
|
+
const { line, column } = siteOf(node);
|
|
156
|
+
out.push({
|
|
157
|
+
label: `set:${cls}.${name}`,
|
|
158
|
+
line,
|
|
159
|
+
column,
|
|
160
|
+
filePath: filePathProjectRel,
|
|
161
|
+
kind: 'setter',
|
|
162
|
+
});
|
|
163
|
+
ts.forEachChild(node, visit);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (ts.isArrowFunction(node)) {
|
|
167
|
+
const { line, column } = siteOf(node);
|
|
168
|
+
out.push({
|
|
169
|
+
label: `arrow@${String(line)}:${String(column)}`,
|
|
170
|
+
line,
|
|
171
|
+
column,
|
|
172
|
+
filePath: filePathProjectRel,
|
|
173
|
+
kind: 'arrow',
|
|
174
|
+
});
|
|
175
|
+
ts.forEachChild(node, visit);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if (ts.isFunctionExpression(node)) {
|
|
179
|
+
const { line, column } = siteOf(node);
|
|
180
|
+
const name = node.name?.text ?? `fn-expr@${String(line)}:${String(column)}`;
|
|
181
|
+
out.push({
|
|
182
|
+
label: `function-expression:${name}`,
|
|
183
|
+
line,
|
|
184
|
+
column,
|
|
185
|
+
filePath: filePathProjectRel,
|
|
186
|
+
kind: 'function-expression',
|
|
187
|
+
});
|
|
188
|
+
ts.forEachChild(node, visit);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
ts.forEachChild(node, visit);
|
|
192
|
+
}
|
|
193
|
+
visit(sourceFile);
|
|
194
|
+
return out;
|
|
195
|
+
}
|
|
196
|
+
/** Reduce a graph occurrence to a (line, column, kind) site for comparison. */
|
|
197
|
+
function occToSite(occ) {
|
|
198
|
+
// Map graph's FunctionKind → the coarser kinds enumerateCallablesFromTs uses.
|
|
199
|
+
let kind = occ.kind;
|
|
200
|
+
if (occ.kind === 'function-declaration')
|
|
201
|
+
kind = 'function';
|
|
202
|
+
return { line: occ.line, column: occ.column, kind };
|
|
203
|
+
}
|
|
204
|
+
function siteKey(s) {
|
|
205
|
+
return `${s.kind}@${String(s.line)}:${String(s.column)}`;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* For a given file in the workspace, run graph's stage 1, run a parallel
|
|
209
|
+
* TS-Compiler-API enumeration, and return the symmetric difference of
|
|
210
|
+
* (line, column, kind) sites.
|
|
211
|
+
*/
|
|
212
|
+
function differentialFor(filePathProjectRel, projectDir) {
|
|
213
|
+
const discovery = discoverFiles({ projectDir });
|
|
214
|
+
const inv = buildCatalog({
|
|
215
|
+
projectDirAbs: discovery.projectDirAbs,
|
|
216
|
+
files: discovery.files,
|
|
217
|
+
compilerOptions: discovery.compilerOptions,
|
|
218
|
+
tsConfigPathAbs: discovery.tsConfigPathAbs,
|
|
219
|
+
});
|
|
220
|
+
const catalog = inv.catalog;
|
|
221
|
+
const targetSf = inv.program
|
|
222
|
+
.getSourceFiles()
|
|
223
|
+
.find((sf) => relative(discovery.projectDirAbs, sf.fileName).split(/[/\\]/).join('/') ===
|
|
224
|
+
filePathProjectRel);
|
|
225
|
+
if (!targetSf) {
|
|
226
|
+
throw new Error(`Could not find ${filePathProjectRel} in program; tsconfig may not include it.`);
|
|
227
|
+
}
|
|
228
|
+
const tsCallables = enumerateCallablesFromTs(targetSf, filePathProjectRel);
|
|
229
|
+
const tsSites = new Set(tsCallables.map((c) => siteKey(c)));
|
|
230
|
+
const graphOccs = [];
|
|
231
|
+
for (const occs of Object.values(catalog.functions)) {
|
|
232
|
+
for (const o of occs) {
|
|
233
|
+
// module-init is a graph-only synthesis; not a real callable from
|
|
234
|
+
// the TS-API perspective. Exclude from the differential.
|
|
235
|
+
if (o.kind === 'module-init')
|
|
236
|
+
continue;
|
|
237
|
+
if (o.filePath === filePathProjectRel)
|
|
238
|
+
graphOccs.push(o);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
const graphSites = new Set(graphOccs.map((o) => siteKey(occToSite(o))));
|
|
242
|
+
const onlyInTs = tsCallables.filter((c) => !graphSites.has(siteKey(c)));
|
|
243
|
+
const onlyInGraph = graphOccs.filter((o) => !tsSites.has(siteKey(occToSite(o))));
|
|
244
|
+
return {
|
|
245
|
+
onlyInTs,
|
|
246
|
+
onlyInGraph,
|
|
247
|
+
graphCount: graphOccs.length,
|
|
248
|
+
tsCount: tsCallables.length,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
const SAMPLES = [
|
|
252
|
+
{ packageDir: 'packages/cli', relativePath: 'src/index.ts' },
|
|
253
|
+
{ packageDir: 'packages/fitness/engine', relativePath: 'src/framework/define-check.ts' },
|
|
254
|
+
{ packageDir: 'packages/contracts', relativePath: 'src/types.ts' },
|
|
255
|
+
{ packageDir: 'packages/languages/lang-typescript', relativePath: 'src/ast-utilities.ts' },
|
|
256
|
+
// Layer 5 Phase 3 (audit 2026-05-22 F3) moved the FitView controller
|
|
257
|
+
// out of cli/ui into the fitness package as fit-runner.tsx; the new
|
|
258
|
+
// file is the JSX-rich sample that this differential test exercises.
|
|
259
|
+
{ packageDir: 'packages/fitness/engine', relativePath: 'src/cli/fit-runner.tsx' },
|
|
260
|
+
];
|
|
261
|
+
describe('Tier 2 — differential test against TS Compiler API on real workspace files', () => {
|
|
262
|
+
for (const sample of SAMPLES) {
|
|
263
|
+
it(`graph stage 1 finds the same callables as the TS API for ${sample.packageDir}/${sample.relativePath}`, () => {
|
|
264
|
+
const projectDir = resolve(REPO_ROOT, sample.packageDir);
|
|
265
|
+
const { onlyInTs, onlyInGraph, graphCount, tsCount } = differentialFor(sample.relativePath, projectDir);
|
|
266
|
+
const tsLines = onlyInTs
|
|
267
|
+
.map((c) => `${c.label} at ${String(c.line)}:${String(c.column)}`)
|
|
268
|
+
.join('\n - ');
|
|
269
|
+
const graphLines = onlyInGraph
|
|
270
|
+
.map((o) => `${o.kind} ${o.simpleName} at ${String(o.line)}:${String(o.column)}`)
|
|
271
|
+
.join('\n - ');
|
|
272
|
+
const missedLine = onlyInTs.length > 0
|
|
273
|
+
? `Missed by graph (${String(onlyInTs.length)}):\n - ${tsLines}`
|
|
274
|
+
: 'Missed by graph: none';
|
|
275
|
+
const spuriousLine = onlyInGraph.length > 0
|
|
276
|
+
? `Spurious in graph (${String(onlyInGraph.length)}):\n - ${graphLines}`
|
|
277
|
+
: 'Spurious in graph: none';
|
|
278
|
+
const detail = [
|
|
279
|
+
`Sample: ${sample.packageDir}/${sample.relativePath}`,
|
|
280
|
+
`graph found: ${String(graphCount)} callables`,
|
|
281
|
+
`TS API found: ${String(tsCount)} callables`,
|
|
282
|
+
missedLine,
|
|
283
|
+
spuriousLine,
|
|
284
|
+
].join('\n');
|
|
285
|
+
// Sanity floor: types-only files (e.g. types.ts) may have zero
|
|
286
|
+
// callables. All other samples should have at least one.
|
|
287
|
+
expect(graphCount, detail).toBe(tsCount);
|
|
288
|
+
expect(onlyInTs, `\n${detail}`).toEqual([]);
|
|
289
|
+
expect(onlyInGraph, `\n${detail}`).toEqual([]);
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
it('coverage sanity: the 5 sample files together expose a substantial number of callables', () => {
|
|
293
|
+
// Make sure our chosen sample is non-trivial — i.e. we're actually
|
|
294
|
+
// exercising graph's detection on real code, not just empty type files.
|
|
295
|
+
// Empirically observed callable counts on the post-Phase-3 layout
|
|
296
|
+
// (the FitView controller moved from cli/ui/components into
|
|
297
|
+
// fitness/cli/fit-runner.tsx). The exact totals are not pinned —
|
|
298
|
+
// see the sanity floor below — but the spread roughly mirrors:
|
|
299
|
+
// packages/cli/src/index.ts ~26
|
|
300
|
+
// packages/fitness/engine/src/framework/define-check.ts ~12
|
|
301
|
+
// packages/contracts/src/types.ts 0 (types-only)
|
|
302
|
+
// packages/languages/lang-typescript/src/ast-utilities.ts ~20
|
|
303
|
+
// packages/fitness/engine/src/cli/fit-runner.tsx >0 (large JSX file)
|
|
304
|
+
const perFile = {};
|
|
305
|
+
let totalCallables = 0;
|
|
306
|
+
for (const sample of SAMPLES) {
|
|
307
|
+
const projectDir = resolve(REPO_ROOT, sample.packageDir);
|
|
308
|
+
const { tsCount } = differentialFor(sample.relativePath, projectDir);
|
|
309
|
+
perFile[`${sample.packageDir}/${sample.relativePath}`] = tsCount;
|
|
310
|
+
totalCallables += tsCount;
|
|
311
|
+
}
|
|
312
|
+
const detail = JSON.stringify(perFile, null, 2);
|
|
313
|
+
expect(totalCallables, detail).toBeGreaterThanOrEqual(30);
|
|
314
|
+
// Belt-and-braces: at least 4 of the 5 samples are non-empty.
|
|
315
|
+
const nonEmpty = Object.values(perFile).filter((n) => n > 0).length;
|
|
316
|
+
expect(nonEmpty, detail).toBeGreaterThanOrEqual(4);
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
//# sourceMappingURL=inventory-differential.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory-differential.test.js","sourceRoot":"","sources":["../../src/__tests__/inventory-differential.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hashFunctionBody tests (DRY-4).
|
|
3
|
+
*
|
|
4
|
+
* Per spec §2.2:
|
|
5
|
+
* - Same body in two files → same hash
|
|
6
|
+
* - Whitespace-only difference → same hash
|
|
7
|
+
* - Comment-only difference → same hash (stripComments runs first)
|
|
8
|
+
* - One-character body change → different hash
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=hash-body.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-body.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/inventory-helpers/hash-body.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hashFunctionBody tests (DRY-4).
|
|
3
|
+
*
|
|
4
|
+
* Per spec §2.2:
|
|
5
|
+
* - Same body in two files → same hash
|
|
6
|
+
* - Whitespace-only difference → same hash
|
|
7
|
+
* - Comment-only difference → same hash (stripComments runs first)
|
|
8
|
+
* - One-character body change → different hash
|
|
9
|
+
*/
|
|
10
|
+
import { describe, expect, it } from 'vitest';
|
|
11
|
+
import { hashSyntheticBody } from '../../inventory-helpers/hash-body.js';
|
|
12
|
+
describe('hashFunctionBody (DRY-4)', () => {
|
|
13
|
+
it('produces identical hashes for identical bodies', () => {
|
|
14
|
+
const a = hashSyntheticBody('function foo() { return 1; }');
|
|
15
|
+
const b = hashSyntheticBody('function foo() { return 1; }');
|
|
16
|
+
expect(a).toBe(b);
|
|
17
|
+
});
|
|
18
|
+
it('ignores whitespace-only differences', () => {
|
|
19
|
+
const a = hashSyntheticBody('function foo() { return 1; }');
|
|
20
|
+
const b = hashSyntheticBody('function foo() { return 1; }');
|
|
21
|
+
expect(a).toBe(b);
|
|
22
|
+
});
|
|
23
|
+
it('ignores comment-only differences', () => {
|
|
24
|
+
const a = hashSyntheticBody('function foo() { return 1; }');
|
|
25
|
+
const b = hashSyntheticBody('function foo() { /* hi */ return 1; }');
|
|
26
|
+
expect(a).toBe(b);
|
|
27
|
+
});
|
|
28
|
+
it('reflects one-character body changes', () => {
|
|
29
|
+
const a = hashSyntheticBody('function foo() { return 1; }');
|
|
30
|
+
const b = hashSyntheticBody('function foo() { return 2; }');
|
|
31
|
+
expect(a).not.toBe(b);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=hash-body.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-body.test.js","sourceRoot":"","sources":["../../../src/__tests__/inventory-helpers/hash-body.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAG,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;QAC5D,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,GAAG,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,iBAAiB,CAAC,kCAAkC,CAAC,CAAC;QAChE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAG,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,iBAAiB,CAAC,uCAAuC,CAAC,CAAC;QACrE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,GAAG,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;QAC5D,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* synthesizeName tests (DRY-4).
|
|
3
|
+
*
|
|
4
|
+
* Per spec §2.2: angle-bracketed names cannot collide with valid TS
|
|
5
|
+
* identifiers, so the catalog can mix synthesized + real names in
|
|
6
|
+
* the same map.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=synthesize-name.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesize-name.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/inventory-helpers/synthesize-name.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* synthesizeName tests (DRY-4).
|
|
3
|
+
*
|
|
4
|
+
* Per spec §2.2: angle-bracketed names cannot collide with valid TS
|
|
5
|
+
* identifiers, so the catalog can mix synthesized + real names in
|
|
6
|
+
* the same map.
|
|
7
|
+
*/
|
|
8
|
+
import { describe, expect, it } from 'vitest';
|
|
9
|
+
import { synthesizeArrowName, synthesizeFunctionExpressionName, synthesizeModuleInitName, } from '../../inventory-helpers/synthesize-name.js';
|
|
10
|
+
describe('synthesizeName (DRY-4)', () => {
|
|
11
|
+
it('arrow names are angle-bracketed with file:line:column', () => {
|
|
12
|
+
const name = synthesizeArrowName({ filePath: 'src/foo.ts', line: 42, column: 7 });
|
|
13
|
+
expect(name).toBe('<arrow:src/foo.ts:42:7>');
|
|
14
|
+
});
|
|
15
|
+
it('function-expression names are angle-bracketed', () => {
|
|
16
|
+
const name = synthesizeFunctionExpressionName({ filePath: 'a.ts', line: 1, column: 0 });
|
|
17
|
+
expect(name).toBe('<fn-expr:a.ts:1:0>');
|
|
18
|
+
});
|
|
19
|
+
it('module-init name is angle-bracketed with file', () => {
|
|
20
|
+
const name = synthesizeModuleInitName('src/foo.ts');
|
|
21
|
+
expect(name).toBe('<module-init:src/foo.ts>');
|
|
22
|
+
});
|
|
23
|
+
it('synthesized names cannot collide with valid TS identifiers', () => {
|
|
24
|
+
// A valid TS identifier never contains '<' or '>'.
|
|
25
|
+
expect(synthesizeArrowName({ filePath: 'a.ts', line: 1, column: 0 })).toMatch(/^<.+>$/);
|
|
26
|
+
expect(synthesizeFunctionExpressionName({ filePath: 'a.ts', line: 1, column: 0 })).toMatch(/^<.+>$/);
|
|
27
|
+
expect(synthesizeModuleInitName('a.ts')).toMatch(/^<.+>$/);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=synthesize-name.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesize-name.test.js","sourceRoot":"","sources":["../../../src/__tests__/inventory-helpers/synthesize-name.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EACL,mBAAmB,EACnB,gCAAgC,EAChC,wBAAwB,GACzB,MAAM,4CAA4C,CAAC;AAEpD,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,IAAI,GAAG,gCAAgC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,IAAI,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,mDAAmD;QACnD,MAAM,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxF,MAAM,CAAC,gCAAgC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CACxF,QAAQ,CACT,CAAC;QACF,MAAM,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inventory property-based tests (Tier 2).
|
|
3
|
+
*
|
|
4
|
+
* These tests assert invariants over the catalog rather than membership
|
|
5
|
+
* of specific entries. Every catalog produced by stage 1 is expected to
|
|
6
|
+
* satisfy these properties for any TypeScript input — they are the
|
|
7
|
+
* contract the catalog promises its consumers.
|
|
8
|
+
*
|
|
9
|
+
* Properties exercised:
|
|
10
|
+
*
|
|
11
|
+
* 1. bodyHash determinism by content — same body → same hash, twice.
|
|
12
|
+
* 2. bodyHash insensitivity to whitespace inside the body.
|
|
13
|
+
* 3. bodyHash sensitivity to a single identifier change.
|
|
14
|
+
* 4. bodyHash collision for identical bodies under different names
|
|
15
|
+
* (the property the `duplicated-function-body` rule depends on).
|
|
16
|
+
* 5. simpleName synthesis determinism for arrow callbacks.
|
|
17
|
+
* 6. catalog closure: every CallEdge.to bodyHash exists in the catalog
|
|
18
|
+
* (or is empty for unresolved calls).
|
|
19
|
+
* 7. simpleName + qualifiedName are both populated and non-empty
|
|
20
|
+
* for every occurrence.
|
|
21
|
+
* 8. inTestFile is correct for files matching test patterns.
|
|
22
|
+
*/
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=inventory-property-tests.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory-property-tests.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/inventory-property-tests.test.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
|