@lyse-labs/lyse 0.1.0-alpha.2
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 +45 -0
- package/PRIVACY.md +181 -0
- package/README.md +34 -0
- package/SECURITY.md +43 -0
- package/dist/bench/evidence-pack/anti-dummy.d.ts +11 -0
- package/dist/bench/evidence-pack/anti-dummy.js +20 -0
- package/dist/bench/evidence-pack/anti-dummy.js.map +1 -0
- package/dist/bench/evidence-pack/builder.d.ts +14 -0
- package/dist/bench/evidence-pack/builder.js +77 -0
- package/dist/bench/evidence-pack/builder.js.map +1 -0
- package/dist/bench/evidence-pack/histograms.d.ts +2 -0
- package/dist/bench/evidence-pack/histograms.js +131 -0
- package/dist/bench/evidence-pack/histograms.js.map +1 -0
- package/dist/bench/evidence-pack/manifest-detector.d.ts +2 -0
- package/dist/bench/evidence-pack/manifest-detector.js +65 -0
- package/dist/bench/evidence-pack/manifest-detector.js.map +1 -0
- package/dist/bench/evidence-pack/package-json-digest.d.ts +2 -0
- package/dist/bench/evidence-pack/package-json-digest.js +51 -0
- package/dist/bench/evidence-pack/package-json-digest.js.map +1 -0
- package/dist/bench/evidence-pack/sampler.d.ts +2 -0
- package/dist/bench/evidence-pack/sampler.js +140 -0
- package/dist/bench/evidence-pack/sampler.js.map +1 -0
- package/dist/bench/evidence-pack/types.d.ts +127 -0
- package/dist/bench/evidence-pack/types.js +2 -0
- package/dist/bench/evidence-pack/types.js.map +1 -0
- package/dist/bench/evidence-pack/verifier-corpus.d.ts +5 -0
- package/dist/bench/evidence-pack/verifier-corpus.js +13 -0
- package/dist/bench/evidence-pack/verifier-corpus.js.map +1 -0
- package/dist/bench/taxonomy-loader.d.ts +20 -0
- package/dist/bench/taxonomy-loader.js +28 -0
- package/dist/bench/taxonomy-loader.js.map +1 -0
- package/dist/bench/taxonomy.v3.json +20 -0
- package/dist/cli/__tests__/version-migration.test.d.ts +1 -0
- package/dist/cli/__tests__/version-migration.test.js +69 -0
- package/dist/cli/__tests__/version-migration.test.js.map +1 -0
- package/dist/cli/output/__tests__/eslint-style.test.d.ts +1 -0
- package/dist/cli/output/__tests__/eslint-style.test.js +205 -0
- package/dist/cli/output/__tests__/eslint-style.test.js.map +1 -0
- package/dist/cli/output/__tests__/limit.test.d.ts +1 -0
- package/dist/cli/output/__tests__/limit.test.js +65 -0
- package/dist/cli/output/__tests__/limit.test.js.map +1 -0
- package/dist/cli/output/eslint-style.d.ts +18 -0
- package/dist/cli/output/eslint-style.js +42 -0
- package/dist/cli/output/eslint-style.js.map +1 -0
- package/dist/cli/output/limit.d.ts +5 -0
- package/dist/cli/output/limit.js +32 -0
- package/dist/cli/output/limit.js.map +1 -0
- package/dist/cli/output/score-gauge.d.ts +4 -0
- package/dist/cli/output/score-gauge.js +15 -0
- package/dist/cli/output/score-gauge.js.map +1 -0
- package/dist/cli/version-migration.d.ts +18 -0
- package/dist/cli/version-migration.js +49 -0
- package/dist/cli/version-migration.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +856 -0
- package/dist/cli.js.map +1 -0
- package/dist/codemods/diff.d.ts +17 -0
- package/dist/codemods/diff.js +77 -0
- package/dist/codemods/diff.js.map +1 -0
- package/dist/codemods/git-helpers.d.ts +10 -0
- package/dist/codemods/git-helpers.js +75 -0
- package/dist/codemods/git-helpers.js.map +1 -0
- package/dist/codemods/index.d.ts +27 -0
- package/dist/codemods/index.js +40 -0
- package/dist/codemods/index.js.map +1 -0
- package/dist/codemods/naming-component-pascalcase.d.ts +13 -0
- package/dist/codemods/naming-component-pascalcase.js +106 -0
- package/dist/codemods/naming-component-pascalcase.js.map +1 -0
- package/dist/codemods/naming-hook-prefix.d.ts +13 -0
- package/dist/codemods/naming-hook-prefix.js +86 -0
- package/dist/codemods/naming-hook-prefix.js.map +1 -0
- package/dist/codemods/safety.d.ts +50 -0
- package/dist/codemods/safety.js +109 -0
- package/dist/codemods/safety.js.map +1 -0
- package/dist/codemods/safety.test.d.ts +1 -0
- package/dist/codemods/safety.test.js +154 -0
- package/dist/codemods/safety.test.js.map +1 -0
- package/dist/codemods/shadow-native.d.ts +2 -0
- package/dist/codemods/shadow-native.js +103 -0
- package/dist/codemods/shadow-native.js.map +1 -0
- package/dist/codemods/tokens-color.d.ts +2 -0
- package/dist/codemods/tokens-color.js +69 -0
- package/dist/codemods/tokens-color.js.map +1 -0
- package/dist/codemods/tokens-spacing.d.ts +2 -0
- package/dist/codemods/tokens-spacing.js +66 -0
- package/dist/codemods/tokens-spacing.js.map +1 -0
- package/dist/commands/__tests__/email-prompt.test.d.ts +1 -0
- package/dist/commands/__tests__/email-prompt.test.js +126 -0
- package/dist/commands/__tests__/email-prompt.test.js.map +1 -0
- package/dist/commands/__tests__/explain-score.test.d.ts +1 -0
- package/dist/commands/__tests__/explain-score.test.js +88 -0
- package/dist/commands/__tests__/explain-score.test.js.map +1 -0
- package/dist/commands/__tests__/feedback.test.d.ts +1 -0
- package/dist/commands/__tests__/feedback.test.js +186 -0
- package/dist/commands/__tests__/feedback.test.js.map +1 -0
- package/dist/commands/audit-flags.d.ts +49 -0
- package/dist/commands/audit-flags.js +17 -0
- package/dist/commands/audit-flags.js.map +1 -0
- package/dist/commands/audit-pipeline.d.ts +31 -0
- package/dist/commands/audit-pipeline.js +342 -0
- package/dist/commands/audit-pipeline.js.map +1 -0
- package/dist/commands/bench-pack.d.ts +5 -0
- package/dist/commands/bench-pack.js +61 -0
- package/dist/commands/bench-pack.js.map +1 -0
- package/dist/commands/ci-setup.d.ts +9 -0
- package/dist/commands/ci-setup.js +42 -0
- package/dist/commands/ci-setup.js.map +1 -0
- package/dist/commands/email-prompt.d.ts +36 -0
- package/dist/commands/email-prompt.js +160 -0
- package/dist/commands/email-prompt.js.map +1 -0
- package/dist/commands/explain-score.d.ts +35 -0
- package/dist/commands/explain-score.js +137 -0
- package/dist/commands/explain-score.js.map +1 -0
- package/dist/commands/explain.d.ts +6 -0
- package/dist/commands/explain.js +93 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/feedback.d.ts +31 -0
- package/dist/commands/feedback.js +155 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/fix.d.ts +48 -0
- package/dist/commands/fix.js +191 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/init-detect.d.ts +20 -0
- package/dist/commands/init-detect.js +124 -0
- package/dist/commands/init-detect.js.map +1 -0
- package/dist/commands/init-write-agents-md.d.ts +14 -0
- package/dist/commands/init-write-agents-md.js +71 -0
- package/dist/commands/init-write-agents-md.js.map +1 -0
- package/dist/commands/init-write-lyse-md.d.ts +14 -0
- package/dist/commands/init-write-lyse-md.js +253 -0
- package/dist/commands/init-write-lyse-md.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.js +147 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp-entry.d.ts +33 -0
- package/dist/commands/mcp-entry.js +47 -0
- package/dist/commands/mcp-entry.js.map +1 -0
- package/dist/commands/mcp-setup.d.ts +10 -0
- package/dist/commands/mcp-setup.js +74 -0
- package/dist/commands/mcp-setup.js.map +1 -0
- package/dist/commands/share.d.ts +4 -0
- package/dist/commands/share.js +60 -0
- package/dist/commands/share.js.map +1 -0
- package/dist/commands/telemetry.d.ts +4 -0
- package/dist/commands/telemetry.js +27 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/templates/lyse-workflow.yml.template +30 -0
- package/dist/config/schema.d.ts +158 -0
- package/dist/config/schema.js +136 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/credentials/keychain.d.ts +20 -0
- package/dist/credentials/keychain.js +35 -0
- package/dist/credentials/keychain.js.map +1 -0
- package/dist/credentials/keychain.test.d.ts +1 -0
- package/dist/credentials/keychain.test.js +32 -0
- package/dist/credentials/keychain.test.js.map +1 -0
- package/dist/credentials/paths.d.ts +1 -0
- package/dist/credentials/paths.js +6 -0
- package/dist/credentials/paths.js.map +1 -0
- package/dist/credentials/store.d.ts +17 -0
- package/dist/credentials/store.js +60 -0
- package/dist/credentials/store.js.map +1 -0
- package/dist/credentials/store.test.d.ts +1 -0
- package/dist/credentials/store.test.js +48 -0
- package/dist/credentials/store.test.js.map +1 -0
- package/dist/detection/from-filesystem.d.ts +2 -0
- package/dist/detection/from-filesystem.js +26 -0
- package/dist/detection/from-filesystem.js.map +1 -0
- package/dist/detection/from-git.d.ts +2 -0
- package/dist/detection/from-git.js +53 -0
- package/dist/detection/from-git.js.map +1 -0
- package/dist/detection/from-package-json.d.ts +2 -0
- package/dist/detection/from-package-json.js +194 -0
- package/dist/detection/from-package-json.js.map +1 -0
- package/dist/detection/pre-flight.d.ts +5 -0
- package/dist/detection/pre-flight.js +47 -0
- package/dist/detection/pre-flight.js.map +1 -0
- package/dist/detection/types.d.ts +27 -0
- package/dist/detection/types.js +2 -0
- package/dist/detection/types.js.map +1 -0
- package/dist/entitlement/check.d.ts +7 -0
- package/dist/entitlement/check.js +37 -0
- package/dist/entitlement/check.js.map +1 -0
- package/dist/entitlement/index.d.ts +1 -0
- package/dist/entitlement/index.js +2 -0
- package/dist/entitlement/index.js.map +1 -0
- package/dist/entitlement/keys.d.ts +10 -0
- package/dist/entitlement/keys.js +14 -0
- package/dist/entitlement/keys.js.map +1 -0
- package/dist/history/ndjson-store.d.ts +70 -0
- package/dist/history/ndjson-store.js +102 -0
- package/dist/history/ndjson-store.js.map +1 -0
- package/dist/identity/index.d.ts +1 -0
- package/dist/identity/index.js +2 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/repo-bucket.d.ts +22 -0
- package/dist/identity/repo-bucket.js +78 -0
- package/dist/identity/repo-bucket.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/layer4-stage.d.ts +18 -0
- package/dist/llm/layer4-stage.js +12 -0
- package/dist/llm/layer4-stage.js.map +1 -0
- package/dist/loaders/components.d.ts +26 -0
- package/dist/loaders/components.js +285 -0
- package/dist/loaders/components.js.map +1 -0
- package/dist/loaders/stories.d.ts +2 -0
- package/dist/loaders/stories.js +231 -0
- package/dist/loaders/stories.js.map +1 -0
- package/dist/loaders/token-graph.d.ts +39 -0
- package/dist/loaders/token-graph.js +146 -0
- package/dist/loaders/token-graph.js.map +1 -0
- package/dist/loaders/tokens.d.ts +2 -0
- package/dist/loaders/tokens.js +521 -0
- package/dist/loaders/tokens.js.map +1 -0
- package/dist/mcp/_find-root.d.ts +12 -0
- package/dist/mcp/_find-root.js +28 -0
- package/dist/mcp/_find-root.js.map +1 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +42 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/audit-file.d.ts +25 -0
- package/dist/mcp/tools/audit-file.js +147 -0
- package/dist/mcp/tools/audit-file.js.map +1 -0
- package/dist/mcp/tools/suggest-fix.d.ts +13 -0
- package/dist/mcp/tools/suggest-fix.js +100 -0
- package/dist/mcp/tools/suggest-fix.js.map +1 -0
- package/dist/menu/action-menu.d.ts +6 -0
- package/dist/menu/action-menu.js +15 -0
- package/dist/menu/action-menu.js.map +1 -0
- package/dist/menu/prompts.d.ts +7 -0
- package/dist/menu/prompts.js +30 -0
- package/dist/menu/prompts.js.map +1 -0
- package/dist/menu/repl.d.ts +17 -0
- package/dist/menu/repl.js +77 -0
- package/dist/menu/repl.js.map +1 -0
- package/dist/parsers/css-in-js.d.ts +2 -0
- package/dist/parsers/css-in-js.js +69 -0
- package/dist/parsers/css-in-js.js.map +1 -0
- package/dist/parsers/css.d.ts +2 -0
- package/dist/parsers/css.js +32 -0
- package/dist/parsers/css.js.map +1 -0
- package/dist/parsers/scss-transform.d.ts +25 -0
- package/dist/parsers/scss-transform.js +55 -0
- package/dist/parsers/scss-transform.js.map +1 -0
- package/dist/parsers/tailwind-v4.d.ts +8 -0
- package/dist/parsers/tailwind-v4.js +90 -0
- package/dist/parsers/tailwind-v4.js.map +1 -0
- package/dist/parsers/ts-morph-project.d.ts +16 -0
- package/dist/parsers/ts-morph-project.js +77 -0
- package/dist/parsers/ts-morph-project.js.map +1 -0
- package/dist/parsers/ts.d.ts +2 -0
- package/dist/parsers/ts.js +61 -0
- package/dist/parsers/ts.js.map +1 -0
- package/dist/reliability/__tests__/types.test.d.ts +1 -0
- package/dist/reliability/__tests__/types.test.js +14 -0
- package/dist/reliability/__tests__/types.test.js.map +1 -0
- package/dist/reliability/catalogue/__tests__/promotion.test.d.ts +1 -0
- package/dist/reliability/catalogue/__tests__/promotion.test.js +23 -0
- package/dist/reliability/catalogue/__tests__/promotion.test.js.map +1 -0
- package/dist/reliability/catalogue/__tests__/sub-axes.test.d.ts +1 -0
- package/dist/reliability/catalogue/__tests__/sub-axes.test.js +27 -0
- package/dist/reliability/catalogue/__tests__/sub-axes.test.js.map +1 -0
- package/dist/reliability/catalogue/promotion.d.ts +8 -0
- package/dist/reliability/catalogue/promotion.js +25 -0
- package/dist/reliability/catalogue/promotion.js.map +1 -0
- package/dist/reliability/catalogue/sub-axes.d.ts +3 -0
- package/dist/reliability/catalogue/sub-axes.js +18 -0
- package/dist/reliability/catalogue/sub-axes.js.map +1 -0
- package/dist/reliability/confidence/__tests__/manifest-loader.test.d.ts +1 -0
- package/dist/reliability/confidence/__tests__/manifest-loader.test.js +103 -0
- package/dist/reliability/confidence/__tests__/manifest-loader.test.js.map +1 -0
- package/dist/reliability/confidence/bundled-manifest.d.ts +2 -0
- package/dist/reliability/confidence/bundled-manifest.js +8 -0
- package/dist/reliability/confidence/bundled-manifest.js.map +1 -0
- package/dist/reliability/confidence/index.d.ts +3 -0
- package/dist/reliability/confidence/index.js +3 -0
- package/dist/reliability/confidence/index.js.map +1 -0
- package/dist/reliability/confidence/manifest-loader.d.ts +8 -0
- package/dist/reliability/confidence/manifest-loader.js +53 -0
- package/dist/reliability/confidence/manifest-loader.js.map +1 -0
- package/dist/reliability/feedback/__tests__/interactive.test.d.ts +1 -0
- package/dist/reliability/feedback/__tests__/interactive.test.js +85 -0
- package/dist/reliability/feedback/__tests__/interactive.test.js.map +1 -0
- package/dist/reliability/feedback/__tests__/repo-bucket.test.d.ts +1 -0
- package/dist/reliability/feedback/__tests__/repo-bucket.test.js +18 -0
- package/dist/reliability/feedback/__tests__/repo-bucket.test.js.map +1 -0
- package/dist/reliability/feedback/__tests__/sender.test.d.ts +1 -0
- package/dist/reliability/feedback/__tests__/sender.test.js +101 -0
- package/dist/reliability/feedback/__tests__/sender.test.js.map +1 -0
- package/dist/reliability/feedback/interactive.d.ts +20 -0
- package/dist/reliability/feedback/interactive.js +150 -0
- package/dist/reliability/feedback/interactive.js.map +1 -0
- package/dist/reliability/feedback/repo-bucket.d.ts +2 -0
- package/dist/reliability/feedback/repo-bucket.js +9 -0
- package/dist/reliability/feedback/repo-bucket.js.map +1 -0
- package/dist/reliability/feedback/sender.d.ts +16 -0
- package/dist/reliability/feedback/sender.js +28 -0
- package/dist/reliability/feedback/sender.js.map +1 -0
- package/dist/reliability/index.d.ts +1 -0
- package/dist/reliability/index.js +2 -0
- package/dist/reliability/index.js.map +1 -0
- package/dist/reliability/llm-eval/__tests__/budget.test.d.ts +1 -0
- package/dist/reliability/llm-eval/__tests__/budget.test.js +39 -0
- package/dist/reliability/llm-eval/__tests__/budget.test.js.map +1 -0
- package/dist/reliability/llm-eval/budget.d.ts +14 -0
- package/dist/reliability/llm-eval/budget.js +43 -0
- package/dist/reliability/llm-eval/budget.js.map +1 -0
- package/dist/reliability/score/__tests__/formula-v1.test.d.ts +1 -0
- package/dist/reliability/score/__tests__/formula-v1.test.js +29 -0
- package/dist/reliability/score/__tests__/formula-v1.test.js.map +1 -0
- package/dist/reliability/score/formula-v1.d.ts +13 -0
- package/dist/reliability/score/formula-v1.js +19 -0
- package/dist/reliability/score/formula-v1.js.map +1 -0
- package/dist/reliability/score/version-pin.d.ts +1 -0
- package/dist/reliability/score/version-pin.js +2 -0
- package/dist/reliability/score/version-pin.js.map +1 -0
- package/dist/reliability/score/weight.d.ts +1 -0
- package/dist/reliability/score/weight.js +5 -0
- package/dist/reliability/score/weight.js.map +1 -0
- package/dist/reliability/types.d.ts +39 -0
- package/dist/reliability/types.js +2 -0
- package/dist/reliability/types.js.map +1 -0
- package/dist/reporters/coverage-footer.d.ts +2 -0
- package/dist/reporters/coverage-footer.js +7 -0
- package/dist/reporters/coverage-footer.js.map +1 -0
- package/dist/reporters/json.d.ts +5 -0
- package/dist/reporters/json.js +51 -0
- package/dist/reporters/json.js.map +1 -0
- package/dist/reporters/markdown.d.ts +7 -0
- package/dist/reporters/markdown.js +35 -0
- package/dist/reporters/markdown.js.map +1 -0
- package/dist/reporters/sarif.d.ts +5 -0
- package/dist/reporters/sarif.js +109 -0
- package/dist/reporters/sarif.js.map +1 -0
- package/dist/reporters/terminal-format.d.ts +34 -0
- package/dist/reporters/terminal-format.js +97 -0
- package/dist/reporters/terminal-format.js.map +1 -0
- package/dist/reporters/terminal.d.ts +4 -0
- package/dist/reporters/terminal.js +201 -0
- package/dist/reporters/terminal.js.map +1 -0
- package/dist/rule-runner.d.ts +8 -0
- package/dist/rule-runner.js +22 -0
- package/dist/rule-runner.js.map +1 -0
- package/dist/rules/_codemod-adapter.d.ts +16 -0
- package/dist/rules/_codemod-adapter.js +49 -0
- package/dist/rules/_codemod-adapter.js.map +1 -0
- package/dist/rules/_exclude.d.ts +11 -0
- package/dist/rules/_exclude.js +17 -0
- package/dist/rules/_exclude.js.map +1 -0
- package/dist/rules/_function-body-analysis.d.ts +82 -0
- package/dist/rules/_function-body-analysis.js +379 -0
- package/dist/rules/_function-body-analysis.js.map +1 -0
- package/dist/rules/_rule-module.d.ts +31 -0
- package/dist/rules/_rule-module.js +32 -0
- package/dist/rules/_rule-module.js.map +1 -0
- package/dist/rules/_skip-context.d.ts +36 -0
- package/dist/rules/_skip-context.js +128 -0
- package/dist/rules/_skip-context.js.map +1 -0
- package/dist/rules/a11y-essentials.d.ts +1 -0
- package/dist/rules/a11y-essentials.js +140 -0
- package/dist/rules/a11y-essentials.js.map +1 -0
- package/dist/rules/ai-surface-agents-md-quality.d.ts +22 -0
- package/dist/rules/ai-surface-agents-md-quality.js +233 -0
- package/dist/rules/ai-surface-agents-md-quality.js.map +1 -0
- package/dist/rules/ai-surface-component-manifest-json.d.ts +19 -0
- package/dist/rules/ai-surface-component-manifest-json.js +232 -0
- package/dist/rules/ai-surface-component-manifest-json.js.map +1 -0
- package/dist/rules/ai-surface-ds-index-exported.d.ts +19 -0
- package/dist/rules/ai-surface-ds-index-exported.js +239 -0
- package/dist/rules/ai-surface-ds-index-exported.js.map +1 -0
- package/dist/rules/components-shadow-native.d.ts +2 -0
- package/dist/rules/components-shadow-native.js +118 -0
- package/dist/rules/components-shadow-native.js.map +1 -0
- package/dist/rules/manifest.d.ts +5 -0
- package/dist/rules/manifest.js +20 -0
- package/dist/rules/manifest.js.map +1 -0
- package/dist/rules/naming-component-pascalcase.d.ts +7 -0
- package/dist/rules/naming-component-pascalcase.js +197 -0
- package/dist/rules/naming-component-pascalcase.js.map +1 -0
- package/dist/rules/naming-hook-prefix.d.ts +6 -0
- package/dist/rules/naming-hook-prefix.js +185 -0
- package/dist/rules/naming-hook-prefix.js.map +1 -0
- package/dist/rules/pack-loader.d.ts +30 -0
- package/dist/rules/pack-loader.js +60 -0
- package/dist/rules/pack-loader.js.map +1 -0
- package/dist/rules/pack-validator.d.ts +8 -0
- package/dist/rules/pack-validator.js +97 -0
- package/dist/rules/pack-validator.js.map +1 -0
- package/dist/rules/registry.d.ts +3 -0
- package/dist/rules/registry.js +28 -0
- package/dist/rules/registry.js.map +1 -0
- package/dist/rules/storybook-coverage.d.ts +1 -0
- package/dist/rules/storybook-coverage.js +49 -0
- package/dist/rules/storybook-coverage.js.map +1 -0
- package/dist/rules/templates/_regex-utils.d.ts +5 -0
- package/dist/rules/templates/_regex-utils.js +8 -0
- package/dist/rules/templates/_regex-utils.js.map +1 -0
- package/dist/rules/templates/a11y-jsx-template.d.ts +15 -0
- package/dist/rules/templates/a11y-jsx-template.js +69 -0
- package/dist/rules/templates/a11y-jsx-template.js.map +1 -0
- package/dist/rules/templates/css-property-token-compliance.d.ts +18 -0
- package/dist/rules/templates/css-property-token-compliance.js +56 -0
- package/dist/rules/templates/css-property-token-compliance.js.map +1 -0
- package/dist/rules/templates/import-source-restriction.d.ts +18 -0
- package/dist/rules/templates/import-source-restriction.js +60 -0
- package/dist/rules/templates/import-source-restriction.js.map +1 -0
- package/dist/rules/templates/js-call-token-compliance.d.ts +18 -0
- package/dist/rules/templates/js-call-token-compliance.js +61 -0
- package/dist/rules/templates/js-call-token-compliance.js.map +1 -0
- package/dist/rules/templates/js-prop-token-compliance.d.ts +21 -0
- package/dist/rules/templates/js-prop-token-compliance.js +56 -0
- package/dist/rules/templates/js-prop-token-compliance.js.map +1 -0
- package/dist/rules/templates/naming-convention.d.ts +18 -0
- package/dist/rules/templates/naming-convention.js +76 -0
- package/dist/rules/templates/naming-convention.js.map +1 -0
- package/dist/rules/templates/registry.d.ts +5 -0
- package/dist/rules/templates/registry.js +30 -0
- package/dist/rules/templates/registry.js.map +1 -0
- package/dist/rules/templates/storybook-coverage-template.d.ts +15 -0
- package/dist/rules/templates/storybook-coverage-template.js +58 -0
- package/dist/rules/templates/storybook-coverage-template.js.map +1 -0
- package/dist/rules/templates/tailwind-utility-class-compliance.d.ts +15 -0
- package/dist/rules/templates/tailwind-utility-class-compliance.js +70 -0
- package/dist/rules/templates/tailwind-utility-class-compliance.js.map +1 -0
- package/dist/rules/templates/types.d.ts +16 -0
- package/dist/rules/templates/types.js +2 -0
- package/dist/rules/templates/types.js.map +1 -0
- package/dist/rules/tokens-description-coverage.d.ts +15 -0
- package/dist/rules/tokens-description-coverage.js +193 -0
- package/dist/rules/tokens-description-coverage.js.map +1 -0
- package/dist/rules/tokens-dtcg-conformance.d.ts +47 -0
- package/dist/rules/tokens-dtcg-conformance.js +363 -0
- package/dist/rules/tokens-dtcg-conformance.js.map +1 -0
- package/dist/rules/tokens-no-hardcoded-color.d.ts +18 -0
- package/dist/rules/tokens-no-hardcoded-color.js +436 -0
- package/dist/rules/tokens-no-hardcoded-color.js.map +1 -0
- package/dist/rules/tokens-no-hardcoded-spacing.d.ts +8 -0
- package/dist/rules/tokens-no-hardcoded-spacing.js +193 -0
- package/dist/rules/tokens-no-hardcoded-spacing.js.map +1 -0
- package/dist/scorer.d.ts +38 -0
- package/dist/scorer.js +126 -0
- package/dist/scorer.js.map +1 -0
- package/dist/share/clipboard.d.ts +26 -0
- package/dist/share/clipboard.js +76 -0
- package/dist/share/clipboard.js.map +1 -0
- package/dist/suppression/__tests__/inline.test.d.ts +1 -0
- package/dist/suppression/__tests__/inline.test.js +25 -0
- package/dist/suppression/__tests__/inline.test.js.map +1 -0
- package/dist/suppression/__tests__/lyseignore.test.d.ts +1 -0
- package/dist/suppression/__tests__/lyseignore.test.js +32 -0
- package/dist/suppression/__tests__/lyseignore.test.js.map +1 -0
- package/dist/suppression/defaults.d.ts +1 -0
- package/dist/suppression/defaults.js +14 -0
- package/dist/suppression/defaults.js.map +1 -0
- package/dist/suppression/inline.d.ts +7 -0
- package/dist/suppression/inline.js +32 -0
- package/dist/suppression/inline.js.map +1 -0
- package/dist/suppression/lyseignore.d.ts +2 -0
- package/dist/suppression/lyseignore.js +22 -0
- package/dist/suppression/lyseignore.js.map +1 -0
- package/dist/telemetry/consent.d.ts +48 -0
- package/dist/telemetry/consent.js +139 -0
- package/dist/telemetry/consent.js.map +1 -0
- package/dist/telemetry/index.d.ts +2 -0
- package/dist/telemetry/index.js +3 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/local-log.d.ts +64 -0
- package/dist/telemetry/local-log.js +123 -0
- package/dist/telemetry/local-log.js.map +1 -0
- package/dist/tokens/dtcg-model.d.ts +53 -0
- package/dist/tokens/dtcg-model.js +18 -0
- package/dist/tokens/dtcg-model.js.map +1 -0
- package/dist/tokens/normalizer.d.ts +17 -0
- package/dist/tokens/normalizer.js +360 -0
- package/dist/tokens/normalizer.js.map +1 -0
- package/dist/types.d.ts +300 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/util/git.d.ts +6 -0
- package/dist/util/git.js +40 -0
- package/dist/util/git.js.map +1 -0
- package/dist/util/git.test.d.ts +5 -0
- package/dist/util/git.test.js +42 -0
- package/dist/util/git.test.js.map +1 -0
- package/dist/util/gitignore.d.ts +9 -0
- package/dist/util/gitignore.js +39 -0
- package/dist/util/gitignore.js.map +1 -0
- package/dist/util/hash-deps.d.ts +6 -0
- package/dist/util/hash-deps.js +24 -0
- package/dist/util/hash-deps.js.map +1 -0
- package/dist/util/spinner.d.ts +41 -0
- package/dist/util/spinner.js +126 -0
- package/dist/util/spinner.js.map +1 -0
- package/dist/util/with-spinner.d.ts +11 -0
- package/dist/util/with-spinner.js +19 -0
- package/dist/util/with-spinner.js.map +1 -0
- package/dist/walker.d.ts +14 -0
- package/dist/walker.js +91 -0
- package/dist/walker.js.map +1 -0
- package/package.json +83 -0
- package/rules-manifest.json +289 -0
- package/schemas/v1/lyse-config.json +82 -0
- package/schemas/v1/lyse-event.json +68 -0
- package/schemas/v1/lyse-license.json +19 -0
- package/schemas/v1/lyse-llm-payload.json +53 -0
- package/schemas/v1/lyse-llm-response.json +45 -0
- package/schemas/v1/lyse-result.json +98 -0
- package/schemas/v1/lyse-rules.json +42 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import fg from "fast-glob";
|
|
4
|
+
import { parse } from "@babel/parser";
|
|
5
|
+
import _traverse from "@babel/traverse";
|
|
6
|
+
// Babel CJS-vs-ESM interop: the callable lives at .default in some environments.
|
|
7
|
+
const traverse = (_traverse.default ??
|
|
8
|
+
_traverse);
|
|
9
|
+
/**
|
|
10
|
+
* Extract a simple literal value (string | number | boolean) from an AST node.
|
|
11
|
+
* Returns undefined for complex expressions (template literals, function calls, etc.).
|
|
12
|
+
*/
|
|
13
|
+
function extractLiteralValue(node) {
|
|
14
|
+
if (node.type === "StringLiteral")
|
|
15
|
+
return node.value;
|
|
16
|
+
if (node.type === "NumericLiteral")
|
|
17
|
+
return node.value;
|
|
18
|
+
if (node.type === "BooleanLiteral")
|
|
19
|
+
return node.value;
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Extract simple literal args from an ObjectExpression.
|
|
24
|
+
* Only { key: literal } properties are extracted — computed keys, spread, or complex
|
|
25
|
+
* values are silently skipped (better to under-extract than mis-extract).
|
|
26
|
+
*/
|
|
27
|
+
function extractArgs(obj) {
|
|
28
|
+
const args = {};
|
|
29
|
+
for (const prop of obj.properties) {
|
|
30
|
+
if (prop.type !== "ObjectProperty")
|
|
31
|
+
continue;
|
|
32
|
+
const objProp = prop;
|
|
33
|
+
// Skip computed properties ([key]: value)
|
|
34
|
+
if (objProp.computed)
|
|
35
|
+
continue;
|
|
36
|
+
// Extract the key as a string
|
|
37
|
+
let key;
|
|
38
|
+
if (objProp.key.type === "Identifier") {
|
|
39
|
+
key = objProp.key.name;
|
|
40
|
+
}
|
|
41
|
+
else if (objProp.key.type === "StringLiteral") {
|
|
42
|
+
key = objProp.key.value;
|
|
43
|
+
}
|
|
44
|
+
if (!key)
|
|
45
|
+
continue;
|
|
46
|
+
const val = extractLiteralValue(objProp.value);
|
|
47
|
+
if (val !== undefined) {
|
|
48
|
+
args[key] = val;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return args;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Parse a single story file (CSF v3) and extract:
|
|
55
|
+
* - componentName from `export default { component: Button }`
|
|
56
|
+
* - named story exports and their args from `export const Primary = { args: { variant: "primary" } }`
|
|
57
|
+
*
|
|
58
|
+
* Returns undefined on parse failure.
|
|
59
|
+
*
|
|
60
|
+
* Limitation: factory-pattern stories (`export const Primary = makeStory(...)`)
|
|
61
|
+
* are skipped — the function call's args are too varied to safely extract.
|
|
62
|
+
* Cross-file variable references in `component:` are not resolved (v0.2).
|
|
63
|
+
*/
|
|
64
|
+
function parseStoryFile(source) {
|
|
65
|
+
let ast;
|
|
66
|
+
try {
|
|
67
|
+
ast = parse(source, {
|
|
68
|
+
sourceType: "module",
|
|
69
|
+
plugins: ["typescript", "jsx"],
|
|
70
|
+
errorRecovery: true,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
let componentName;
|
|
77
|
+
const stories = [];
|
|
78
|
+
try {
|
|
79
|
+
traverse(ast, {
|
|
80
|
+
// Extract default export: `export default { component: Button, title: "..." }`
|
|
81
|
+
ExportDefaultDeclaration(path) {
|
|
82
|
+
const decl = path.node.declaration;
|
|
83
|
+
if (decl.type !== "ObjectExpression")
|
|
84
|
+
return;
|
|
85
|
+
const obj = decl;
|
|
86
|
+
for (const prop of obj.properties) {
|
|
87
|
+
if (prop.type !== "ObjectProperty")
|
|
88
|
+
continue;
|
|
89
|
+
const objProp = prop;
|
|
90
|
+
if (objProp.computed)
|
|
91
|
+
continue;
|
|
92
|
+
if (objProp.key.type !== "Identifier")
|
|
93
|
+
continue;
|
|
94
|
+
const keyName = objProp.key.name;
|
|
95
|
+
if (keyName === "component") {
|
|
96
|
+
// Only capture direct identifier references, not expressions
|
|
97
|
+
if (objProp.value.type === "Identifier") {
|
|
98
|
+
componentName = objProp.value.name;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
// Extract named exports: `export const Primary = { args: { variant: "primary" } }`
|
|
104
|
+
// Also handles: `export const Primary: StoryObj = { args: {...} }` (TS type annotation)
|
|
105
|
+
ExportNamedDeclaration(path) {
|
|
106
|
+
const decl = path.node.declaration;
|
|
107
|
+
if (!decl)
|
|
108
|
+
return;
|
|
109
|
+
if (decl.type !== "VariableDeclaration")
|
|
110
|
+
return;
|
|
111
|
+
const varDecl = decl;
|
|
112
|
+
for (const declarator of varDecl.declarations) {
|
|
113
|
+
if (declarator.id.type !== "Identifier")
|
|
114
|
+
continue;
|
|
115
|
+
const exportName = declarator.id.name;
|
|
116
|
+
// Skip `default` re-export patterns
|
|
117
|
+
if (exportName === "default")
|
|
118
|
+
continue;
|
|
119
|
+
const init = declarator.init;
|
|
120
|
+
if (!init)
|
|
121
|
+
continue;
|
|
122
|
+
// Skip factory calls: `makeStory(...)`, `defineMeta(...)`, etc.
|
|
123
|
+
// Only extract plain object expressions.
|
|
124
|
+
if (init.type !== "ObjectExpression")
|
|
125
|
+
continue;
|
|
126
|
+
const storyObj = init;
|
|
127
|
+
let args;
|
|
128
|
+
// Look for `args:` property in the story object
|
|
129
|
+
for (const prop of storyObj.properties) {
|
|
130
|
+
if (prop.type !== "ObjectProperty")
|
|
131
|
+
continue;
|
|
132
|
+
const objProp = prop;
|
|
133
|
+
if (objProp.computed)
|
|
134
|
+
continue;
|
|
135
|
+
if (objProp.key.type !== "Identifier")
|
|
136
|
+
continue;
|
|
137
|
+
if (objProp.key.name !== "args")
|
|
138
|
+
continue;
|
|
139
|
+
if (objProp.value.type === "ObjectExpression") {
|
|
140
|
+
args = extractArgs(objProp.value);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const storyExport = {
|
|
144
|
+
name: exportName,
|
|
145
|
+
...(args !== undefined && Object.keys(args).length > 0 && { args }),
|
|
146
|
+
};
|
|
147
|
+
stories.push(storyExport);
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Partial extraction is fine — return what we got
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
...(componentName !== undefined && { componentName }),
|
|
157
|
+
stories,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export async function loadStories(root) {
|
|
161
|
+
const indexPath = join(root, "storybook-static", "index.json");
|
|
162
|
+
if (existsSync(indexPath)) {
|
|
163
|
+
try {
|
|
164
|
+
const data = JSON.parse(readFileSync(indexPath, "utf8"));
|
|
165
|
+
const byTitle = new Map();
|
|
166
|
+
// Group entries by title leaf so we can aggregate story exports per component
|
|
167
|
+
const titleToEntries = new Map();
|
|
168
|
+
for (const e of Object.values(data.entries)) {
|
|
169
|
+
if (e.type !== "story")
|
|
170
|
+
continue;
|
|
171
|
+
const leaf = e.title.split("/").pop() ?? e.title;
|
|
172
|
+
if (!titleToEntries.has(leaf))
|
|
173
|
+
titleToEntries.set(leaf, []);
|
|
174
|
+
titleToEntries.get(leaf).push(e);
|
|
175
|
+
}
|
|
176
|
+
for (const [leaf, entries] of titleToEntries) {
|
|
177
|
+
// Use the first entry's importPath to parse the story file
|
|
178
|
+
const firstEntry = entries[0];
|
|
179
|
+
const importPath = firstEntry.importPath;
|
|
180
|
+
const storyEntry = { id: firstEntry.id, importPath };
|
|
181
|
+
// Attempt to parse the source file for CSF v3 exports
|
|
182
|
+
const absPath = join(root, importPath);
|
|
183
|
+
if (existsSync(absPath)) {
|
|
184
|
+
const src = readFileSync(absPath, "utf8");
|
|
185
|
+
const parsed = parseStoryFile(src);
|
|
186
|
+
if (parsed) {
|
|
187
|
+
if (parsed.componentName !== undefined) {
|
|
188
|
+
storyEntry.componentName = parsed.componentName;
|
|
189
|
+
}
|
|
190
|
+
if (parsed.stories.length > 0) {
|
|
191
|
+
storyEntry.stories = parsed.stories;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
byTitle.set(leaf, storyEntry);
|
|
196
|
+
}
|
|
197
|
+
if (byTitle.size > 0)
|
|
198
|
+
return { byTitle };
|
|
199
|
+
}
|
|
200
|
+
catch { /* fall through */ }
|
|
201
|
+
}
|
|
202
|
+
const files = await fg(["**/*.stories.{ts,tsx,js,jsx}"], { cwd: root, absolute: true, ignore: ["**/node_modules/**"] });
|
|
203
|
+
if (files.length === 0)
|
|
204
|
+
return null;
|
|
205
|
+
const byTitle = new Map();
|
|
206
|
+
for (const f of files) {
|
|
207
|
+
const src = readFileSync(f, "utf8");
|
|
208
|
+
const titleMatch = src.match(/title\s*:\s*["'`]([^"'`]+)["'`]/);
|
|
209
|
+
if (!titleMatch || !titleMatch[1])
|
|
210
|
+
continue;
|
|
211
|
+
const leaf = titleMatch[1].split("/").pop() ?? titleMatch[1];
|
|
212
|
+
const importPath = f.replace(root + "/", "");
|
|
213
|
+
const storyEntry = {
|
|
214
|
+
id: leaf.toLowerCase(),
|
|
215
|
+
importPath,
|
|
216
|
+
};
|
|
217
|
+
// Parse CSF v3 exports from source
|
|
218
|
+
const parsed = parseStoryFile(src);
|
|
219
|
+
if (parsed) {
|
|
220
|
+
if (parsed.componentName !== undefined) {
|
|
221
|
+
storyEntry.componentName = parsed.componentName;
|
|
222
|
+
}
|
|
223
|
+
if (parsed.stories.length > 0) {
|
|
224
|
+
storyEntry.stories = parsed.stories;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
byTitle.set(leaf, storyEntry);
|
|
228
|
+
}
|
|
229
|
+
return byTitle.size > 0 ? { byTitle } : null;
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stories.js","sourceRoot":"","sources":["../../src/loaders/stories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* token-graph.ts — Theme parity checker for light/dark mode token analysis.
|
|
3
|
+
*
|
|
4
|
+
* Detects light/dark token naming conventions and flags tokens that exist in one
|
|
5
|
+
* mode but are missing in the other. This is a pure helper (no rule yet) — it
|
|
6
|
+
* will be consumed by:
|
|
7
|
+
* - Sprint 1 Step 6: LLM prompt themes section (richer signal for Layer 4)
|
|
8
|
+
* - v0.2 planned rule: themes/parity-check
|
|
9
|
+
*
|
|
10
|
+
* Detection strategy (convention-based, NOT DTCG-mode-based):
|
|
11
|
+
* - Suffix pattern: `<base>-light` / `<base>-dark`
|
|
12
|
+
* - Prefix pattern: `light-<base>` / `dark-<base>`
|
|
13
|
+
* - Path segment: tokens containing `/light/` and `/dark/` in their path
|
|
14
|
+
*
|
|
15
|
+
* For each base token detected, if only one mode variant exists, it is flagged
|
|
16
|
+
* as missing in the opposite mode.
|
|
17
|
+
*
|
|
18
|
+
* Limitation: DTCG multi-mode overrides (using $modes / $extensions) are not
|
|
19
|
+
* analysed in v0.1. These require the full DTCG tree, not just the flattened
|
|
20
|
+
* TokenMap. Planned for v0.2.
|
|
21
|
+
*/
|
|
22
|
+
import type { TokenMap } from "../types.js";
|
|
23
|
+
export interface ThemeParityCheck {
|
|
24
|
+
/** Token base names defined in light mode but missing in dark mode. */
|
|
25
|
+
missingInDark: string[];
|
|
26
|
+
/** Token base names defined in dark mode but missing in light mode. */
|
|
27
|
+
missingInLight: string[];
|
|
28
|
+
/** True when both light and dark mode tokens were detected in the TokenMap. */
|
|
29
|
+
hasMultipleModes: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Analyse the TokenMap for light/dark mode parity.
|
|
33
|
+
*
|
|
34
|
+
* The function tries three naming conventions in order (suffix, prefix, path-segment)
|
|
35
|
+
* and uses the FIRST one that detects any dual-mode tokens.
|
|
36
|
+
*
|
|
37
|
+
* If no convention is detected, returns `hasMultipleModes: false` with empty arrays.
|
|
38
|
+
*/
|
|
39
|
+
export declare function checkThemeParity(tokenMap: TokenMap): ThemeParityCheck;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* token-graph.ts — Theme parity checker for light/dark mode token analysis.
|
|
3
|
+
*
|
|
4
|
+
* Detects light/dark token naming conventions and flags tokens that exist in one
|
|
5
|
+
* mode but are missing in the other. This is a pure helper (no rule yet) — it
|
|
6
|
+
* will be consumed by:
|
|
7
|
+
* - Sprint 1 Step 6: LLM prompt themes section (richer signal for Layer 4)
|
|
8
|
+
* - v0.2 planned rule: themes/parity-check
|
|
9
|
+
*
|
|
10
|
+
* Detection strategy (convention-based, NOT DTCG-mode-based):
|
|
11
|
+
* - Suffix pattern: `<base>-light` / `<base>-dark`
|
|
12
|
+
* - Prefix pattern: `light-<base>` / `dark-<base>`
|
|
13
|
+
* - Path segment: tokens containing `/light/` and `/dark/` in their path
|
|
14
|
+
*
|
|
15
|
+
* For each base token detected, if only one mode variant exists, it is flagged
|
|
16
|
+
* as missing in the opposite mode.
|
|
17
|
+
*
|
|
18
|
+
* Limitation: DTCG multi-mode overrides (using $modes / $extensions) are not
|
|
19
|
+
* analysed in v0.1. These require the full DTCG tree, not just the flattened
|
|
20
|
+
* TokenMap. Planned for v0.2.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* All token paths from every map in the TokenMap, collected as a flat string array.
|
|
24
|
+
* TokenMap maps are value → [tokenPaths], so we iterate values to get paths.
|
|
25
|
+
*/
|
|
26
|
+
function collectAllTokenPaths(tokenMap) {
|
|
27
|
+
const paths = [];
|
|
28
|
+
const maps = [
|
|
29
|
+
tokenMap.colors,
|
|
30
|
+
tokenMap.spacing,
|
|
31
|
+
tokenMap.typography,
|
|
32
|
+
tokenMap.radii,
|
|
33
|
+
tokenMap.shadows,
|
|
34
|
+
tokenMap.motion,
|
|
35
|
+
tokenMap.breakpoints,
|
|
36
|
+
tokenMap.zIndex,
|
|
37
|
+
tokenMap.opacity,
|
|
38
|
+
tokenMap.borderWidth,
|
|
39
|
+
];
|
|
40
|
+
for (const map of maps) {
|
|
41
|
+
for (const tokenPaths of map.values()) {
|
|
42
|
+
for (const p of tokenPaths) {
|
|
43
|
+
paths.push(p);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return paths;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Detect light/dark pairs using suffix pattern (`<base>-light` / `<base>-dark`).
|
|
51
|
+
* Returns sets of base names found in each mode.
|
|
52
|
+
*/
|
|
53
|
+
function detectSuffixPattern(paths) {
|
|
54
|
+
const lightBases = new Set();
|
|
55
|
+
const darkBases = new Set();
|
|
56
|
+
for (const path of paths) {
|
|
57
|
+
if (path.endsWith("-light"))
|
|
58
|
+
lightBases.add(path.slice(0, -"-light".length));
|
|
59
|
+
else if (path.endsWith("-dark"))
|
|
60
|
+
darkBases.add(path.slice(0, -"-dark".length));
|
|
61
|
+
}
|
|
62
|
+
if (lightBases.size === 0 && darkBases.size === 0)
|
|
63
|
+
return null;
|
|
64
|
+
return { light: lightBases, dark: darkBases };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Detect light/dark pairs using prefix pattern (`light-<base>` / `dark-<base>`).
|
|
68
|
+
* Returns sets of base names found in each mode.
|
|
69
|
+
*/
|
|
70
|
+
function detectPrefixPattern(paths) {
|
|
71
|
+
const lightBases = new Set();
|
|
72
|
+
const darkBases = new Set();
|
|
73
|
+
for (const path of paths) {
|
|
74
|
+
// Match at the segment level: "light-<base>" or "dark-<base>"
|
|
75
|
+
// Also handles paths like "theme/light-primary" → base "theme/primary"
|
|
76
|
+
const segments = path.split("/");
|
|
77
|
+
const last = segments[segments.length - 1];
|
|
78
|
+
const prefix = segments.slice(0, -1).join("/");
|
|
79
|
+
const sep = prefix ? "/" : "";
|
|
80
|
+
if (last.startsWith("light-")) {
|
|
81
|
+
lightBases.add(prefix + sep + last.slice("light-".length));
|
|
82
|
+
}
|
|
83
|
+
else if (last.startsWith("dark-")) {
|
|
84
|
+
darkBases.add(prefix + sep + last.slice("dark-".length));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (lightBases.size === 0 && darkBases.size === 0)
|
|
88
|
+
return null;
|
|
89
|
+
return { light: lightBases, dark: darkBases };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Detect light/dark pairs using path-segment pattern (`/light/` / `/dark/`).
|
|
93
|
+
* E.g. "color/light/primary" and "color/dark/primary" → base "color/primary".
|
|
94
|
+
* Returns sets of base names found in each mode.
|
|
95
|
+
*/
|
|
96
|
+
function detectPathSegmentPattern(paths) {
|
|
97
|
+
const lightBases = new Set();
|
|
98
|
+
const darkBases = new Set();
|
|
99
|
+
for (const path of paths) {
|
|
100
|
+
const lightIdx = path.indexOf("/light/");
|
|
101
|
+
const darkIdx = path.indexOf("/dark/");
|
|
102
|
+
if (lightIdx !== -1) {
|
|
103
|
+
// Replace "/light/" segment with "/" to get base path
|
|
104
|
+
lightBases.add(path.slice(0, lightIdx) + "/" + path.slice(lightIdx + "/light/".length));
|
|
105
|
+
}
|
|
106
|
+
else if (darkIdx !== -1) {
|
|
107
|
+
darkBases.add(path.slice(0, darkIdx) + "/" + path.slice(darkIdx + "/dark/".length));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (lightBases.size === 0 && darkBases.size === 0)
|
|
111
|
+
return null;
|
|
112
|
+
return { light: lightBases, dark: darkBases };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Given light/dark base sets, compute which bases are missing in each mode.
|
|
116
|
+
*/
|
|
117
|
+
function computeMissing(light, dark) {
|
|
118
|
+
const missingInDark = [...light].filter((b) => !dark.has(b)).sort();
|
|
119
|
+
const missingInLight = [...dark].filter((b) => !light.has(b)).sort();
|
|
120
|
+
return { missingInDark, missingInLight };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Analyse the TokenMap for light/dark mode parity.
|
|
124
|
+
*
|
|
125
|
+
* The function tries three naming conventions in order (suffix, prefix, path-segment)
|
|
126
|
+
* and uses the FIRST one that detects any dual-mode tokens.
|
|
127
|
+
*
|
|
128
|
+
* If no convention is detected, returns `hasMultipleModes: false` with empty arrays.
|
|
129
|
+
*/
|
|
130
|
+
export function checkThemeParity(tokenMap) {
|
|
131
|
+
const paths = collectAllTokenPaths(tokenMap);
|
|
132
|
+
// Try detection strategies in order — first match wins
|
|
133
|
+
const detected = detectSuffixPattern(paths) ??
|
|
134
|
+
detectPrefixPattern(paths) ??
|
|
135
|
+
detectPathSegmentPattern(paths);
|
|
136
|
+
if (!detected) {
|
|
137
|
+
return { missingInDark: [], missingInLight: [], hasMultipleModes: false };
|
|
138
|
+
}
|
|
139
|
+
const { missingInDark, missingInLight } = computeMissing(detected.light, detected.dark);
|
|
140
|
+
return {
|
|
141
|
+
missingInDark,
|
|
142
|
+
missingInLight,
|
|
143
|
+
hasMultipleModes: true,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=token-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-graph.js","sourceRoot":"","sources":["../../src/loaders/token-graph.ts"],"names":[],"mappings":"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"}
|