@zigrivers/scaffold 3.25.1 → 3.27.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/README.md +139 -7
- package/content/knowledge/web3/web3-access-control.md +189 -0
- package/content/knowledge/web3/web3-architecture.md +162 -0
- package/content/knowledge/web3/web3-audit-workflow.md +151 -0
- package/content/knowledge/web3/web3-common-vulnerabilities.md +171 -0
- package/content/knowledge/web3/web3-conventions.md +162 -0
- package/content/knowledge/web3/web3-deployment-and-verification.md +216 -0
- package/content/knowledge/web3/web3-dev-environment.md +150 -0
- package/content/knowledge/web3/web3-gas-optimization.md +165 -0
- package/content/knowledge/web3/web3-oracles-and-external-data.md +155 -0
- package/content/knowledge/web3/web3-project-structure.md +212 -0
- package/content/knowledge/web3/web3-requirements.md +152 -0
- package/content/knowledge/web3/web3-security.md +163 -0
- package/content/knowledge/web3/web3-testing.md +180 -0
- package/content/knowledge/web3/web3-upgradeability.md +189 -0
- package/content/methodology/web3-overlay.yml +40 -0
- package/dist/cli/commands/complete.d.ts.map +1 -1
- package/dist/cli/commands/complete.js +6 -13
- package/dist/cli/commands/complete.js.map +1 -1
- package/dist/cli/commands/complete.test.js +18 -0
- package/dist/cli/commands/complete.test.js.map +1 -1
- package/dist/cli/commands/knowledge.test.js +4 -4
- package/dist/cli/commands/knowledge.test.js.map +1 -1
- package/dist/cli/commands/observe.d.ts +58 -0
- package/dist/cli/commands/observe.d.ts.map +1 -0
- package/dist/cli/commands/observe.js +430 -0
- package/dist/cli/commands/observe.js.map +1 -0
- package/dist/cli/commands/observe.test.d.ts +2 -0
- package/dist/cli/commands/observe.test.d.ts.map +1 -0
- package/dist/cli/commands/observe.test.js +452 -0
- package/dist/cli/commands/observe.test.js.map +1 -0
- package/dist/cli/commands/run.js +3 -3
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/run.test.js +1 -1
- package/dist/cli/commands/run.test.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/schema.d.ts +672 -126
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +8 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/config/schema.test.js +2 -2
- package/dist/config/schema.test.js.map +1 -1
- package/dist/config/validators/index.d.ts.map +1 -1
- package/dist/config/validators/index.js +2 -0
- package/dist/config/validators/index.js.map +1 -1
- package/dist/config/validators/web3.d.ts +4 -0
- package/dist/config/validators/web3.d.ts.map +1 -0
- package/dist/config/validators/web3.js +15 -0
- package/dist/config/validators/web3.js.map +1 -0
- package/dist/e2e/project-type-overlays.test.js +76 -0
- package/dist/e2e/project-type-overlays.test.js.map +1 -1
- package/dist/observability/adapters/audit-history.d.ts +17 -0
- package/dist/observability/adapters/audit-history.d.ts.map +1 -0
- package/dist/observability/adapters/audit-history.js +113 -0
- package/dist/observability/adapters/audit-history.js.map +1 -0
- package/dist/observability/adapters/audit-history.test.d.ts +2 -0
- package/dist/observability/adapters/audit-history.test.d.ts.map +1 -0
- package/dist/observability/adapters/audit-history.test.js +137 -0
- package/dist/observability/adapters/audit-history.test.js.map +1 -0
- package/dist/observability/adapters/beads.d.ts +9 -0
- package/dist/observability/adapters/beads.d.ts.map +1 -0
- package/dist/observability/adapters/beads.js +40 -0
- package/dist/observability/adapters/beads.js.map +1 -0
- package/dist/observability/adapters/beads.test.d.ts +2 -0
- package/dist/observability/adapters/beads.test.d.ts.map +1 -0
- package/dist/observability/adapters/beads.test.js +25 -0
- package/dist/observability/adapters/beads.test.js.map +1 -0
- package/dist/observability/adapters/gh.d.ts +27 -0
- package/dist/observability/adapters/gh.d.ts.map +1 -0
- package/dist/observability/adapters/gh.js +118 -0
- package/dist/observability/adapters/gh.js.map +1 -0
- package/dist/observability/adapters/gh.test.d.ts +2 -0
- package/dist/observability/adapters/gh.test.d.ts.map +1 -0
- package/dist/observability/adapters/gh.test.js +79 -0
- package/dist/observability/adapters/gh.test.js.map +1 -0
- package/dist/observability/adapters/git.d.ts +24 -0
- package/dist/observability/adapters/git.d.ts.map +1 -0
- package/dist/observability/adapters/git.js +110 -0
- package/dist/observability/adapters/git.js.map +1 -0
- package/dist/observability/adapters/git.test.d.ts +2 -0
- package/dist/observability/adapters/git.test.d.ts.map +1 -0
- package/dist/observability/adapters/git.test.js +66 -0
- package/dist/observability/adapters/git.test.js.map +1 -0
- package/dist/observability/adapters/mmr.d.ts +15 -0
- package/dist/observability/adapters/mmr.d.ts.map +1 -0
- package/dist/observability/adapters/mmr.js +85 -0
- package/dist/observability/adapters/mmr.js.map +1 -0
- package/dist/observability/adapters/mmr.test.d.ts +2 -0
- package/dist/observability/adapters/mmr.test.d.ts.map +1 -0
- package/dist/observability/adapters/mmr.test.js +55 -0
- package/dist/observability/adapters/mmr.test.js.map +1 -0
- package/dist/observability/adapters/pipeline-docs.d.ts +8 -0
- package/dist/observability/adapters/pipeline-docs.d.ts.map +1 -0
- package/dist/observability/adapters/pipeline-docs.js +68 -0
- package/dist/observability/adapters/pipeline-docs.js.map +1 -0
- package/dist/observability/adapters/pipeline-docs.test.d.ts +2 -0
- package/dist/observability/adapters/pipeline-docs.test.d.ts.map +1 -0
- package/dist/observability/adapters/pipeline-docs.test.js +58 -0
- package/dist/observability/adapters/pipeline-docs.test.js.map +1 -0
- package/dist/observability/adapters/state.d.ts +21 -0
- package/dist/observability/adapters/state.d.ts.map +1 -0
- package/dist/observability/adapters/state.js +87 -0
- package/dist/observability/adapters/state.js.map +1 -0
- package/dist/observability/adapters/state.test.d.ts +2 -0
- package/dist/observability/adapters/state.test.d.ts.map +1 -0
- package/dist/observability/adapters/state.test.js +92 -0
- package/dist/observability/adapters/state.test.js.map +1 -0
- package/dist/observability/adapters/tests.d.ts +20 -0
- package/dist/observability/adapters/tests.d.ts.map +1 -0
- package/dist/observability/adapters/tests.js +52 -0
- package/dist/observability/adapters/tests.js.map +1 -0
- package/dist/observability/adapters/tests.test.d.ts +2 -0
- package/dist/observability/adapters/tests.test.d.ts.map +1 -0
- package/dist/observability/adapters/tests.test.js +66 -0
- package/dist/observability/adapters/tests.test.js.map +1 -0
- package/dist/observability/adapters/types.d.ts +7 -0
- package/dist/observability/adapters/types.d.ts.map +1 -0
- package/dist/observability/adapters/types.js +2 -0
- package/dist/observability/adapters/types.js.map +1 -0
- package/dist/observability/checks/lens-a-tdd.d.ts +3 -0
- package/dist/observability/checks/lens-a-tdd.d.ts.map +1 -0
- package/dist/observability/checks/lens-a-tdd.js +34 -0
- package/dist/observability/checks/lens-a-tdd.js.map +1 -0
- package/dist/observability/checks/lens-a-tdd.test.d.ts +2 -0
- package/dist/observability/checks/lens-a-tdd.test.d.ts.map +1 -0
- package/dist/observability/checks/lens-a-tdd.test.js +62 -0
- package/dist/observability/checks/lens-a-tdd.test.js.map +1 -0
- package/dist/observability/checks/lens-b-ac-coverage.d.ts +3 -0
- package/dist/observability/checks/lens-b-ac-coverage.d.ts.map +1 -0
- package/dist/observability/checks/lens-b-ac-coverage.js +63 -0
- package/dist/observability/checks/lens-b-ac-coverage.js.map +1 -0
- package/dist/observability/checks/lens-b-ac-coverage.test.d.ts +2 -0
- package/dist/observability/checks/lens-b-ac-coverage.test.d.ts.map +1 -0
- package/dist/observability/checks/lens-b-ac-coverage.test.js +59 -0
- package/dist/observability/checks/lens-b-ac-coverage.test.js.map +1 -0
- package/dist/observability/checks/lens-c-standards.d.ts +3 -0
- package/dist/observability/checks/lens-c-standards.d.ts.map +1 -0
- package/dist/observability/checks/lens-c-standards.js +104 -0
- package/dist/observability/checks/lens-c-standards.js.map +1 -0
- package/dist/observability/checks/lens-c-standards.test.d.ts +2 -0
- package/dist/observability/checks/lens-c-standards.test.d.ts.map +1 -0
- package/dist/observability/checks/lens-c-standards.test.js +79 -0
- package/dist/observability/checks/lens-c-standards.test.js.map +1 -0
- package/dist/observability/checks/lens-d-stack.d.ts +3 -0
- package/dist/observability/checks/lens-d-stack.d.ts.map +1 -0
- package/dist/observability/checks/lens-d-stack.js +108 -0
- package/dist/observability/checks/lens-d-stack.js.map +1 -0
- package/dist/observability/checks/lens-d-stack.test.d.ts +2 -0
- package/dist/observability/checks/lens-d-stack.test.d.ts.map +1 -0
- package/dist/observability/checks/lens-d-stack.test.js +60 -0
- package/dist/observability/checks/lens-d-stack.test.js.map +1 -0
- package/dist/observability/checks/lens-e-design.d.ts +3 -0
- package/dist/observability/checks/lens-e-design.d.ts.map +1 -0
- package/dist/observability/checks/lens-e-design.js +76 -0
- package/dist/observability/checks/lens-e-design.js.map +1 -0
- package/dist/observability/checks/lens-e-design.test.d.ts +2 -0
- package/dist/observability/checks/lens-e-design.test.d.ts.map +1 -0
- package/dist/observability/checks/lens-e-design.test.js +85 -0
- package/dist/observability/checks/lens-e-design.test.js.map +1 -0
- package/dist/observability/checks/lens-f-scope.d.ts +3 -0
- package/dist/observability/checks/lens-f-scope.d.ts.map +1 -0
- package/dist/observability/checks/lens-f-scope.js +92 -0
- package/dist/observability/checks/lens-f-scope.js.map +1 -0
- package/dist/observability/checks/lens-f-scope.test.d.ts +2 -0
- package/dist/observability/checks/lens-f-scope.test.d.ts.map +1 -0
- package/dist/observability/checks/lens-f-scope.test.js +63 -0
- package/dist/observability/checks/lens-f-scope.test.js.map +1 -0
- package/dist/observability/checks/lens-g-decisions.d.ts +3 -0
- package/dist/observability/checks/lens-g-decisions.d.ts.map +1 -0
- package/dist/observability/checks/lens-g-decisions.js +139 -0
- package/dist/observability/checks/lens-g-decisions.js.map +1 -0
- package/dist/observability/checks/lens-g-decisions.test.d.ts +2 -0
- package/dist/observability/checks/lens-g-decisions.test.d.ts.map +1 -0
- package/dist/observability/checks/lens-g-decisions.test.js +118 -0
- package/dist/observability/checks/lens-g-decisions.test.js.map +1 -0
- package/dist/observability/checks/lens-h-cross-doc.d.ts +3 -0
- package/dist/observability/checks/lens-h-cross-doc.d.ts.map +1 -0
- package/dist/observability/checks/lens-h-cross-doc.js +322 -0
- package/dist/observability/checks/lens-h-cross-doc.js.map +1 -0
- package/dist/observability/checks/lens-h-cross-doc.test.d.ts +2 -0
- package/dist/observability/checks/lens-h-cross-doc.test.d.ts.map +1 -0
- package/dist/observability/checks/lens-h-cross-doc.test.js +174 -0
- package/dist/observability/checks/lens-h-cross-doc.test.js.map +1 -0
- package/dist/observability/engine/abort-snapshot.d.ts +10 -0
- package/dist/observability/engine/abort-snapshot.d.ts.map +1 -0
- package/dist/observability/engine/abort-snapshot.js +36 -0
- package/dist/observability/engine/abort-snapshot.js.map +1 -0
- package/dist/observability/engine/abort-snapshot.test.d.ts +2 -0
- package/dist/observability/engine/abort-snapshot.test.d.ts.map +1 -0
- package/dist/observability/engine/abort-snapshot.test.js +66 -0
- package/dist/observability/engine/abort-snapshot.test.js.map +1 -0
- package/dist/observability/engine/api.d.ts +24 -0
- package/dist/observability/engine/api.d.ts.map +1 -0
- package/dist/observability/engine/api.js +203 -0
- package/dist/observability/engine/api.js.map +1 -0
- package/dist/observability/engine/api.test.d.ts +2 -0
- package/dist/observability/engine/api.test.d.ts.map +1 -0
- package/dist/observability/engine/api.test.js +174 -0
- package/dist/observability/engine/api.test.js.map +1 -0
- package/dist/observability/engine/checks/findings-aggregator.d.ts +6 -0
- package/dist/observability/engine/checks/findings-aggregator.d.ts.map +1 -0
- package/dist/observability/engine/checks/findings-aggregator.js +56 -0
- package/dist/observability/engine/checks/findings-aggregator.js.map +1 -0
- package/dist/observability/engine/checks/findings-aggregator.test.d.ts +2 -0
- package/dist/observability/engine/checks/findings-aggregator.test.d.ts.map +1 -0
- package/dist/observability/engine/checks/findings-aggregator.test.js +63 -0
- package/dist/observability/engine/checks/findings-aggregator.test.js.map +1 -0
- package/dist/observability/engine/checks/fix-threshold.d.ts +3 -0
- package/dist/observability/engine/checks/fix-threshold.d.ts.map +1 -0
- package/dist/observability/engine/checks/fix-threshold.js +24 -0
- package/dist/observability/engine/checks/fix-threshold.js.map +1 -0
- package/dist/observability/engine/checks/fix-threshold.test.d.ts +2 -0
- package/dist/observability/engine/checks/fix-threshold.test.d.ts.map +1 -0
- package/dist/observability/engine/checks/fix-threshold.test.js +29 -0
- package/dist/observability/engine/checks/fix-threshold.test.js.map +1 -0
- package/dist/observability/engine/checks/observability-config.d.ts +64 -0
- package/dist/observability/engine/checks/observability-config.d.ts.map +1 -0
- package/dist/observability/engine/checks/observability-config.js +56 -0
- package/dist/observability/engine/checks/observability-config.js.map +1 -0
- package/dist/observability/engine/checks/observability-config.test.d.ts +2 -0
- package/dist/observability/engine/checks/observability-config.test.d.ts.map +1 -0
- package/dist/observability/engine/checks/observability-config.test.js +39 -0
- package/dist/observability/engine/checks/observability-config.test.js.map +1 -0
- package/dist/observability/engine/checks/registry.d.ts +19 -0
- package/dist/observability/engine/checks/registry.d.ts.map +1 -0
- package/dist/observability/engine/checks/registry.js +44 -0
- package/dist/observability/engine/checks/registry.js.map +1 -0
- package/dist/observability/engine/checks/registry.test.d.ts +2 -0
- package/dist/observability/engine/checks/registry.test.d.ts.map +1 -0
- package/dist/observability/engine/checks/registry.test.js +23 -0
- package/dist/observability/engine/checks/registry.test.js.map +1 -0
- package/dist/observability/engine/checks/runner.d.ts +23 -0
- package/dist/observability/engine/checks/runner.d.ts.map +1 -0
- package/dist/observability/engine/checks/runner.js +66 -0
- package/dist/observability/engine/checks/runner.js.map +1 -0
- package/dist/observability/engine/checks/runner.test.d.ts +2 -0
- package/dist/observability/engine/checks/runner.test.d.ts.map +1 -0
- package/dist/observability/engine/checks/runner.test.js +95 -0
- package/dist/observability/engine/checks/runner.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/component-parser.d.ts +3 -0
- package/dist/observability/engine/doc-graph/component-parser.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/component-parser.js +42 -0
- package/dist/observability/engine/doc-graph/component-parser.js.map +1 -0
- package/dist/observability/engine/doc-graph/component-parser.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/component-parser.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/component-parser.test.js +40 -0
- package/dist/observability/engine/doc-graph/component-parser.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/component-use-detector.d.ts +8 -0
- package/dist/observability/engine/doc-graph/component-use-detector.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/component-use-detector.js +62 -0
- package/dist/observability/engine/doc-graph/component-use-detector.js.map +1 -0
- package/dist/observability/engine/doc-graph/component-use-detector.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/component-use-detector.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/component-use-detector.test.js +38 -0
- package/dist/observability/engine/doc-graph/component-use-detector.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/decision-parser.d.ts +3 -0
- package/dist/observability/engine/doc-graph/decision-parser.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/decision-parser.js +60 -0
- package/dist/observability/engine/doc-graph/decision-parser.js.map +1 -0
- package/dist/observability/engine/doc-graph/decision-parser.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/decision-parser.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/decision-parser.test.js +65 -0
- package/dist/observability/engine/doc-graph/decision-parser.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/design-props.d.ts +9 -0
- package/dist/observability/engine/doc-graph/design-props.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/design-props.js +50 -0
- package/dist/observability/engine/doc-graph/design-props.js.map +1 -0
- package/dist/observability/engine/doc-graph/edge-builder.d.ts +28 -0
- package/dist/observability/engine/doc-graph/edge-builder.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/edge-builder.js +75 -0
- package/dist/observability/engine/doc-graph/edge-builder.js.map +1 -0
- package/dist/observability/engine/doc-graph/edge-builder.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/edge-builder.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/edge-builder.test.js +124 -0
- package/dist/observability/engine/doc-graph/edge-builder.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/feature-parser.d.ts +3 -0
- package/dist/observability/engine/doc-graph/feature-parser.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/feature-parser.js +78 -0
- package/dist/observability/engine/doc-graph/feature-parser.js.map +1 -0
- package/dist/observability/engine/doc-graph/feature-parser.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/feature-parser.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/feature-parser.test.js +51 -0
- package/dist/observability/engine/doc-graph/feature-parser.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/index.d.ts +3 -0
- package/dist/observability/engine/doc-graph/index.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/index.js +138 -0
- package/dist/observability/engine/doc-graph/index.js.map +1 -0
- package/dist/observability/engine/doc-graph/index.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/index.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/index.test.js +82 -0
- package/dist/observability/engine/doc-graph/index.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/parse-markdown.d.ts +15 -0
- package/dist/observability/engine/doc-graph/parse-markdown.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/parse-markdown.js +79 -0
- package/dist/observability/engine/doc-graph/parse-markdown.js.map +1 -0
- package/dist/observability/engine/doc-graph/parse-markdown.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/parse-markdown.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/parse-markdown.test.js +50 -0
- package/dist/observability/engine/doc-graph/parse-markdown.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/plan-task-parser.d.ts +3 -0
- package/dist/observability/engine/doc-graph/plan-task-parser.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/plan-task-parser.js +38 -0
- package/dist/observability/engine/doc-graph/plan-task-parser.js.map +1 -0
- package/dist/observability/engine/doc-graph/plan-task-parser.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/plan-task-parser.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/plan-task-parser.test.js +38 -0
- package/dist/observability/engine/doc-graph/plan-task-parser.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/playbook-task-parser.d.ts +3 -0
- package/dist/observability/engine/doc-graph/playbook-task-parser.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/playbook-task-parser.js +40 -0
- package/dist/observability/engine/doc-graph/playbook-task-parser.js.map +1 -0
- package/dist/observability/engine/doc-graph/playbook-task-parser.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/playbook-task-parser.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/playbook-task-parser.test.js +31 -0
- package/dist/observability/engine/doc-graph/playbook-task-parser.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/rule-parser.d.ts +3 -0
- package/dist/observability/engine/doc-graph/rule-parser.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/rule-parser.js +65 -0
- package/dist/observability/engine/doc-graph/rule-parser.js.map +1 -0
- package/dist/observability/engine/doc-graph/rule-parser.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/rule-parser.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/rule-parser.test.js +44 -0
- package/dist/observability/engine/doc-graph/rule-parser.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/story-parser.d.ts +8 -0
- package/dist/observability/engine/doc-graph/story-parser.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/story-parser.js +109 -0
- package/dist/observability/engine/doc-graph/story-parser.js.map +1 -0
- package/dist/observability/engine/doc-graph/story-parser.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/story-parser.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/story-parser.test.js +66 -0
- package/dist/observability/engine/doc-graph/story-parser.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/test-discovery.d.ts +3 -0
- package/dist/observability/engine/doc-graph/test-discovery.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/test-discovery.js +122 -0
- package/dist/observability/engine/doc-graph/test-discovery.js.map +1 -0
- package/dist/observability/engine/doc-graph/test-discovery.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/test-discovery.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/test-discovery.test.js +39 -0
- package/dist/observability/engine/doc-graph/test-discovery.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/token-parser.d.ts +3 -0
- package/dist/observability/engine/doc-graph/token-parser.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/token-parser.js +67 -0
- package/dist/observability/engine/doc-graph/token-parser.js.map +1 -0
- package/dist/observability/engine/doc-graph/token-parser.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/token-parser.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/token-parser.test.js +39 -0
- package/dist/observability/engine/doc-graph/token-parser.test.js.map +1 -0
- package/dist/observability/engine/doc-graph/token-use-detector.d.ts +10 -0
- package/dist/observability/engine/doc-graph/token-use-detector.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/token-use-detector.js +105 -0
- package/dist/observability/engine/doc-graph/token-use-detector.js.map +1 -0
- package/dist/observability/engine/doc-graph/token-use-detector.test.d.ts +2 -0
- package/dist/observability/engine/doc-graph/token-use-detector.test.d.ts.map +1 -0
- package/dist/observability/engine/doc-graph/token-use-detector.test.js +60 -0
- package/dist/observability/engine/doc-graph/token-use-detector.test.js.map +1 -0
- package/dist/observability/engine/event-schemas.d.ts +12 -0
- package/dist/observability/engine/event-schemas.d.ts.map +1 -0
- package/dist/observability/engine/event-schemas.js +182 -0
- package/dist/observability/engine/event-schemas.js.map +1 -0
- package/dist/observability/engine/event-schemas.test.d.ts +2 -0
- package/dist/observability/engine/event-schemas.test.d.ts.map +1 -0
- package/dist/observability/engine/event-schemas.test.js +200 -0
- package/dist/observability/engine/event-schemas.test.js.map +1 -0
- package/dist/observability/engine/fix-agent-dispatcher.d.ts +19 -0
- package/dist/observability/engine/fix-agent-dispatcher.d.ts.map +1 -0
- package/dist/observability/engine/fix-agent-dispatcher.js +88 -0
- package/dist/observability/engine/fix-agent-dispatcher.js.map +1 -0
- package/dist/observability/engine/fix-agent-dispatcher.test.d.ts +2 -0
- package/dist/observability/engine/fix-agent-dispatcher.test.d.ts.map +1 -0
- package/dist/observability/engine/fix-agent-dispatcher.test.js +54 -0
- package/dist/observability/engine/fix-agent-dispatcher.test.js.map +1 -0
- package/dist/observability/engine/fix-flow.d.ts +30 -0
- package/dist/observability/engine/fix-flow.d.ts.map +1 -0
- package/dist/observability/engine/fix-flow.js +105 -0
- package/dist/observability/engine/fix-flow.js.map +1 -0
- package/dist/observability/engine/fix-flow.test.d.ts +2 -0
- package/dist/observability/engine/fix-flow.test.d.ts.map +1 -0
- package/dist/observability/engine/fix-flow.test.js +127 -0
- package/dist/observability/engine/fix-flow.test.js.map +1 -0
- package/dist/observability/engine/fix-plan.d.ts +3 -0
- package/dist/observability/engine/fix-plan.d.ts.map +1 -0
- package/dist/observability/engine/fix-plan.js +13 -0
- package/dist/observability/engine/fix-plan.js.map +1 -0
- package/dist/observability/engine/fix-plan.test.d.ts +2 -0
- package/dist/observability/engine/fix-plan.test.d.ts.map +1 -0
- package/dist/observability/engine/fix-plan.test.js +44 -0
- package/dist/observability/engine/fix-plan.test.js.map +1 -0
- package/dist/observability/engine/harvester.d.ts +16 -0
- package/dist/observability/engine/harvester.d.ts.map +1 -0
- package/dist/observability/engine/harvester.js +106 -0
- package/dist/observability/engine/harvester.js.map +1 -0
- package/dist/observability/engine/harvester.test.d.ts +2 -0
- package/dist/observability/engine/harvester.test.d.ts.map +1 -0
- package/dist/observability/engine/harvester.test.js +99 -0
- package/dist/observability/engine/harvester.test.js.map +1 -0
- package/dist/observability/engine/identity.d.ts +6 -0
- package/dist/observability/engine/identity.d.ts.map +1 -0
- package/dist/observability/engine/identity.js +50 -0
- package/dist/observability/engine/identity.js.map +1 -0
- package/dist/observability/engine/identity.test.d.ts +2 -0
- package/dist/observability/engine/identity.test.d.ts.map +1 -0
- package/dist/observability/engine/identity.test.js +29 -0
- package/dist/observability/engine/identity.test.js.map +1 -0
- package/dist/observability/engine/ledger-writer.d.ts +10 -0
- package/dist/observability/engine/ledger-writer.d.ts.map +1 -0
- package/dist/observability/engine/ledger-writer.js +50 -0
- package/dist/observability/engine/ledger-writer.js.map +1 -0
- package/dist/observability/engine/ledger-writer.test.d.ts +2 -0
- package/dist/observability/engine/ledger-writer.test.d.ts.map +1 -0
- package/dist/observability/engine/ledger-writer.test.js +72 -0
- package/dist/observability/engine/ledger-writer.test.js.map +1 -0
- package/dist/observability/engine/llm-dispatcher.d.ts +16 -0
- package/dist/observability/engine/llm-dispatcher.d.ts.map +1 -0
- package/dist/observability/engine/llm-dispatcher.js +183 -0
- package/dist/observability/engine/llm-dispatcher.js.map +1 -0
- package/dist/observability/engine/llm-dispatcher.test.d.ts +2 -0
- package/dist/observability/engine/llm-dispatcher.test.d.ts.map +1 -0
- package/dist/observability/engine/llm-dispatcher.test.js +109 -0
- package/dist/observability/engine/llm-dispatcher.test.js.map +1 -0
- package/dist/observability/engine/phase-audit.d.ts +22 -0
- package/dist/observability/engine/phase-audit.d.ts.map +1 -0
- package/dist/observability/engine/phase-audit.js +98 -0
- package/dist/observability/engine/phase-audit.js.map +1 -0
- package/dist/observability/engine/phase-audit.test.d.ts +2 -0
- package/dist/observability/engine/phase-audit.test.d.ts.map +1 -0
- package/dist/observability/engine/phase-audit.test.js +82 -0
- package/dist/observability/engine/phase-audit.test.js.map +1 -0
- package/dist/observability/engine/phase-subsets.d.ts +5 -0
- package/dist/observability/engine/phase-subsets.d.ts.map +1 -0
- package/dist/observability/engine/phase-subsets.js +23 -0
- package/dist/observability/engine/phase-subsets.js.map +1 -0
- package/dist/observability/engine/phase-subsets.test.d.ts +2 -0
- package/dist/observability/engine/phase-subsets.test.d.ts.map +1 -0
- package/dist/observability/engine/phase-subsets.test.js +24 -0
- package/dist/observability/engine/phase-subsets.test.js.map +1 -0
- package/dist/observability/engine/redact.d.ts +9 -0
- package/dist/observability/engine/redact.d.ts.map +1 -0
- package/dist/observability/engine/redact.js +134 -0
- package/dist/observability/engine/redact.js.map +1 -0
- package/dist/observability/engine/redact.test.d.ts +2 -0
- package/dist/observability/engine/redact.test.d.ts.map +1 -0
- package/dist/observability/engine/redact.test.js +244 -0
- package/dist/observability/engine/redact.test.js.map +1 -0
- package/dist/observability/engine/stall.d.ts +13 -0
- package/dist/observability/engine/stall.d.ts.map +1 -0
- package/dist/observability/engine/stall.js +167 -0
- package/dist/observability/engine/stall.js.map +1 -0
- package/dist/observability/engine/stall.test.d.ts +2 -0
- package/dist/observability/engine/stall.test.d.ts.map +1 -0
- package/dist/observability/engine/stall.test.js +148 -0
- package/dist/observability/engine/stall.test.js.map +1 -0
- package/dist/observability/engine/synthesizer.d.ts +35 -0
- package/dist/observability/engine/synthesizer.d.ts.map +1 -0
- package/dist/observability/engine/synthesizer.js +298 -0
- package/dist/observability/engine/synthesizer.js.map +1 -0
- package/dist/observability/engine/synthesizer.test.d.ts +2 -0
- package/dist/observability/engine/synthesizer.test.d.ts.map +1 -0
- package/dist/observability/engine/synthesizer.test.js +183 -0
- package/dist/observability/engine/synthesizer.test.js.map +1 -0
- package/dist/observability/engine/types.d.ts +422 -0
- package/dist/observability/engine/types.d.ts.map +1 -0
- package/dist/observability/engine/types.js +3 -0
- package/dist/observability/engine/types.js.map +1 -0
- package/dist/observability/engine/types.test.d.ts +2 -0
- package/dist/observability/engine/types.test.d.ts.map +1 -0
- package/dist/observability/engine/types.test.js +16 -0
- package/dist/observability/engine/types.test.js.map +1 -0
- package/dist/observability/renderers/_lib.d.ts +7 -0
- package/dist/observability/renderers/_lib.d.ts.map +1 -0
- package/dist/observability/renderers/_lib.js +28 -0
- package/dist/observability/renderers/_lib.js.map +1 -0
- package/dist/observability/renderers/dashboard.d.ts +5 -0
- package/dist/observability/renderers/dashboard.d.ts.map +1 -0
- package/dist/observability/renderers/dashboard.js +100 -0
- package/dist/observability/renderers/dashboard.js.map +1 -0
- package/dist/observability/renderers/dashboard.test.d.ts +2 -0
- package/dist/observability/renderers/dashboard.test.d.ts.map +1 -0
- package/dist/observability/renderers/dashboard.test.js +142 -0
- package/dist/observability/renderers/dashboard.test.js.map +1 -0
- package/dist/observability/renderers/markdown.d.ts +4 -0
- package/dist/observability/renderers/markdown.d.ts.map +1 -0
- package/dist/observability/renderers/markdown.js +225 -0
- package/dist/observability/renderers/markdown.js.map +1 -0
- package/dist/observability/renderers/markdown.test.d.ts +2 -0
- package/dist/observability/renderers/markdown.test.d.ts.map +1 -0
- package/dist/observability/renderers/markdown.test.js +169 -0
- package/dist/observability/renderers/markdown.test.js.map +1 -0
- package/dist/observability/renderers/mmr-findings.d.ts +10 -0
- package/dist/observability/renderers/mmr-findings.d.ts.map +1 -0
- package/dist/observability/renderers/mmr-findings.js +21 -0
- package/dist/observability/renderers/mmr-findings.js.map +1 -0
- package/dist/observability/renderers/mmr-findings.test.d.ts +2 -0
- package/dist/observability/renderers/mmr-findings.test.d.ts.map +1 -0
- package/dist/observability/renderers/mmr-findings.test.js +86 -0
- package/dist/observability/renderers/mmr-findings.test.js.map +1 -0
- package/dist/observability/renderers/sidecar.d.ts +5 -0
- package/dist/observability/renderers/sidecar.d.ts.map +1 -0
- package/dist/observability/renderers/sidecar.js +51 -0
- package/dist/observability/renderers/sidecar.js.map +1 -0
- package/dist/observability/renderers/sidecar.test.d.ts +2 -0
- package/dist/observability/renderers/sidecar.test.d.ts.map +1 -0
- package/dist/observability/renderers/sidecar.test.js +77 -0
- package/dist/observability/renderers/sidecar.test.js.map +1 -0
- package/dist/observability/renderers/terminal.d.ts +7 -0
- package/dist/observability/renderers/terminal.d.ts.map +1 -0
- package/dist/observability/renderers/terminal.js +96 -0
- package/dist/observability/renderers/terminal.js.map +1 -0
- package/dist/observability/renderers/terminal.test.d.ts +2 -0
- package/dist/observability/renderers/terminal.test.d.ts.map +1 -0
- package/dist/observability/renderers/terminal.test.js +163 -0
- package/dist/observability/renderers/terminal.test.js.map +1 -0
- package/dist/project/adopt.d.ts.map +1 -1
- package/dist/project/adopt.js +3 -1
- package/dist/project/adopt.js.map +1 -1
- package/dist/project/detectors/coverage.test.js +3 -2
- package/dist/project/detectors/coverage.test.js.map +1 -1
- package/dist/project/detectors/disambiguate.js +1 -1
- package/dist/project/detectors/disambiguate.js.map +1 -1
- package/dist/project/detectors/index.d.ts.map +1 -1
- package/dist/project/detectors/index.js +2 -0
- package/dist/project/detectors/index.js.map +1 -1
- package/dist/project/detectors/resolve-detection.test.js +57 -0
- package/dist/project/detectors/resolve-detection.test.js.map +1 -1
- package/dist/project/detectors/types.d.ts +6 -2
- package/dist/project/detectors/types.d.ts.map +1 -1
- package/dist/project/detectors/types.js.map +1 -1
- package/dist/project/detectors/web3.d.ts +4 -0
- package/dist/project/detectors/web3.d.ts.map +1 -0
- package/dist/project/detectors/web3.js +37 -0
- package/dist/project/detectors/web3.js.map +1 -0
- package/dist/project/detectors/web3.test.d.ts +2 -0
- package/dist/project/detectors/web3.test.d.ts.map +1 -0
- package/dist/project/detectors/web3.test.js +75 -0
- package/dist/project/detectors/web3.test.js.map +1 -0
- package/dist/state/state-manager.d.ts +7 -2
- package/dist/state/state-manager.d.ts.map +1 -1
- package/dist/state/state-manager.js +31 -2
- package/dist/state/state-manager.js.map +1 -1
- package/dist/state/state-manager.test.js +88 -3
- package/dist/state/state-manager.test.js.map +1 -1
- package/dist/types/config.d.ts +8 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/state.d.ts +2 -0
- package/dist/types/state.d.ts.map +1 -1
- package/dist/wizard/copy/core.d.ts.map +1 -1
- package/dist/wizard/copy/core.js +4 -0
- package/dist/wizard/copy/core.js.map +1 -1
- package/dist/wizard/copy/index.d.ts.map +1 -1
- package/dist/wizard/copy/index.js +2 -0
- package/dist/wizard/copy/index.js.map +1 -1
- package/dist/wizard/copy/types.d.ts +5 -1
- package/dist/wizard/copy/types.d.ts.map +1 -1
- package/dist/wizard/copy/types.test-d.js +7 -0
- package/dist/wizard/copy/types.test-d.js.map +1 -1
- package/dist/wizard/copy/web3.d.ts +3 -0
- package/dist/wizard/copy/web3.d.ts.map +1 -0
- package/dist/wizard/copy/web3.js +15 -0
- package/dist/wizard/copy/web3.js.map +1 -0
- package/dist/wizard/questions.d.ts +2 -1
- package/dist/wizard/questions.d.ts.map +1 -1
- package/dist/wizard/questions.js +8 -1
- package/dist/wizard/questions.js.map +1 -1
- package/dist/wizard/questions.test.js +14 -0
- package/dist/wizard/questions.test.js.map +1 -1
- package/dist/wizard/wizard.d.ts.map +1 -1
- package/dist/wizard/wizard.js +1 -0
- package/dist/wizard/wizard.js.map +1 -1
- package/package.json +16 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { parseMarkdown, headingsAtDepth, sectionAfterHeading, extractInlineTags, slugify } from './parse-markdown.js';
|
|
2
|
+
const VALID_PRIORITIES = ['must', 'should', 'could', 'wont'];
|
|
3
|
+
function nodeTextRecursive(n) {
|
|
4
|
+
if (n.type === 'text' || n.type === 'inlineCode')
|
|
5
|
+
return n.value ?? '';
|
|
6
|
+
if (Array.isArray(n.children))
|
|
7
|
+
return n.children.map(nodeTextRecursive).join('');
|
|
8
|
+
return '';
|
|
9
|
+
}
|
|
10
|
+
function priorityFromTags(tags) {
|
|
11
|
+
return VALID_PRIORITIES.includes(tags.priority)
|
|
12
|
+
? tags.priority
|
|
13
|
+
: 'should';
|
|
14
|
+
}
|
|
15
|
+
function parseStoryHeading(text) {
|
|
16
|
+
const stripped = text.replace(/\[[^\]]*\]/g, '').trim();
|
|
17
|
+
const m = stripped.match(/^(?:Story\s+)?([A-Za-z0-9][\w-]+):\s*(.+)$/);
|
|
18
|
+
if (m)
|
|
19
|
+
return { storyKey: m[1], title: m[2].trim() };
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
function parseAcsFromSection(root, story, storyStartIdx, storyEndIdx) {
|
|
23
|
+
const out = [];
|
|
24
|
+
// (a) ### AC <n>: <title> headings
|
|
25
|
+
for (let i = storyStartIdx + 1; i < storyEndIdx; i++) {
|
|
26
|
+
const c = root.children[i];
|
|
27
|
+
if (c.type !== 'heading' || c.depth !== 3)
|
|
28
|
+
continue;
|
|
29
|
+
const headingText = nodeTextRecursive(c).trim();
|
|
30
|
+
const acMatch = headingText.match(/^AC\s*(\d+)\b\s*:?\s*(.*)$/i);
|
|
31
|
+
if (!acMatch)
|
|
32
|
+
continue;
|
|
33
|
+
const annotated = { node: c, textContent: headingText, depth: 3, startIndex: i };
|
|
34
|
+
const sectionText = sectionAfterHeading(root, annotated);
|
|
35
|
+
const acId = `ac:${story.id.replace(/^story:/, '')}.${acMatch[1]}`;
|
|
36
|
+
const bodyText = [acMatch[2] ? acMatch[2] : '', sectionText].filter(Boolean).join('\n\n').trim();
|
|
37
|
+
out.push({
|
|
38
|
+
id: acId,
|
|
39
|
+
story_id: story.id,
|
|
40
|
+
text: bodyText.slice(0, 500),
|
|
41
|
+
source_anchor: `docs/user-stories.md#${acId.replace(/[:.]/g, '-')}`,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (out.length > 0)
|
|
45
|
+
return out;
|
|
46
|
+
// (b) ### Acceptance Criteria followed by ordered/unordered list
|
|
47
|
+
for (let i = storyStartIdx + 1; i < storyEndIdx; i++) {
|
|
48
|
+
const c = root.children[i];
|
|
49
|
+
if (c.type !== 'heading' || c.depth !== 3)
|
|
50
|
+
continue;
|
|
51
|
+
const headingText = nodeTextRecursive(c).trim();
|
|
52
|
+
if (!/^Acceptance\s+Criteria\b/i.test(headingText))
|
|
53
|
+
continue;
|
|
54
|
+
for (let j = i + 1; j < storyEndIdx; j++) {
|
|
55
|
+
const n = root.children[j];
|
|
56
|
+
if (n.type === 'heading' && n.depth <= 3)
|
|
57
|
+
break;
|
|
58
|
+
if (n.type !== 'list')
|
|
59
|
+
continue;
|
|
60
|
+
const list = n;
|
|
61
|
+
for (let k = 0; k < list.children.length; k++) {
|
|
62
|
+
const item = list.children[k];
|
|
63
|
+
const text = nodeTextRecursive(item).trim();
|
|
64
|
+
const acId = `ac:${story.id.replace(/^story:/, '')}.${k + 1}`;
|
|
65
|
+
out.push({
|
|
66
|
+
id: acId,
|
|
67
|
+
story_id: story.id,
|
|
68
|
+
text: text.slice(0, 500),
|
|
69
|
+
source_anchor: `docs/user-stories.md#${acId.replace(/[:.]/g, '-')}`,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
export function parseStories(md) {
|
|
78
|
+
const root = parseMarkdown(md);
|
|
79
|
+
const h2s = headingsAtDepth(root, 2);
|
|
80
|
+
const stories = [];
|
|
81
|
+
const acs = [];
|
|
82
|
+
for (let h = 0; h < h2s.length; h++) {
|
|
83
|
+
const head = h2s[h];
|
|
84
|
+
const parsed = parseStoryHeading(head.textContent);
|
|
85
|
+
if (!parsed)
|
|
86
|
+
continue;
|
|
87
|
+
const tags = extractInlineTags(head.textContent);
|
|
88
|
+
const priority = priorityFromTags(tags);
|
|
89
|
+
const kind = ['ui', 'api', 'data', 'infra', 'doc'].find((k) => k === tags.kind);
|
|
90
|
+
const rawFeature = tags.feature;
|
|
91
|
+
const featureId = rawFeature
|
|
92
|
+
? `feature:${slugify(rawFeature.startsWith('feature:') ? rawFeature.slice('feature:'.length) : rawFeature)}`
|
|
93
|
+
: undefined;
|
|
94
|
+
const story = {
|
|
95
|
+
id: `story:${parsed.storyKey}`,
|
|
96
|
+
title: parsed.title,
|
|
97
|
+
priority,
|
|
98
|
+
kind,
|
|
99
|
+
feature_id: featureId,
|
|
100
|
+
source_anchor: `docs/user-stories.md#story-${parsed.storyKey}`,
|
|
101
|
+
};
|
|
102
|
+
stories.push(story);
|
|
103
|
+
const startIdx = head.startIndex;
|
|
104
|
+
const endIdx = h + 1 < h2s.length ? h2s[h + 1].startIndex : root.children.length;
|
|
105
|
+
acs.push(...parseAcsFromSection(root, story, startIdx, endIdx));
|
|
106
|
+
}
|
|
107
|
+
return { stories, acs };
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=story-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story-parser.js","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/story-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story-parser.test.d.ts","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/story-parser.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { parseStories } from './story-parser.js';
|
|
3
|
+
describe('parseStories', () => {
|
|
4
|
+
it('extracts stories with priority + kind from H2 headings', () => {
|
|
5
|
+
const md = `# User Stories
|
|
6
|
+
|
|
7
|
+
## Story user-auth-1: Sign in with email [priority: must] [kind: ui]
|
|
8
|
+
|
|
9
|
+
As a user, I want to sign in.
|
|
10
|
+
|
|
11
|
+
### AC 1: Login form accepts valid email/password
|
|
12
|
+
Given a registered user
|
|
13
|
+
When they submit valid credentials
|
|
14
|
+
Then they are signed in.
|
|
15
|
+
|
|
16
|
+
### AC 2: Login form rejects invalid credentials
|
|
17
|
+
Given a registered user
|
|
18
|
+
When they submit invalid credentials
|
|
19
|
+
Then they see an error.
|
|
20
|
+
|
|
21
|
+
## Story user-auth-2: Password reset [priority: should]
|
|
22
|
+
|
|
23
|
+
As a user, I want to reset my password.
|
|
24
|
+
|
|
25
|
+
### AC 1: Reset link is emailed
|
|
26
|
+
Given a registered user
|
|
27
|
+
When they request reset
|
|
28
|
+
Then they receive a reset email.
|
|
29
|
+
`;
|
|
30
|
+
const { stories, acs } = parseStories(md);
|
|
31
|
+
expect(stories).toHaveLength(2);
|
|
32
|
+
expect(stories[0]).toMatchObject({
|
|
33
|
+
id: 'story:user-auth-1',
|
|
34
|
+
title: 'Sign in with email',
|
|
35
|
+
priority: 'must',
|
|
36
|
+
kind: 'ui',
|
|
37
|
+
source_anchor: 'docs/user-stories.md#story-user-auth-1',
|
|
38
|
+
});
|
|
39
|
+
expect(stories[1].priority).toBe('should');
|
|
40
|
+
expect(stories[1].kind).toBeUndefined();
|
|
41
|
+
expect(acs).toHaveLength(3);
|
|
42
|
+
expect(acs[0]).toMatchObject({ id: 'ac:user-auth-1.1', story_id: 'story:user-auth-1' });
|
|
43
|
+
expect(acs[0].text).toContain('Given a registered user');
|
|
44
|
+
expect(acs[2].story_id).toBe('story:user-auth-2');
|
|
45
|
+
expect(acs[2].id).toBe('ac:user-auth-2.1');
|
|
46
|
+
});
|
|
47
|
+
it('also accepts numbered-list AC format (### Acceptance Criteria)', () => {
|
|
48
|
+
const md = `## Story s-1: Foo [priority: must]
|
|
49
|
+
|
|
50
|
+
As a user, I want X.
|
|
51
|
+
|
|
52
|
+
### Acceptance Criteria
|
|
53
|
+
1. The form validates input.
|
|
54
|
+
2. Errors are localized.
|
|
55
|
+
`;
|
|
56
|
+
const { acs } = parseStories(md);
|
|
57
|
+
expect(acs).toHaveLength(2);
|
|
58
|
+
expect(acs[0]).toMatchObject({ id: 'ac:s-1.1', story_id: 'story:s-1' });
|
|
59
|
+
expect(acs[0].text).toBe('The form validates input.');
|
|
60
|
+
expect(acs[1].text).toBe('Errors are localized.');
|
|
61
|
+
});
|
|
62
|
+
it('returns empty arrays for an empty document', () => {
|
|
63
|
+
expect(parseStories('# Heading\n')).toEqual({ stories: [], acs: [] });
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=story-parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story-parser.test.js","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/story-parser.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBd,CAAA;QACG,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAA;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/B,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,oBAAoB;YAC3B,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,IAAI;YACV,aAAa,EAAE,wCAAwC;SACxD,CAAC,CAAA;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAA;QAEvC,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAA;QACvF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAA;QACxD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,EAAE,GAAG;;;;;;;CAOd,CAAA;QACG,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAA;QAChC,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAA;QACvE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QACrD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-discovery.d.ts","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/test-discovery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AA8FvC,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAsBhE"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join, relative, sep } from 'node:path';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'build', '.scaffold', '.beads', '.mmr', 'coverage']);
|
|
5
|
+
const RULES = [
|
|
6
|
+
{
|
|
7
|
+
framework: 'vitest',
|
|
8
|
+
fileMatcher: (f) => /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(f),
|
|
9
|
+
extractTests: (c) => {
|
|
10
|
+
const results = [];
|
|
11
|
+
const skipDot = /\b(?:it|test)\.skip\s*\(\s*['"`](.+?)['"`]/g;
|
|
12
|
+
const xSkip = /\b(?:xit|xtest)\s*\(\s*['"`](.+?)['"`]/g;
|
|
13
|
+
const normal = /\b(?:it|test)\s*\(\s*['"`](.+?)['"`]/g;
|
|
14
|
+
for (const m of c.matchAll(skipDot))
|
|
15
|
+
results.push({ name: m[1], is_skipped: true });
|
|
16
|
+
for (const m of c.matchAll(xSkip))
|
|
17
|
+
results.push({ name: m[1], is_skipped: true });
|
|
18
|
+
for (const m of c.matchAll(normal))
|
|
19
|
+
results.push({ name: m[1], is_skipped: false });
|
|
20
|
+
return results;
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
framework: 'jest',
|
|
25
|
+
fileMatcher: (f) => /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(f),
|
|
26
|
+
extractTests: (c) => {
|
|
27
|
+
const results = [];
|
|
28
|
+
const skipDot = /\b(?:it|test)\.skip\s*\(\s*['"`](.+?)['"`]/g;
|
|
29
|
+
const xSkip = /\b(?:xit|xtest)\s*\(\s*['"`](.+?)['"`]/g;
|
|
30
|
+
const normal = /\b(?:it|test)\s*\(\s*['"`](.+?)['"`]/g;
|
|
31
|
+
for (const m of c.matchAll(skipDot))
|
|
32
|
+
results.push({ name: m[1], is_skipped: true });
|
|
33
|
+
for (const m of c.matchAll(xSkip))
|
|
34
|
+
results.push({ name: m[1], is_skipped: true });
|
|
35
|
+
for (const m of c.matchAll(normal))
|
|
36
|
+
results.push({ name: m[1], is_skipped: false });
|
|
37
|
+
return results;
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
framework: 'pytest',
|
|
42
|
+
fileMatcher: (f) => /^test_.+\.py$/.test(f) || /_test\.py$/.test(f),
|
|
43
|
+
extractTests: (c) => Array.from(c.matchAll(/^def\s+(test_[\w]+)\s*\(/gm), (m) => ({ name: m[1], is_skipped: false })),
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
framework: 'go-test',
|
|
47
|
+
fileMatcher: (f) => /_test\.go$/.test(f),
|
|
48
|
+
extractTests: (c) => Array.from(c.matchAll(/^func\s+(Test[\w]+)\s*\(/gm), (m) => ({ name: m[1], is_skipped: false })),
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
framework: 'bats',
|
|
52
|
+
fileMatcher: (f) => /\.bats$/.test(f),
|
|
53
|
+
extractTests: (c) => Array.from(c.matchAll(/^\s*@test\s+['"](.+?)['"]\s*\{/gm), (m) => ({ name: m[1], is_skipped: false })),
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
function chooseRule(cwd, file) {
|
|
57
|
+
const candidates = RULES.filter((r) => r.fileMatcher(file));
|
|
58
|
+
if (candidates.length === 0)
|
|
59
|
+
return null;
|
|
60
|
+
if (candidates.length === 1)
|
|
61
|
+
return candidates[0];
|
|
62
|
+
try {
|
|
63
|
+
const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8'));
|
|
64
|
+
const scripts = JSON.stringify(pkg.scripts ?? {});
|
|
65
|
+
if (/\bvitest\b/.test(scripts))
|
|
66
|
+
return candidates.find((r) => r.framework === 'vitest') ?? candidates[0];
|
|
67
|
+
if (/\bjest\b/.test(scripts))
|
|
68
|
+
return candidates.find((r) => r.framework === 'jest') ?? candidates[0];
|
|
69
|
+
}
|
|
70
|
+
catch { /* ignore */ }
|
|
71
|
+
return candidates[0];
|
|
72
|
+
}
|
|
73
|
+
function* walk(dir, base) {
|
|
74
|
+
for (const entry of readdirSync(dir)) {
|
|
75
|
+
if (SKIP_DIRS.has(entry))
|
|
76
|
+
continue;
|
|
77
|
+
const abs = join(dir, entry);
|
|
78
|
+
let s;
|
|
79
|
+
try {
|
|
80
|
+
s = statSync(abs);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (s.isDirectory()) {
|
|
86
|
+
yield* walk(abs, base);
|
|
87
|
+
}
|
|
88
|
+
else if (s.isFile()) {
|
|
89
|
+
yield relative(base, abs).split(sep).join('/');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export async function discoverTests(cwd) {
|
|
94
|
+
const out = [];
|
|
95
|
+
if (!existsSync(cwd))
|
|
96
|
+
return out;
|
|
97
|
+
for (const rel of walk(cwd, cwd)) {
|
|
98
|
+
const filename = rel.split('/').pop() ?? '';
|
|
99
|
+
const rule = chooseRule(cwd, filename);
|
|
100
|
+
if (!rule)
|
|
101
|
+
continue;
|
|
102
|
+
let content;
|
|
103
|
+
try {
|
|
104
|
+
content = readFileSync(join(cwd, rel), 'utf8');
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
for (const { name, is_skipped } of rule.extractTests(content)) {
|
|
110
|
+
const idHash = createHash('sha256').update(`${rel}::${name}`).digest('hex').slice(0, 12);
|
|
111
|
+
out.push({
|
|
112
|
+
id: `test:${rel}::${idHash}`,
|
|
113
|
+
name,
|
|
114
|
+
file_path: rel,
|
|
115
|
+
framework: rule.framework,
|
|
116
|
+
last_status: (is_skipped ? 'skip' : 'unknown'),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=test-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-discovery.js","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/test-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-discovery.test.d.ts","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/test-discovery.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { mkdtempSync, rmSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { discoverTests } from './test-discovery.js';
|
|
6
|
+
describe('discoverTests', () => {
|
|
7
|
+
let dir;
|
|
8
|
+
beforeEach(() => { dir = mkdtempSync(join(tmpdir(), 'observe-td-')); });
|
|
9
|
+
afterEach(() => { rmSync(dir, { recursive: true, force: true }); });
|
|
10
|
+
it('finds *.test.ts and *.spec.ts files and infers vitest framework', async () => {
|
|
11
|
+
mkdirSync(join(dir, 'src/auth'), { recursive: true });
|
|
12
|
+
writeFileSync(join(dir, 'package.json'), JSON.stringify({ scripts: { test: 'vitest run' } }));
|
|
13
|
+
writeFileSync(join(dir, 'src/auth/login.test.ts'), 'import { it, expect } from \'vitest\'\nit(\'signs in\', () => { expect(1).toBe(1) })\n');
|
|
14
|
+
writeFileSync(join(dir, 'src/auth/signup.spec.ts'), 'it(\'signs up\', () => {})\n');
|
|
15
|
+
const tests = await discoverTests(dir);
|
|
16
|
+
const sorted = tests.sort((a, b) => a.id.localeCompare(b.id));
|
|
17
|
+
expect(sorted).toHaveLength(2);
|
|
18
|
+
expect(sorted[0]).toMatchObject({
|
|
19
|
+
framework: 'vitest',
|
|
20
|
+
file_path: 'src/auth/login.test.ts',
|
|
21
|
+
});
|
|
22
|
+
expect(sorted[0].id).toMatch(/^test:src\/auth\/login\.test\.ts::/);
|
|
23
|
+
expect(sorted[0].name).toBe('signs in');
|
|
24
|
+
});
|
|
25
|
+
it('finds *_test.go files and infers go-test framework', async () => {
|
|
26
|
+
writeFileSync(join(dir, 'package.json'), '{}');
|
|
27
|
+
mkdirSync(join(dir, 'pkg/auth'), { recursive: true });
|
|
28
|
+
writeFileSync(join(dir, 'pkg/auth/login_test.go'), 'package auth\nimport "testing"\nfunc TestSignsIn(t *testing.T) {}\n');
|
|
29
|
+
const tests = await discoverTests(dir);
|
|
30
|
+
expect(tests).toHaveLength(1);
|
|
31
|
+
expect(tests[0].framework).toBe('go-test');
|
|
32
|
+
expect(tests[0].name).toBe('TestSignsIn');
|
|
33
|
+
});
|
|
34
|
+
it('returns empty array when no tests are found', async () => {
|
|
35
|
+
writeFileSync(join(dir, 'package.json'), '{}');
|
|
36
|
+
expect(await discoverTests(dir)).toEqual([]);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=test-discovery.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-discovery.test.js","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/test-discovery.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-parser.d.ts","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/token-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAoB9C,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,SAA0B,GAAG,WAAW,EAAE,CA6CjG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { parseMarkdown, headingsAtDepth, slugify } from './parse-markdown.js';
|
|
2
|
+
const VALID_PRIORITY = ['must', 'should', 'could', 'wont'];
|
|
3
|
+
const CATEGORY_MAP = {
|
|
4
|
+
colors: 'color', color: 'color',
|
|
5
|
+
spacing: 'spacing', space: 'spacing',
|
|
6
|
+
typography: 'typography', type: 'typography', text: 'typography',
|
|
7
|
+
shadows: 'shadow', shadow: 'shadow',
|
|
8
|
+
radius: 'radius', radii: 'radius',
|
|
9
|
+
motion: 'motion', animation: 'motion',
|
|
10
|
+
};
|
|
11
|
+
function nodeText(n) {
|
|
12
|
+
if (n.type === 'text' || n.type === 'inlineCode')
|
|
13
|
+
return n.value ?? '';
|
|
14
|
+
if (Array.isArray(n.children))
|
|
15
|
+
return n.children.map(nodeText).join('');
|
|
16
|
+
return '';
|
|
17
|
+
}
|
|
18
|
+
export function parseDesignTokens(md, sourcePath = 'docs/design-system.md') {
|
|
19
|
+
const root = parseMarkdown(md);
|
|
20
|
+
const h2s = headingsAtDepth(root, 2);
|
|
21
|
+
const out = [];
|
|
22
|
+
for (let h = 0; h < h2s.length; h++) {
|
|
23
|
+
const head = h2s[h];
|
|
24
|
+
const headText = head.textContent.replace(/\[[^\]]*\]/g, '').trim().toLowerCase();
|
|
25
|
+
const category = CATEGORY_MAP[headText];
|
|
26
|
+
if (!category)
|
|
27
|
+
continue;
|
|
28
|
+
const slugAnchor = slugify(head.textContent) || headText;
|
|
29
|
+
const start = head.startIndex + 1;
|
|
30
|
+
const end = h + 1 < h2s.length ? h2s[h + 1].startIndex : root.children.length;
|
|
31
|
+
for (let i = start; i < end; i++) {
|
|
32
|
+
const n = root.children[i];
|
|
33
|
+
if (n.type !== 'table')
|
|
34
|
+
continue;
|
|
35
|
+
const table = n;
|
|
36
|
+
const rows = table.children;
|
|
37
|
+
if (rows.length < 2)
|
|
38
|
+
continue;
|
|
39
|
+
const headerCells = rows[0].children.map((cell) => nodeText(cell).trim().toLowerCase());
|
|
40
|
+
const tokenIdx = headerCells.findIndex((c) => /token|name/.test(c));
|
|
41
|
+
const valueIdx = headerCells.findIndex((c) => /value/.test(c));
|
|
42
|
+
const priorityIdx = headerCells.findIndex((c) => /priority/.test(c));
|
|
43
|
+
if (tokenIdx < 0 || valueIdx < 0)
|
|
44
|
+
continue;
|
|
45
|
+
for (let r = 1; r < rows.length; r++) {
|
|
46
|
+
const cells = rows[r].children.map((cell) => nodeText(cell).trim());
|
|
47
|
+
const tokenText = cells[tokenIdx];
|
|
48
|
+
const valueText = cells[valueIdx];
|
|
49
|
+
const priorityText = priorityIdx >= 0 ? cells[priorityIdx].toLowerCase() : '';
|
|
50
|
+
if (!tokenText || !valueText)
|
|
51
|
+
continue;
|
|
52
|
+
const priority = VALID_PRIORITY.includes(priorityText)
|
|
53
|
+
? priorityText
|
|
54
|
+
: 'should';
|
|
55
|
+
out.push({
|
|
56
|
+
id: `token:${tokenText}`,
|
|
57
|
+
category,
|
|
58
|
+
value: valueText,
|
|
59
|
+
priority,
|
|
60
|
+
source_anchor: `${sourcePath}#${slugAnchor}`,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=token-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-parser.js","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/token-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-parser.test.d.ts","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/token-parser.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { parseDesignTokens } from './token-parser.js';
|
|
3
|
+
describe('parseDesignTokens', () => {
|
|
4
|
+
it('extracts tokens from category tables', () => {
|
|
5
|
+
const md = `# Design System
|
|
6
|
+
|
|
7
|
+
## Colors
|
|
8
|
+
|
|
9
|
+
| Token | Value | Priority |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| --color-primary | #4f46e5 | must |
|
|
12
|
+
| --color-danger | #ef4444 | must |
|
|
13
|
+
| --color-muted | #94a3b8 | should |
|
|
14
|
+
|
|
15
|
+
## Spacing
|
|
16
|
+
|
|
17
|
+
| Token | Value | Priority |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| --sp-1 | 4px | should |
|
|
20
|
+
| --sp-2 | 8px | should |
|
|
21
|
+
`;
|
|
22
|
+
const tokens = parseDesignTokens(md);
|
|
23
|
+
expect(tokens).toHaveLength(5);
|
|
24
|
+
expect(tokens[0]).toMatchObject({
|
|
25
|
+
id: 'token:--color-primary',
|
|
26
|
+
category: 'color',
|
|
27
|
+
value: '#4f46e5',
|
|
28
|
+
priority: 'must',
|
|
29
|
+
source_anchor: 'docs/design-system.md#colors',
|
|
30
|
+
});
|
|
31
|
+
expect(tokens[3].category).toBe('spacing');
|
|
32
|
+
});
|
|
33
|
+
it('defaults priority to "should" when column is missing', () => {
|
|
34
|
+
const md = '## Colors\n\n| Token | Value |\n|---|---|\n| --color-x | #fff |\n';
|
|
35
|
+
const tokens = parseDesignTokens(md);
|
|
36
|
+
expect(tokens[0].priority).toBe('should');
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=token-parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-parser.test.js","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/token-parser.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;CAgBd,CAAA;QACG,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC9B,EAAE,EAAE,uBAAuB;YAC3B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,MAAM;YAChB,aAAa,EAAE,8BAA8B;SAC9C,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,GAAG,mEAAmE,CAAA;QAC9E,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DesignToken } from '../types.js';
|
|
2
|
+
export interface TokenUse {
|
|
3
|
+
file: string;
|
|
4
|
+
property: string;
|
|
5
|
+
value: string;
|
|
6
|
+
token_id: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function detectCssTokenUses(source: string, tokens: DesignToken[], filePath: string): TokenUse[];
|
|
9
|
+
export declare function detectJsxTokenUses(source: string, tokens: DesignToken[], filePath: string): TokenUse[];
|
|
10
|
+
//# sourceMappingURL=token-use-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-use-detector.d.ts","sourceRoot":"","sources":["../../../../src/observability/engine/doc-graph/token-use-detector.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAW9C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAmBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAsBtG;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CA2CtG"}
|