@ontrails/warden 1.0.0-beta.13 → 1.0.0-beta.15
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/.turbo/turbo-lint.log +1 -1
- package/CHANGELOG.md +30 -0
- package/README.md +31 -20
- package/dist/cli.d.ts +19 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +261 -64
- package/dist/cli.js.map +1 -1
- package/dist/draft.d.ts +5 -0
- package/dist/draft.d.ts.map +1 -0
- package/dist/draft.js +16 -0
- package/dist/draft.js.map +1 -0
- package/dist/drift.d.ts +10 -7
- package/dist/drift.d.ts.map +1 -1
- package/dist/drift.js +50 -16
- package/dist/drift.js.map +1 -1
- package/dist/formatters.d.ts +2 -1
- package/dist/formatters.d.ts.map +1 -1
- package/dist/formatters.js +15 -4
- package/dist/formatters.js.map +1 -1
- package/dist/index.d.ts +9 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -17
- package/dist/index.js.map +1 -1
- package/dist/rules/ast.d.ts +412 -7
- package/dist/rules/ast.d.ts.map +1 -1
- package/dist/rules/ast.js +1847 -102
- package/dist/rules/ast.js.map +1 -1
- package/dist/rules/circular-refs.d.ts +6 -0
- package/dist/rules/circular-refs.d.ts.map +1 -0
- package/dist/rules/circular-refs.js +83 -0
- package/dist/rules/circular-refs.js.map +1 -0
- package/dist/rules/context-no-surface-types.d.ts.map +1 -1
- package/dist/rules/context-no-surface-types.js +59 -3
- package/dist/rules/context-no-surface-types.js.map +1 -1
- package/dist/rules/contour-exists.d.ts +7 -0
- package/dist/rules/contour-exists.d.ts.map +1 -0
- package/dist/rules/contour-exists.js +113 -0
- package/dist/rules/contour-exists.js.map +1 -0
- package/dist/rules/contour-ids.d.ts +10 -0
- package/dist/rules/contour-ids.d.ts.map +1 -0
- package/dist/rules/contour-ids.js +12 -0
- package/dist/rules/contour-ids.js.map +1 -0
- package/dist/rules/cross-declarations.d.ts.map +1 -1
- package/dist/rules/cross-declarations.js +171 -57
- package/dist/rules/cross-declarations.js.map +1 -1
- package/dist/rules/dead-internal-trail.d.ts +3 -0
- package/dist/rules/dead-internal-trail.d.ts.map +1 -0
- package/dist/rules/dead-internal-trail.js +80 -0
- package/dist/rules/dead-internal-trail.js.map +1 -0
- package/dist/rules/draft-file-marking.d.ts +6 -0
- package/dist/rules/draft-file-marking.d.ts.map +1 -0
- package/dist/rules/draft-file-marking.js +87 -0
- package/dist/rules/draft-file-marking.js.map +1 -0
- package/dist/rules/draft-visible-debt.d.ts +12 -0
- package/dist/rules/draft-visible-debt.d.ts.map +1 -0
- package/dist/rules/draft-visible-debt.js +50 -0
- package/dist/rules/draft-visible-debt.js.map +1 -0
- package/dist/rules/error-mapping-completeness.d.ts +13 -0
- package/dist/rules/error-mapping-completeness.d.ts.map +1 -0
- package/dist/rules/error-mapping-completeness.js +160 -0
- package/dist/rules/error-mapping-completeness.js.map +1 -0
- package/dist/rules/example-valid.d.ts +6 -0
- package/dist/rules/example-valid.d.ts.map +1 -0
- package/dist/rules/example-valid.js +203 -0
- package/dist/rules/example-valid.js.map +1 -0
- package/dist/rules/fires-declarations.d.ts +16 -0
- package/dist/rules/fires-declarations.d.ts.map +1 -0
- package/dist/rules/fires-declarations.js +444 -0
- package/dist/rules/fires-declarations.js.map +1 -0
- package/dist/rules/implementation-returns-result.d.ts +9 -0
- package/dist/rules/implementation-returns-result.d.ts.map +1 -1
- package/dist/rules/implementation-returns-result.js +638 -76
- package/dist/rules/implementation-returns-result.js.map +1 -1
- package/dist/rules/incomplete-accessor-for-standard-op.d.ts +30 -0
- package/dist/rules/incomplete-accessor-for-standard-op.d.ts.map +1 -0
- package/dist/rules/incomplete-accessor-for-standard-op.js +226 -0
- package/dist/rules/incomplete-accessor-for-standard-op.js.map +1 -0
- package/dist/rules/incomplete-crud.d.ts +21 -0
- package/dist/rules/incomplete-crud.d.ts.map +1 -0
- package/dist/rules/incomplete-crud.js +368 -0
- package/dist/rules/incomplete-crud.js.map +1 -0
- package/dist/rules/index.d.ts +40 -7
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +91 -15
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/intent-propagation.d.ts +3 -0
- package/dist/rules/intent-propagation.d.ts.map +1 -0
- package/dist/rules/intent-propagation.js +57 -0
- package/dist/rules/intent-propagation.js.map +1 -0
- package/dist/rules/missing-reconcile.d.ts +3 -0
- package/dist/rules/missing-reconcile.d.ts.map +1 -0
- package/dist/rules/missing-reconcile.js +44 -0
- package/dist/rules/missing-reconcile.js.map +1 -0
- package/dist/rules/missing-visibility.d.ts +3 -0
- package/dist/rules/missing-visibility.d.ts.map +1 -0
- package/dist/rules/missing-visibility.js +63 -0
- package/dist/rules/missing-visibility.js.map +1 -0
- package/dist/rules/no-direct-impl-in-route.d.ts.map +1 -1
- package/dist/rules/no-direct-impl-in-route.js +0 -3
- package/dist/rules/no-direct-impl-in-route.js.map +1 -1
- package/dist/rules/no-direct-implementation-call.js +1 -1
- package/dist/rules/no-direct-implementation-call.js.map +1 -1
- package/dist/rules/no-sync-result-assumption.d.ts.map +1 -1
- package/dist/rules/no-sync-result-assumption.js +870 -61
- package/dist/rules/no-sync-result-assumption.js.map +1 -1
- package/dist/rules/no-throw-in-detour-recover.d.ts +3 -0
- package/dist/rules/no-throw-in-detour-recover.d.ts.map +1 -0
- package/dist/rules/no-throw-in-detour-recover.js +147 -0
- package/dist/rules/no-throw-in-detour-recover.js.map +1 -0
- package/dist/rules/no-throw-in-detour-target.d.ts +4 -1
- package/dist/rules/no-throw-in-detour-target.d.ts.map +1 -1
- package/dist/rules/no-throw-in-detour-target.js +6 -3
- package/dist/rules/no-throw-in-detour-target.js.map +1 -1
- package/dist/rules/no-throw-in-implementation.d.ts +4 -2
- package/dist/rules/no-throw-in-implementation.d.ts.map +1 -1
- package/dist/rules/no-throw-in-implementation.js +6 -4
- package/dist/rules/no-throw-in-implementation.js.map +1 -1
- package/dist/rules/on-references-exist.d.ts +14 -0
- package/dist/rules/on-references-exist.d.ts.map +1 -0
- package/dist/rules/on-references-exist.js +109 -0
- package/dist/rules/on-references-exist.js.map +1 -0
- package/dist/rules/orphaned-signal.d.ts +3 -0
- package/dist/rules/orphaned-signal.d.ts.map +1 -0
- package/dist/rules/orphaned-signal.js +67 -0
- package/dist/rules/orphaned-signal.js.map +1 -0
- package/dist/rules/permit-governance.d.ts +3 -0
- package/dist/rules/permit-governance.d.ts.map +1 -0
- package/dist/rules/permit-governance.js +15 -0
- package/dist/rules/permit-governance.js.map +1 -0
- package/dist/rules/reference-exists.d.ts +6 -0
- package/dist/rules/reference-exists.d.ts.map +1 -0
- package/dist/rules/reference-exists.js +47 -0
- package/dist/rules/reference-exists.js.map +1 -0
- package/dist/rules/registry-names.d.ts +8 -0
- package/dist/rules/registry-names.d.ts.map +1 -0
- package/dist/rules/registry-names.js +83 -0
- package/dist/rules/registry-names.js.map +1 -0
- package/dist/rules/resource-declarations.d.ts +14 -0
- package/dist/rules/resource-declarations.d.ts.map +1 -0
- package/dist/rules/resource-declarations.js +413 -0
- package/dist/rules/resource-declarations.js.map +1 -0
- package/dist/rules/resource-exists.d.ts +6 -0
- package/dist/rules/resource-exists.d.ts.map +1 -0
- package/dist/rules/resource-exists.js +90 -0
- package/dist/rules/resource-exists.js.map +1 -0
- package/dist/rules/resource-id-grammar.d.ts +3 -0
- package/dist/rules/resource-id-grammar.d.ts.map +1 -0
- package/dist/rules/resource-id-grammar.js +39 -0
- package/dist/rules/resource-id-grammar.js.map +1 -0
- package/dist/rules/specs.d.ts.map +1 -1
- package/dist/rules/specs.js +5 -1
- package/dist/rules/specs.js.map +1 -1
- package/dist/rules/types.d.ts +53 -4
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/rules/unreachable-detour-shadowing.d.ts +3 -0
- package/dist/rules/unreachable-detour-shadowing.d.ts.map +1 -0
- package/dist/rules/unreachable-detour-shadowing.js +202 -0
- package/dist/rules/unreachable-detour-shadowing.js.map +1 -0
- package/dist/rules/valid-describe-refs.d.ts.map +1 -1
- package/dist/rules/valid-describe-refs.js +132 -16
- package/dist/rules/valid-describe-refs.js.map +1 -1
- package/dist/rules/valid-detour-contract.d.ts +3 -0
- package/dist/rules/valid-detour-contract.d.ts.map +1 -0
- package/dist/rules/valid-detour-contract.js +47 -0
- package/dist/rules/valid-detour-contract.js.map +1 -0
- package/dist/rules/valid-detour-refs.d.ts.map +1 -1
- package/dist/rules/valid-detour-refs.js +73 -82
- package/dist/rules/valid-detour-refs.js.map +1 -1
- package/dist/rules/warden-export-symmetry.d.ts +7 -0
- package/dist/rules/warden-export-symmetry.d.ts.map +1 -0
- package/dist/rules/warden-export-symmetry.js +352 -0
- package/dist/rules/warden-export-symmetry.js.map +1 -0
- package/dist/rules/warden-rules-use-ast.d.ts +17 -0
- package/dist/rules/warden-rules-use-ast.d.ts.map +1 -0
- package/dist/rules/warden-rules-use-ast.js +778 -0
- package/dist/rules/warden-rules-use-ast.js.map +1 -0
- package/dist/trails/circular-refs.trail.d.ts +24 -0
- package/dist/trails/circular-refs.trail.d.ts.map +1 -0
- package/dist/trails/circular-refs.trail.js +29 -0
- package/dist/trails/circular-refs.trail.js.map +1 -0
- package/dist/trails/context-no-surface-types.trail.d.ts +2 -2
- package/dist/trails/context-no-surface-types.trail.d.ts.map +1 -1
- package/dist/trails/context-no-trailhead-types.trail.d.ts +2 -2
- package/dist/trails/context-no-trailhead-types.trail.d.ts.map +1 -1
- package/dist/trails/contour-exists.trail.d.ts +24 -0
- package/dist/trails/contour-exists.trail.d.ts.map +1 -0
- package/dist/trails/contour-exists.trail.js +21 -0
- package/dist/trails/contour-exists.trail.js.map +1 -0
- package/dist/trails/cross-declarations.trail.d.ts +2 -2
- package/dist/trails/cross-declarations.trail.d.ts.map +1 -1
- package/dist/trails/dead-internal-trail.trail.d.ts +24 -0
- package/dist/trails/dead-internal-trail.trail.d.ts.map +1 -0
- package/dist/trails/dead-internal-trail.trail.js +26 -0
- package/dist/trails/dead-internal-trail.trail.js.map +1 -0
- package/dist/trails/{provision-declarations.trail.d.ts → draft-file-marking.trail.d.ts} +3 -3
- package/dist/trails/draft-file-marking.trail.d.ts.map +1 -0
- package/dist/trails/draft-file-marking.trail.js +16 -0
- package/dist/trails/draft-file-marking.trail.js.map +1 -0
- package/dist/trails/draft-visible-debt.trail.d.ts +13 -0
- package/dist/trails/draft-visible-debt.trail.d.ts.map +1 -0
- package/dist/trails/draft-visible-debt.trail.js +16 -0
- package/dist/trails/draft-visible-debt.trail.js.map +1 -0
- package/dist/trails/error-mapping-completeness.trail.d.ts +13 -0
- package/dist/trails/error-mapping-completeness.trail.d.ts.map +1 -0
- package/dist/trails/error-mapping-completeness.trail.js +29 -0
- package/dist/trails/error-mapping-completeness.trail.js.map +1 -0
- package/dist/trails/{follow-declarations.trail.d.ts → example-valid.trail.d.ts} +3 -3
- package/dist/trails/example-valid.trail.d.ts.map +1 -0
- package/dist/trails/example-valid.trail.js +25 -0
- package/dist/trails/example-valid.trail.js.map +1 -0
- package/dist/trails/fires-declarations.trail.d.ts +13 -0
- package/dist/trails/fires-declarations.trail.d.ts.map +1 -0
- package/dist/trails/fires-declarations.trail.js +22 -0
- package/dist/trails/fires-declarations.trail.js.map +1 -0
- package/dist/trails/implementation-returns-result.trail.d.ts +2 -2
- package/dist/trails/implementation-returns-result.trail.d.ts.map +1 -1
- package/dist/trails/incomplete-accessor-for-standard-op.trail.d.ts +12 -0
- package/dist/trails/incomplete-accessor-for-standard-op.trail.d.ts.map +1 -0
- package/dist/trails/incomplete-accessor-for-standard-op.trail.js +60 -0
- package/dist/trails/incomplete-accessor-for-standard-op.trail.js.map +1 -0
- package/dist/trails/incomplete-crud.trail.d.ts +24 -0
- package/dist/trails/incomplete-crud.trail.d.ts.map +1 -0
- package/dist/trails/incomplete-crud.trail.js +39 -0
- package/dist/trails/incomplete-crud.trail.js.map +1 -0
- package/dist/trails/index.d.ts +29 -7
- package/dist/trails/index.d.ts.map +1 -1
- package/dist/trails/index.js +28 -6
- package/dist/trails/index.js.map +1 -1
- package/dist/trails/intent-propagation.trail.d.ts +24 -0
- package/dist/trails/intent-propagation.trail.d.ts.map +1 -0
- package/dist/trails/intent-propagation.trail.js +30 -0
- package/dist/trails/intent-propagation.trail.js.map +1 -0
- package/dist/trails/missing-reconcile.trail.d.ts +24 -0
- package/dist/trails/missing-reconcile.trail.d.ts.map +1 -0
- package/dist/trails/missing-reconcile.trail.js +33 -0
- package/dist/trails/missing-reconcile.trail.js.map +1 -0
- package/dist/trails/missing-visibility.trail.d.ts +24 -0
- package/dist/trails/missing-visibility.trail.d.ts.map +1 -0
- package/dist/trails/missing-visibility.trail.js +22 -0
- package/dist/trails/missing-visibility.trail.js.map +1 -0
- package/dist/trails/no-direct-impl-in-route.trail.d.ts +2 -2
- package/dist/trails/no-direct-impl-in-route.trail.d.ts.map +1 -1
- package/dist/trails/no-direct-implementation-call.trail.d.ts +2 -2
- package/dist/trails/no-direct-implementation-call.trail.d.ts.map +1 -1
- package/dist/trails/no-sync-result-assumption.trail.d.ts +2 -2
- package/dist/trails/no-sync-result-assumption.trail.d.ts.map +1 -1
- package/dist/trails/no-throw-in-detour-recover.trail.d.ts +13 -0
- package/dist/trails/no-throw-in-detour-recover.trail.d.ts.map +1 -0
- package/dist/trails/no-throw-in-detour-recover.trail.js +24 -0
- package/dist/trails/no-throw-in-detour-recover.trail.js.map +1 -0
- package/dist/trails/no-throw-in-detour-target.trail.d.ts +13 -3
- package/dist/trails/no-throw-in-detour-target.trail.d.ts.map +1 -1
- package/dist/trails/no-throw-in-implementation.trail.d.ts +2 -2
- package/dist/trails/no-throw-in-implementation.trail.d.ts.map +1 -1
- package/dist/trails/on-references-exist.trail.d.ts +24 -0
- package/dist/trails/on-references-exist.trail.d.ts.map +1 -0
- package/dist/trails/on-references-exist.trail.js +21 -0
- package/dist/trails/on-references-exist.trail.js.map +1 -0
- package/dist/trails/orphaned-signal.trail.d.ts +24 -0
- package/dist/trails/orphaned-signal.trail.d.ts.map +1 -0
- package/dist/trails/orphaned-signal.trail.js +36 -0
- package/dist/trails/orphaned-signal.trail.js.map +1 -0
- package/dist/trails/permit-governance.trail.d.ts +12 -0
- package/dist/trails/permit-governance.trail.d.ts.map +1 -0
- package/dist/trails/permit-governance.trail.js +47 -0
- package/dist/trails/permit-governance.trail.js.map +1 -0
- package/dist/trails/prefer-schema-inference.trail.d.ts +2 -2
- package/dist/trails/prefer-schema-inference.trail.d.ts.map +1 -1
- package/dist/trails/reference-exists.trail.d.ts +24 -0
- package/dist/trails/reference-exists.trail.d.ts.map +1 -0
- package/dist/trails/reference-exists.trail.js +25 -0
- package/dist/trails/reference-exists.trail.js.map +1 -0
- package/dist/trails/resource-declarations.trail.d.ts +13 -0
- package/dist/trails/resource-declarations.trail.d.ts.map +1 -0
- package/dist/trails/{provision-declarations.trail.js → resource-declarations.trail.js} +7 -7
- package/dist/trails/resource-declarations.trail.js.map +1 -0
- package/dist/trails/resource-exists.trail.d.ts +24 -0
- package/dist/trails/resource-exists.trail.d.ts.map +1 -0
- package/dist/trails/{provision-exists.trail.js → resource-exists.trail.js} +8 -8
- package/dist/trails/resource-exists.trail.js.map +1 -0
- package/dist/trails/resource-id-grammar.trail.d.ts +13 -0
- package/dist/trails/resource-id-grammar.trail.d.ts.map +1 -0
- package/dist/trails/resource-id-grammar.trail.js +38 -0
- package/dist/trails/resource-id-grammar.trail.js.map +1 -0
- package/dist/trails/run.d.ts +25 -9
- package/dist/trails/run.d.ts.map +1 -1
- package/dist/trails/run.js +63 -19
- package/dist/trails/run.js.map +1 -1
- package/dist/trails/schema.d.ts +28 -3
- package/dist/trails/schema.d.ts.map +1 -1
- package/dist/trails/schema.js +57 -4
- package/dist/trails/schema.js.map +1 -1
- package/dist/trails/unreachable-detour-shadowing.trail.d.ts +13 -0
- package/dist/trails/unreachable-detour-shadowing.trail.d.ts.map +1 -0
- package/dist/trails/unreachable-detour-shadowing.trail.js +44 -0
- package/dist/trails/unreachable-detour-shadowing.trail.js.map +1 -0
- package/dist/trails/valid-describe-refs.trail.d.ts +12 -3
- package/dist/trails/valid-describe-refs.trail.d.ts.map +1 -1
- package/dist/trails/valid-detour-contract.trail.d.ts +12 -0
- package/dist/trails/valid-detour-contract.trail.d.ts.map +1 -0
- package/dist/trails/valid-detour-contract.trail.js +66 -0
- package/dist/trails/valid-detour-contract.trail.js.map +1 -0
- package/dist/trails/valid-detour-refs.trail.d.ts +13 -3
- package/dist/trails/valid-detour-refs.trail.d.ts.map +1 -1
- package/dist/trails/warden-export-symmetry.trail.d.ts +13 -0
- package/dist/trails/warden-export-symmetry.trail.d.ts.map +1 -0
- package/dist/trails/warden-export-symmetry.trail.js +16 -0
- package/dist/trails/warden-export-symmetry.trail.js.map +1 -0
- package/dist/trails/warden-rules-use-ast.trail.d.ts +13 -0
- package/dist/trails/warden-rules-use-ast.trail.d.ts.map +1 -0
- package/dist/trails/warden-rules-use-ast.trail.js +41 -0
- package/dist/trails/warden-rules-use-ast.trail.js.map +1 -0
- package/dist/trails/wrap-rule.d.ts +16 -2
- package/dist/trails/wrap-rule.d.ts.map +1 -1
- package/dist/trails/wrap-rule.js +71 -11
- package/dist/trails/wrap-rule.js.map +1 -1
- package/package.json +7 -4
- package/src/__tests__/ast.test.ts +613 -0
- package/src/__tests__/circular-refs.test.ts +121 -0
- package/src/__tests__/cli.test.ts +360 -32
- package/src/__tests__/contour-exists.test.ts +203 -0
- package/src/__tests__/cross-declarations.test.ts +245 -0
- package/src/__tests__/dead-internal-trail.test.ts +81 -0
- package/src/__tests__/draft-rules-context.test.ts +150 -0
- package/src/__tests__/drift.test.ts +75 -5
- package/src/__tests__/error-mapping-completeness.test.ts +56 -0
- package/src/__tests__/example-valid.test.ts +101 -0
- package/src/__tests__/fires-declarations-param-destructure.test.ts +54 -0
- package/src/__tests__/fires-declarations.test.ts +652 -0
- package/src/__tests__/formatters.test.ts +2 -2
- package/src/__tests__/implementation-returns-result.test.ts +1016 -2
- package/src/__tests__/incomplete-accessor-for-standard-op.test.ts +337 -0
- package/src/__tests__/incomplete-crud.test.ts +498 -0
- package/src/__tests__/intent-propagation.test.ts +116 -0
- package/src/__tests__/missing-reconcile.test.ts +154 -0
- package/src/__tests__/missing-visibility.test.ts +108 -0
- package/src/__tests__/no-sync-result-assumption.test.ts +870 -39
- package/src/__tests__/no-throw-in-detour-recover.test.ts +93 -0
- package/src/__tests__/no-throw-in-implementation.test.ts +88 -0
- package/src/__tests__/on-references-exist.test.ts +151 -0
- package/src/__tests__/orphaned-signal.test.ts +137 -0
- package/src/__tests__/permit-governance.test.ts +66 -0
- package/src/__tests__/reference-exists.test.ts +281 -0
- package/src/__tests__/resource-declarations.test.ts +448 -0
- package/src/__tests__/resource-exists.test.ts +122 -0
- package/src/__tests__/resource-id-grammar.test.ts +50 -0
- package/src/__tests__/rules.test.ts +17 -77
- package/src/__tests__/topo-aware-rule.test.ts +257 -0
- package/src/__tests__/trails.test.ts +2 -2
- package/src/__tests__/unreachable-detour-shadowing.test.ts +128 -0
- package/src/__tests__/valid-describe-refs.test.ts +183 -0
- package/src/__tests__/valid-detour-contract.test.ts +86 -0
- package/src/__tests__/warden-export-symmetry.test.ts +251 -0
- package/src/__tests__/warden-rules-use-ast.test.ts +468 -0
- package/src/__tests__/wrap-rule.test.ts +3 -3
- package/src/cli.ts +458 -91
- package/src/draft.ts +22 -0
- package/src/drift.ts +63 -21
- package/src/formatters.ts +15 -4
- package/src/index.ts +62 -23
- package/src/rules/ast.ts +2715 -119
- package/src/rules/circular-refs.ts +154 -0
- package/src/rules/{context-no-trailhead-types.ts → context-no-surface-types.ts} +72 -12
- package/src/rules/contour-exists.ts +251 -0
- package/src/rules/contour-ids.ts +15 -0
- package/src/rules/cross-declarations.ts +277 -69
- package/src/rules/dead-internal-trail.ts +141 -0
- package/src/rules/draft-file-marking.ts +160 -0
- package/src/rules/draft-visible-debt.ts +87 -0
- package/src/rules/error-mapping-completeness.ts +273 -0
- package/src/rules/example-valid.ts +401 -0
- package/src/rules/fires-declarations.ts +609 -0
- package/src/rules/implementation-returns-result.ts +1042 -122
- package/src/rules/incomplete-accessor-for-standard-op.ts +315 -0
- package/src/rules/incomplete-crud.ts +579 -0
- package/src/rules/index.ts +95 -16
- package/src/rules/intent-propagation.ts +142 -0
- package/src/rules/missing-reconcile.ts +98 -0
- package/src/rules/missing-visibility.ts +110 -0
- package/src/rules/no-direct-impl-in-route.ts +0 -4
- package/src/rules/no-direct-implementation-call.ts +1 -1
- package/src/rules/no-sync-result-assumption.ts +1134 -96
- package/src/rules/no-throw-in-detour-recover.ts +225 -0
- package/src/rules/no-throw-in-implementation.ts +6 -4
- package/src/rules/on-references-exist.ts +194 -0
- package/src/rules/orphaned-signal.ts +150 -0
- package/src/rules/permit-governance.ts +25 -0
- package/src/rules/reference-exists.ts +98 -0
- package/src/rules/registry-names.ts +83 -0
- package/src/rules/{provision-declarations.ts → resource-declarations.ts} +208 -138
- package/src/rules/{provision-exists.ts → resource-exists.ts} +48 -51
- package/src/rules/resource-id-grammar.ts +65 -0
- package/src/rules/specs.ts +5 -1
- package/src/rules/types.ts +57 -4
- package/src/rules/unreachable-detour-shadowing.ts +375 -0
- package/src/rules/valid-describe-refs.ts +160 -32
- package/src/rules/valid-detour-contract.ts +78 -0
- package/src/rules/warden-export-symmetry.ts +533 -0
- package/src/rules/warden-rules-use-ast.ts +996 -0
- package/src/trails/circular-refs.trail.ts +29 -0
- package/src/trails/{context-no-trailhead-types.trail.ts → context-no-surface-types.trail.ts} +4 -4
- package/src/trails/contour-exists.trail.ts +21 -0
- package/src/trails/dead-internal-trail.trail.ts +26 -0
- package/src/trails/draft-file-marking.trail.ts +16 -0
- package/src/trails/draft-visible-debt.trail.ts +16 -0
- package/src/trails/error-mapping-completeness.trail.ts +29 -0
- package/src/trails/example-valid.trail.ts +25 -0
- package/src/trails/fires-declarations.trail.ts +22 -0
- package/src/trails/incomplete-accessor-for-standard-op.trail.ts +76 -0
- package/src/trails/incomplete-crud.trail.ts +39 -0
- package/src/trails/index.ts +40 -7
- package/src/trails/intent-propagation.trail.ts +30 -0
- package/src/trails/missing-reconcile.trail.ts +33 -0
- package/src/trails/missing-visibility.trail.ts +22 -0
- package/src/trails/no-throw-in-detour-recover.trail.ts +24 -0
- package/src/trails/on-references-exist.trail.ts +21 -0
- package/src/trails/orphaned-signal.trail.ts +36 -0
- package/src/trails/permit-governance.trail.ts +51 -0
- package/src/trails/reference-exists.trail.ts +25 -0
- package/src/trails/{provision-declarations.trail.ts → resource-declarations.trail.ts} +6 -6
- package/src/trails/{provision-exists.trail.ts → resource-exists.trail.ts} +7 -7
- package/src/trails/resource-id-grammar.trail.ts +39 -0
- package/src/trails/run.ts +121 -24
- package/src/trails/schema.ts +66 -4
- package/src/trails/unreachable-detour-shadowing.trail.ts +45 -0
- package/src/trails/valid-detour-contract.trail.ts +71 -0
- package/src/trails/warden-export-symmetry.trail.ts +16 -0
- package/src/trails/warden-rules-use-ast.trail.ts +45 -0
- package/src/trails/wrap-rule.ts +104 -12
- package/tsconfig.tests.json +10 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/rules/follow-declarations.d.ts +0 -13
- package/dist/rules/follow-declarations.d.ts.map +0 -1
- package/dist/rules/follow-declarations.js +0 -264
- package/dist/rules/follow-declarations.js.map +0 -1
- package/dist/rules/provision-declarations.d.ts +0 -14
- package/dist/rules/provision-declarations.d.ts.map +0 -1
- package/dist/rules/provision-declarations.js +0 -344
- package/dist/rules/provision-declarations.js.map +0 -1
- package/dist/rules/provision-exists.d.ts +0 -6
- package/dist/rules/provision-exists.d.ts.map +0 -1
- package/dist/rules/provision-exists.js +0 -89
- package/dist/rules/provision-exists.js.map +0 -1
- package/dist/rules/service-declarations.d.ts +0 -16
- package/dist/rules/service-declarations.d.ts.map +0 -1
- package/dist/rules/service-declarations.js +0 -346
- package/dist/rules/service-declarations.js.map +0 -1
- package/dist/rules/service-exists.d.ts +0 -8
- package/dist/rules/service-exists.d.ts.map +0 -1
- package/dist/rules/service-exists.js +0 -91
- package/dist/rules/service-exists.js.map +0 -1
- package/dist/trails/follow-declarations.trail.d.ts.map +0 -1
- package/dist/trails/follow-declarations.trail.js +0 -22
- package/dist/trails/follow-declarations.trail.js.map +0 -1
- package/dist/trails/provision-declarations.trail.d.ts.map +0 -1
- package/dist/trails/provision-declarations.trail.js.map +0 -1
- package/dist/trails/provision-exists.trail.d.ts +0 -15
- package/dist/trails/provision-exists.trail.d.ts.map +0 -1
- package/dist/trails/provision-exists.trail.js.map +0 -1
- package/dist/trails/service-declarations.trail.d.ts +0 -26
- package/dist/trails/service-declarations.trail.d.ts.map +0 -1
- package/dist/trails/service-declarations.trail.js +0 -27
- package/dist/trails/service-declarations.trail.js.map +0 -1
- package/dist/trails/service-exists.trail.d.ts +0 -32
- package/dist/trails/service-exists.trail.d.ts.map +0 -1
- package/dist/trails/service-exists.trail.js +0 -29
- package/dist/trails/service-exists.trail.js.map +0 -1
- package/src/__tests__/no-throw-in-detour-target.test.ts +0 -78
- package/src/__tests__/provision-declarations.test.ts +0 -318
- package/src/__tests__/provision-exists.test.ts +0 -122
- package/src/rules/no-throw-in-detour-target.ts +0 -150
- package/src/rules/valid-detour-refs.ts +0 -187
- package/src/trails/no-throw-in-detour-target.trail.ts +0 -20
- package/src/trails/valid-detour-refs.trail.ts +0 -24
|
@@ -44,7 +44,7 @@ const getStringValue = (node) => {
|
|
|
44
44
|
* Returns the string value if a simple `const <name> = '...'` or `"..."` is
|
|
45
45
|
* found in the source. Returns null for anything more complex.
|
|
46
46
|
*/
|
|
47
|
-
const
|
|
47
|
+
const deriveConstString = (name, sourceCode) => {
|
|
48
48
|
const pattern = new RegExp(`const\\s+${name}\\s*=\\s*(?:'([^']*)'|"([^"]*)")`);
|
|
49
49
|
const match = pattern.exec(sourceCode);
|
|
50
50
|
if (!match) {
|
|
@@ -58,10 +58,10 @@ const resolveIdentifierElement = (el, sourceCode) => {
|
|
|
58
58
|
if (!name) {
|
|
59
59
|
return null;
|
|
60
60
|
}
|
|
61
|
-
return
|
|
61
|
+
return deriveConstString(name, sourceCode);
|
|
62
62
|
};
|
|
63
63
|
/** Resolve an array element to a static trail ID when possible. */
|
|
64
|
-
const
|
|
64
|
+
const deriveCrossElementId = (element, sourceCode) => {
|
|
65
65
|
if (isStringLiteral(element)) {
|
|
66
66
|
return getStringValue(element);
|
|
67
67
|
}
|
|
@@ -86,21 +86,39 @@ const getCrossElements = (config) => {
|
|
|
86
86
|
const elements = arrayNode['elements'];
|
|
87
87
|
return elements ?? null;
|
|
88
88
|
};
|
|
89
|
-
/**
|
|
90
|
-
|
|
89
|
+
/**
|
|
90
|
+
* Collect string IDs from array elements, resolving identifiers when possible.
|
|
91
|
+
*
|
|
92
|
+
* Trail-object references (`crosses: [showGist]`) cannot be resolved at lint
|
|
93
|
+
* time; they're normalized at runtime by `trail()`. When any entry is
|
|
94
|
+
* unresolved, `hasUnresolved` is set so callers can soften diagnostics.
|
|
95
|
+
*/
|
|
96
|
+
/** Classify a single element and accumulate into the id set. */
|
|
97
|
+
const classifyCrossElement = (element, sourceCode, ids) => {
|
|
98
|
+
const resolved = deriveCrossElementId(element, sourceCode);
|
|
99
|
+
if (!resolved) {
|
|
100
|
+
// Element could not be statically resolved
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
ids.add(resolved);
|
|
104
|
+
return false;
|
|
105
|
+
};
|
|
106
|
+
const resolveDeclaredCrossElements = (elements, sourceCode) => {
|
|
91
107
|
const ids = new Set();
|
|
108
|
+
let hasUnresolved = false;
|
|
92
109
|
for (const element of elements) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
ids.add(resolved);
|
|
110
|
+
if (classifyCrossElement(element, sourceCode, ids)) {
|
|
111
|
+
hasUnresolved = true;
|
|
96
112
|
}
|
|
97
113
|
}
|
|
98
|
-
return ids;
|
|
114
|
+
return { hasUnresolved, ids };
|
|
99
115
|
};
|
|
100
|
-
/** Extract
|
|
116
|
+
/** Extract declared crosses from a `crosses: [...]` array. */
|
|
101
117
|
const extractDeclaredCrosses = (config, sourceCode) => {
|
|
102
118
|
const elements = getCrossElements(config);
|
|
103
|
-
return elements
|
|
119
|
+
return elements
|
|
120
|
+
? resolveDeclaredCrossElements(elements, sourceCode)
|
|
121
|
+
: { hasUnresolved: false, ids: new Set() };
|
|
104
122
|
};
|
|
105
123
|
// ---------------------------------------------------------------------------
|
|
106
124
|
// Called crossing extraction — member expression helpers
|
|
@@ -115,89 +133,172 @@ const extractMemberPair = (callee) => {
|
|
|
115
133
|
const propName = identifierName(callee.property);
|
|
116
134
|
return objName && propName ? { objName, propName } : null;
|
|
117
135
|
};
|
|
118
|
-
/** Extract the first argument string from a CallExpression's arguments list. */
|
|
119
|
-
const extractFirstStringArg = (node) => {
|
|
120
|
-
const args = node['arguments'];
|
|
121
|
-
if (!args || args.length === 0) {
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
const [firstArg] = args;
|
|
125
|
-
if (!firstArg || !isStringLiteral(firstArg)) {
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
128
|
-
return getStringValue(firstArg);
|
|
129
|
-
};
|
|
130
136
|
/**
|
|
131
137
|
* Extract the second parameter name from a blaze function node.
|
|
132
138
|
*
|
|
133
|
-
* Handles `(input, ctx) => ...`, `async (input, context) => ...`,
|
|
134
|
-
* `function(input, ctx) { ... }
|
|
139
|
+
* Handles `(input, ctx) => ...`, `async (input, context) => ...`,
|
|
140
|
+
* `function(input, ctx) { ... }`, and defaulted params like
|
|
141
|
+
* `(input, ctx = fallback) => ...` (AssignmentPattern whose `.left` is the
|
|
142
|
+
* Identifier).
|
|
135
143
|
*/
|
|
136
144
|
const extractContextParamName = (blazeBody) => {
|
|
137
145
|
const params = blazeBody['params'];
|
|
138
146
|
if (!params || params.length < 2) {
|
|
139
147
|
return null;
|
|
140
148
|
}
|
|
141
|
-
|
|
149
|
+
const [, param] = params;
|
|
150
|
+
if (param?.type === 'AssignmentPattern') {
|
|
151
|
+
const { left } = param;
|
|
152
|
+
return identifierName(left);
|
|
153
|
+
}
|
|
154
|
+
return identifierName(param);
|
|
142
155
|
};
|
|
143
156
|
/** Check if a callee is a member-style cross call: <ctxName>.cross(...). */
|
|
144
157
|
const isMemberCrossCall = (callee, ctxNames) => {
|
|
145
158
|
const pair = extractMemberPair(callee);
|
|
146
159
|
return !!pair && ctxNames.has(pair.objName) && pair.propName === 'cross';
|
|
147
160
|
};
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
161
|
+
const unresolvedCross = () => ({
|
|
162
|
+
hasUnresolved: true,
|
|
163
|
+
ids: [],
|
|
164
|
+
});
|
|
165
|
+
const resolveBatchCrossTupleTarget = (element, sourceCode) => {
|
|
166
|
+
if (element.type !== 'ArrayExpression') {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
const tupleElements = element['elements'];
|
|
170
|
+
const [target] = tupleElements ?? [];
|
|
171
|
+
return target ? deriveCrossElementId(target, sourceCode) : null;
|
|
172
|
+
};
|
|
173
|
+
const collectBatchCrossId = (element, sourceCode, ids) => {
|
|
174
|
+
const resolved = resolveBatchCrossTupleTarget(element, sourceCode);
|
|
175
|
+
if (!resolved) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
ids.push(resolved);
|
|
179
|
+
return false;
|
|
180
|
+
};
|
|
181
|
+
/** Extract statically-resolved trail IDs from `ctx.cross([[trail, input], ...])`. */
|
|
182
|
+
const extractBatchCrossIds = (firstArg, sourceCode) => {
|
|
183
|
+
if (firstArg?.type !== 'ArrayExpression') {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
const elements = firstArg['elements'];
|
|
187
|
+
const ids = [];
|
|
188
|
+
let hasUnresolved = false;
|
|
189
|
+
for (const element of elements ?? []) {
|
|
190
|
+
if (collectBatchCrossId(element, sourceCode, ids)) {
|
|
191
|
+
hasUnresolved = true;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return { hasUnresolved, ids };
|
|
195
|
+
};
|
|
196
|
+
const extractDirectCrossIds = (firstArg) => {
|
|
197
|
+
if (!firstArg || !isStringLiteral(firstArg)) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
const value = getStringValue(firstArg);
|
|
201
|
+
return value ? { hasUnresolved: false, ids: [value] } : unresolvedCross();
|
|
202
|
+
};
|
|
203
|
+
const isCrossCallExpression = (callee, ctxNames) => isMemberCrossCall(callee, ctxNames) || identifierName(callee) === 'cross';
|
|
204
|
+
const extractCrossFirstArg = (node) => {
|
|
205
|
+
const args = node['arguments'];
|
|
206
|
+
return args?.[0];
|
|
207
|
+
};
|
|
208
|
+
const resolveCrossCallNode = (node, ctxNames) => {
|
|
154
209
|
if (node.type !== 'CallExpression') {
|
|
155
210
|
return null;
|
|
156
211
|
}
|
|
157
212
|
const callee = node['callee'];
|
|
158
|
-
if (!callee) {
|
|
213
|
+
if (!callee || !isCrossCallExpression(callee, ctxNames)) {
|
|
159
214
|
return null;
|
|
160
215
|
}
|
|
161
|
-
|
|
162
|
-
|
|
216
|
+
return node;
|
|
217
|
+
};
|
|
218
|
+
const resolveCrossCallTargets = (firstArg, sourceCode) => {
|
|
219
|
+
const direct = extractDirectCrossIds(firstArg);
|
|
220
|
+
if (direct) {
|
|
221
|
+
return direct;
|
|
163
222
|
}
|
|
164
|
-
|
|
165
|
-
|
|
223
|
+
const batch = extractBatchCrossIds(firstArg, sourceCode);
|
|
224
|
+
return batch ?? unresolvedCross();
|
|
225
|
+
};
|
|
226
|
+
/**
|
|
227
|
+
* Check if a node is a `<ctxName>.cross(...)` call and return any statically
|
|
228
|
+
* resolvable target IDs.
|
|
229
|
+
*
|
|
230
|
+
* Also matches bare `cross(...)` calls from destructuring. When the first
|
|
231
|
+
* argument is a non-string expression (e.g. a trail object identifier like
|
|
232
|
+
* `ctx.cross(showGist, input)`), marks the call as unresolved so callers can
|
|
233
|
+
* track that a cross call exists but its target cannot be statically resolved.
|
|
234
|
+
*/
|
|
235
|
+
const extractCrossCall = (node, ctxNames, sourceCode) => {
|
|
236
|
+
const crossCall = resolveCrossCallNode(node, ctxNames);
|
|
237
|
+
if (!crossCall) {
|
|
238
|
+
return null;
|
|
166
239
|
}
|
|
167
|
-
return
|
|
240
|
+
return resolveCrossCallTargets(extractCrossFirstArg(crossCall), sourceCode);
|
|
168
241
|
};
|
|
169
|
-
/**
|
|
242
|
+
/**
|
|
243
|
+
* Build the set of context parameter names to match against.
|
|
244
|
+
*
|
|
245
|
+
* Returns ONLY the actual second-parameter name from the blaze signature.
|
|
246
|
+
* No seeded defaults: if the blaze has no second parameter, the returned set
|
|
247
|
+
* is empty and no `ctx.cross(...)` / `context.cross(...)` calls are tracked
|
|
248
|
+
* for that blaze. An unrelated closure-scoped `ctx` identifier is not the
|
|
249
|
+
* trail context and must not be treated as one.
|
|
250
|
+
*
|
|
251
|
+
* Mirrors `fires-declarations.ts` and `resource-declarations.ts` for the same
|
|
252
|
+
* reason.
|
|
253
|
+
*/
|
|
170
254
|
const buildCtxNames = (body) => {
|
|
171
|
-
const ctxNames = new Set(
|
|
255
|
+
const ctxNames = new Set();
|
|
172
256
|
const paramName = extractContextParamName(body);
|
|
173
257
|
if (paramName) {
|
|
174
258
|
ctxNames.add(paramName);
|
|
175
259
|
}
|
|
176
260
|
return ctxNames;
|
|
177
261
|
};
|
|
262
|
+
/** Collect cross call results from a single blaze body. */
|
|
263
|
+
const collectCrossCallsFromBody = (body, ids, sourceCode) => {
|
|
264
|
+
const ctxNames = buildCtxNames(body);
|
|
265
|
+
let foundUnresolved = false;
|
|
266
|
+
walk(body, (node) => {
|
|
267
|
+
const extracted = extractCrossCall(node, ctxNames, sourceCode);
|
|
268
|
+
if (!extracted) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
if (extracted.hasUnresolved) {
|
|
272
|
+
foundUnresolved = true;
|
|
273
|
+
}
|
|
274
|
+
for (const id of extracted.ids) {
|
|
275
|
+
ids.add(id);
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
return foundUnresolved;
|
|
279
|
+
};
|
|
178
280
|
/** Walk blaze bodies and collect all statically resolvable ctx.cross() trail IDs. */
|
|
179
|
-
const extractCalledCrosses = (config) => {
|
|
281
|
+
const extractCalledCrosses = (config, sourceCode) => {
|
|
180
282
|
const ids = new Set();
|
|
283
|
+
let hasUnresolved = false;
|
|
181
284
|
for (const body of findBlazeBodies(config)) {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if (id) {
|
|
186
|
-
ids.add(id);
|
|
187
|
-
}
|
|
188
|
-
});
|
|
285
|
+
if (collectCrossCallsFromBody(body, ids, sourceCode)) {
|
|
286
|
+
hasUnresolved = true;
|
|
287
|
+
}
|
|
189
288
|
}
|
|
190
|
-
return ids;
|
|
289
|
+
return { hasUnresolved, ids };
|
|
191
290
|
};
|
|
192
291
|
// ---------------------------------------------------------------------------
|
|
193
292
|
// Diagnostic builders
|
|
194
293
|
// ---------------------------------------------------------------------------
|
|
195
|
-
const buildUndeclaredDiagnostic = (trailId, crossedId, filePath, line) => ({
|
|
294
|
+
const buildUndeclaredDiagnostic = (trailId, crossedId, filePath, line, softened = false) => ({
|
|
196
295
|
filePath,
|
|
197
296
|
line,
|
|
198
|
-
message:
|
|
297
|
+
message: softened
|
|
298
|
+
? `Trail "${trailId}": ctx.cross('${crossedId}') called but '${crossedId}' is not declared in crosses (may be declared via trail object references)`
|
|
299
|
+
: `Trail "${trailId}": ctx.cross('${crossedId}') called but '${crossedId}' is not declared in crosses`,
|
|
199
300
|
rule: 'cross-declarations',
|
|
200
|
-
severity: 'error',
|
|
301
|
+
severity: softened ? 'warn' : 'error',
|
|
201
302
|
});
|
|
202
303
|
const buildUnusedDiagnostic = (trailId, crossedId, filePath, line) => ({
|
|
203
304
|
filePath,
|
|
@@ -213,7 +314,7 @@ const buildUnusedDiagnostic = (trailId, crossedId, filePath, line) => ({
|
|
|
213
314
|
const reportUndeclared = (called, declared, ctx, diagnostics) => {
|
|
214
315
|
for (const id of called) {
|
|
215
316
|
if (!declared.has(id)) {
|
|
216
|
-
diagnostics.push(buildUndeclaredDiagnostic(ctx.trailId, id, ctx.filePath, ctx.line));
|
|
317
|
+
diagnostics.push(buildUndeclaredDiagnostic(ctx.trailId, id, ctx.filePath, ctx.line, ctx.softened));
|
|
217
318
|
}
|
|
218
319
|
}
|
|
219
320
|
};
|
|
@@ -227,14 +328,27 @@ const reportUnused = (declared, called, ctx, diagnostics) => {
|
|
|
227
328
|
};
|
|
228
329
|
const checkTrailDefinition = (def, filePath, sourceCode, diagnostics) => {
|
|
229
330
|
const declared = extractDeclaredCrosses(def.config, sourceCode);
|
|
230
|
-
const called = extractCalledCrosses(def.config);
|
|
231
|
-
if (declared.size === 0 &&
|
|
331
|
+
const called = extractCalledCrosses(def.config, sourceCode);
|
|
332
|
+
if (declared.ids.size === 0 &&
|
|
333
|
+
!declared.hasUnresolved &&
|
|
334
|
+
called.ids.size === 0 &&
|
|
335
|
+
!called.hasUnresolved) {
|
|
232
336
|
return;
|
|
233
337
|
}
|
|
234
338
|
const line = offsetToLine(sourceCode, def.start);
|
|
235
339
|
const ctx = { filePath, line, trailId: def.id };
|
|
236
|
-
|
|
237
|
-
|
|
340
|
+
// When the declared array contains trail object references we can't resolve,
|
|
341
|
+
// downgrade "undeclared" diagnostics from error to warn. The developer still
|
|
342
|
+
// sees genuinely undeclared calls, but we can't statically prove the call
|
|
343
|
+
// isn't covered by a trail object entry the runtime will normalize.
|
|
344
|
+
reportUndeclared(called.ids, declared.ids, { ...ctx, softened: declared.hasUnresolved }, diagnostics);
|
|
345
|
+
// When all ctx.cross() calls are statically resolved, report unused
|
|
346
|
+
// declarations. When some calls use trail object references (unresolved),
|
|
347
|
+
// skip — a declared string like 'gist.show' might be the target of an
|
|
348
|
+
// unresolved `ctx.cross(showGist)` call, producing false positives.
|
|
349
|
+
if (!called.hasUnresolved) {
|
|
350
|
+
reportUnused(declared.ids, called.ids, ctx, diagnostics);
|
|
351
|
+
}
|
|
238
352
|
};
|
|
239
353
|
// ---------------------------------------------------------------------------
|
|
240
354
|
// Rule
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-declarations.js","sourceRoot":"","sources":["../../src/rules/cross-declarations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cross-declarations.js","sourceRoot":"","sources":["../../src/rules/cross-declarations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-internal-trail.d.ts","sourceRoot":"","sources":["../../src/rules/dead-internal-trail.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AA+FpB,eAAO,MAAM,iBAAiB,EAAE,sBA8B/B,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { collectCrossTargetTrailIds, findConfigProperty, findTrailDefinitions, getStringValue, isStringLiteral, offsetToLine, parse, } from './ast.js';
|
|
2
|
+
import { isTestFile } from './scan.js';
|
|
3
|
+
const isNonEmptyActivationValue = (onValue) => {
|
|
4
|
+
// Identifier reference (e.g. `on: signalsArray`) — conservatively treat as
|
|
5
|
+
// having activation to avoid false positives. We can't cheaply resolve what
|
|
6
|
+
// the identifier binds to, so assume it's a non-empty activation.
|
|
7
|
+
if (onValue.type === 'Identifier') {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
if (onValue.type !== 'ArrayExpression') {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const elements = onValue['elements'];
|
|
14
|
+
return (elements?.length ?? 0) > 0;
|
|
15
|
+
};
|
|
16
|
+
const hasOnActivation = (config) => {
|
|
17
|
+
const onProp = findConfigProperty(config, 'on');
|
|
18
|
+
const onValue = onProp?.value;
|
|
19
|
+
return onValue ? isNonEmptyActivationValue(onValue) : false;
|
|
20
|
+
};
|
|
21
|
+
const hasExplicitInternalVisibility = (config) => {
|
|
22
|
+
const visibilityProp = findConfigProperty(config, 'visibility');
|
|
23
|
+
const visibilityValue = visibilityProp?.value;
|
|
24
|
+
return (!!visibilityValue &&
|
|
25
|
+
isStringLiteral(visibilityValue) &&
|
|
26
|
+
getStringValue(visibilityValue) === 'internal');
|
|
27
|
+
};
|
|
28
|
+
/** Check legacy `meta: { internal: true }` convention (mirrors runtime effectiveVisibility). */
|
|
29
|
+
const hasLegacyMetaInternal = (config) => {
|
|
30
|
+
const metaProp = findConfigProperty(config, 'meta');
|
|
31
|
+
const metaValue = metaProp?.value;
|
|
32
|
+
if (!metaValue || metaValue.type !== 'ObjectExpression') {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
const internalProp = findConfigProperty(metaValue, 'internal');
|
|
36
|
+
const internalValue = internalProp?.value;
|
|
37
|
+
return (internalValue?.type === 'BooleanLiteral' &&
|
|
38
|
+
internalValue.value === true);
|
|
39
|
+
};
|
|
40
|
+
const isInternalTrail = (config) => hasExplicitInternalVisibility(config) || hasLegacyMetaInternal(config);
|
|
41
|
+
const buildDeadInternalTrailDiagnostic = (trailId, filePath, line) => ({
|
|
42
|
+
filePath,
|
|
43
|
+
line,
|
|
44
|
+
message: `Trail "${trailId}" is marked visibility: 'internal' but nothing crosses it and it has no on: activation. Internal trails should stay reachable through ctx.cross() or reactive activation.`,
|
|
45
|
+
rule: 'dead-internal-trail',
|
|
46
|
+
severity: 'warn',
|
|
47
|
+
});
|
|
48
|
+
const checkDeadInternalTrails = (ast, sourceCode, filePath, crossedTrailIds) => {
|
|
49
|
+
if (isTestFile(filePath) || !ast) {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
const diagnostics = [];
|
|
53
|
+
for (const def of findTrailDefinitions(ast)) {
|
|
54
|
+
if (def.kind !== 'trail' || !isInternalTrail(def.config)) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (hasOnActivation(def.config) || crossedTrailIds.has(def.id)) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
diagnostics.push(buildDeadInternalTrailDiagnostic(def.id, filePath, offsetToLine(sourceCode, def.start)));
|
|
61
|
+
}
|
|
62
|
+
return diagnostics;
|
|
63
|
+
};
|
|
64
|
+
export const deadInternalTrail = {
|
|
65
|
+
check(sourceCode, filePath) {
|
|
66
|
+
const ast = parse(filePath, sourceCode);
|
|
67
|
+
return checkDeadInternalTrails(ast, sourceCode, filePath, ast ? collectCrossTargetTrailIds(ast, sourceCode) : new Set());
|
|
68
|
+
},
|
|
69
|
+
checkWithContext(sourceCode, filePath, context) {
|
|
70
|
+
const ast = parse(filePath, sourceCode);
|
|
71
|
+
const localCrossTargetTrailIds = ast
|
|
72
|
+
? collectCrossTargetTrailIds(ast, sourceCode)
|
|
73
|
+
: new Set();
|
|
74
|
+
return checkDeadInternalTrails(ast, sourceCode, filePath, context.crossTargetTrailIds ?? localCrossTargetTrailIds);
|
|
75
|
+
},
|
|
76
|
+
description: 'Warn when an internal trail has no crossings anywhere in the project and no on: activation.',
|
|
77
|
+
name: 'dead-internal-trail',
|
|
78
|
+
severity: 'warn',
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=dead-internal-trail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-internal-trail.js","sourceRoot":"","sources":["../../src/rules/dead-internal-trail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-file-marking.d.ts","sourceRoot":"","sources":["../../src/rules/draft-file-marking.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAmI/D;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAa9B,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { isDraftId } from '@ontrails/core';
|
|
2
|
+
import { isDraftMarkedFile } from '../draft.js';
|
|
3
|
+
import { collectFrameworkDraftPrefixConstantOffsets, findStringLiterals, hasIgnoreCommentOnLine, offsetToLine, parse, splitSourceLines, } from './ast.js';
|
|
4
|
+
const messageForMissingMarker = (draftId) => `Draft id "${draftId}" appears in source, but the file is not draft-marked. ` +
|
|
5
|
+
'Rename it with an _draft. prefix or a .draft. trailing segment.';
|
|
6
|
+
const makeDiagnostic = (sourceCode, filePath, start, message, severity) => ({
|
|
7
|
+
filePath,
|
|
8
|
+
line: offsetToLine(sourceCode, start),
|
|
9
|
+
message,
|
|
10
|
+
rule: 'draft-file-marking',
|
|
11
|
+
severity,
|
|
12
|
+
});
|
|
13
|
+
const collectDraftMatches = (sourceCode, filePath, ast) => {
|
|
14
|
+
const frameworkConstantOffsets = collectFrameworkDraftPrefixConstantOffsets(ast, filePath);
|
|
15
|
+
const lines = splitSourceLines(sourceCode);
|
|
16
|
+
return findStringLiterals(ast, (value) => isDraftId(value)).filter((match) => {
|
|
17
|
+
if (frameworkConstantOffsets.has(match.start)) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if (hasIgnoreCommentOnLine(lines, offsetToLine(sourceCode, match.start))) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
const draftMissingMarkerDiagnostic = (sourceCode, filePath, ast) => {
|
|
27
|
+
const draftMatches = collectDraftMatches(sourceCode, filePath, ast);
|
|
28
|
+
if (!draftMatches.length || isDraftMarkedFile(filePath)) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const [first] = draftMatches;
|
|
32
|
+
if (!first) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
return makeDiagnostic(sourceCode, filePath, first.start, messageForMissingMarker(first.value), 'error');
|
|
36
|
+
};
|
|
37
|
+
const draftMarkedWithoutIdsDiagnostic = (filePath, ast) => {
|
|
38
|
+
// Deciding whether the file's `_draft.` marker is still warranted is a
|
|
39
|
+
// question about *all* draft ids present in source, not just the unsuppressed
|
|
40
|
+
// ones. Pragma-suppressed ids still justify a draft-marked filename — a user
|
|
41
|
+
// intentionally silencing them has not removed the draft content. We
|
|
42
|
+
// therefore filter only the framework-constant declarations (which are not
|
|
43
|
+
// draft ids at all) and bypass the pragma filter that `collectDraftMatches`
|
|
44
|
+
// applies.
|
|
45
|
+
const frameworkConstantOffsets = collectFrameworkDraftPrefixConstantOffsets(ast, filePath);
|
|
46
|
+
const unsuppressedDraftIds = findStringLiterals(ast, (value) => isDraftId(value)).filter((match) => !frameworkConstantOffsets.has(match.start));
|
|
47
|
+
if (unsuppressedDraftIds.length > 0) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
if (!isDraftMarkedFile(filePath)) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
filePath,
|
|
55
|
+
line: 1,
|
|
56
|
+
message: 'File is draft-marked but no longer contains draft ids. Remove the draft filename marker or finish the promotion cleanup.',
|
|
57
|
+
rule: 'draft-file-marking',
|
|
58
|
+
severity: 'warn',
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
const collectDraftFileMarkingDiagnostics = (sourceCode, filePath, ast) => {
|
|
62
|
+
const missingMarkerDiagnostic = draftMissingMarkerDiagnostic(sourceCode, filePath, ast);
|
|
63
|
+
if (missingMarkerDiagnostic) {
|
|
64
|
+
return [missingMarkerDiagnostic];
|
|
65
|
+
}
|
|
66
|
+
const markedWithoutIdsDiagnostic = draftMarkedWithoutIdsDiagnostic(filePath, ast);
|
|
67
|
+
if (markedWithoutIdsDiagnostic) {
|
|
68
|
+
return [markedWithoutIdsDiagnostic];
|
|
69
|
+
}
|
|
70
|
+
return [];
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Ensures files containing draft ids are visibly marked as draft-bearing files.
|
|
74
|
+
*/
|
|
75
|
+
export const draftFileMarking = {
|
|
76
|
+
check(sourceCode, filePath) {
|
|
77
|
+
const ast = parse(filePath, sourceCode);
|
|
78
|
+
if (!ast) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
return collectDraftFileMarkingDiagnostics(sourceCode, filePath, ast);
|
|
82
|
+
},
|
|
83
|
+
description: 'Require draft-bearing files to use _draft.* or *.draft.* filename markers.',
|
|
84
|
+
name: 'draft-file-marking',
|
|
85
|
+
severity: 'error',
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=draft-file-marking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-file-marking.js","sourceRoot":"","sources":["../../src/rules/draft-file-marking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,0CAA0C,EAC1C,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,KAAK,EACL,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAIlB,MAAM,uBAAuB,GAAG,CAAC,OAAe,EAAU,EAAE,CAC1D,aAAa,OAAO,yDAAyD;IAC7E,iEAAiE,CAAC;AAEpE,MAAM,cAAc,GAAG,CACrB,UAAkB,EAClB,QAAgB,EAChB,KAAa,EACb,OAAe,EACf,QAAsC,EACpB,EAAE,CAAC,CAAC;IACtB,QAAQ;IACR,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC;IACrC,OAAO;IACP,IAAI,EAAE,oBAAoB;IAC1B,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAC1B,UAAkB,EAClB,QAAgB,EAChB,GAA0C,EACpB,EAAE;IACxB,MAAM,wBAAwB,GAAG,0CAA0C,CACzE,GAAG,EACH,QAAQ,CACT,CAAC;IACF,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC3C,OAAO,kBAAkB,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAChE,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IACE,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EACpE,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CACnC,UAAkB,EAClB,QAAgB,EAChB,GAA0C,EACjB,EAAE;IAC3B,MAAM,YAAY,GAAG,mBAAmB,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpE,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,cAAc,CACnB,UAAU,EACV,QAAQ,EACR,KAAK,CAAC,KAAK,EACX,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,EACpC,OAAO,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,CACtC,QAAgB,EAChB,GAA0C,EACjB,EAAE;IAC3B,uEAAuE;IACvE,8EAA8E;IAC9E,6EAA6E;IAC7E,qEAAqE;IACrE,2EAA2E;IAC3E,4EAA4E;IAC5E,WAAW;IACX,MAAM,wBAAwB,GAAG,0CAA0C,CACzE,GAAG,EACH,QAAQ,CACT,CAAC;IACF,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAC7D,SAAS,CAAC,KAAK,CAAC,CACjB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAEhE,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,QAAQ;QACR,IAAI,EAAE,CAAC;QACP,OAAO,EACL,0HAA0H;QAC5H,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,MAAM;KACjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,kCAAkC,GAAG,CACzC,UAAkB,EAClB,QAAgB,EAChB,GAA0C,EACtB,EAAE;IACtB,MAAM,uBAAuB,GAAG,4BAA4B,CAC1D,UAAU,EACV,QAAQ,EACR,GAAG,CACJ,CAAC;IACF,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,0BAA0B,GAAG,+BAA+B,CAChE,QAAQ,EACR,GAAG,CACJ,CAAC;IACF,IAAI,0BAA0B,EAAE,CAAC;QAC/B,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,kCAAkC,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,WAAW,EACT,4EAA4E;IAC9E,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,OAAO;CAClB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { WardenRule } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Warns when draft ids are still present so the debt stays visible during
|
|
4
|
+
* review even when the file is correctly marked.
|
|
5
|
+
*
|
|
6
|
+
* Severity is intentionally `warn`, not `error`. The hard rejection layer for
|
|
7
|
+
* draft state leaking into established outputs is `validateEstablishedTopo` at
|
|
8
|
+
* runtime — it blocks topo export, trailhead projection, and lockfile writes.
|
|
9
|
+
* This rule surfaces the debt for human reviewers without duplicating that layer.
|
|
10
|
+
*/
|
|
11
|
+
export declare const draftVisibleDebt: WardenRule;
|
|
12
|
+
//# sourceMappingURL=draft-visible-debt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-visible-debt.d.ts","sourceRoot":"","sources":["../../src/rules/draft-visible-debt.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAsD/D;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAa9B,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { isDraftId } from '@ontrails/core';
|
|
2
|
+
import { collectFrameworkDraftPrefixConstantOffsets, findStringLiterals, hasIgnoreCommentOnLine, offsetToLine, parse, splitSourceLines, } from './ast.js';
|
|
3
|
+
const createDiagnostic = (sourceCode, filePath, match) => ({
|
|
4
|
+
filePath,
|
|
5
|
+
line: offsetToLine(sourceCode, match.start),
|
|
6
|
+
message: `Draft id "${match.value}" is still visible debt. ` +
|
|
7
|
+
'Established trailheads, lock export, and OpenAPI generation will reject it until it is promoted.',
|
|
8
|
+
rule: 'draft-visible-debt',
|
|
9
|
+
severity: 'warn',
|
|
10
|
+
});
|
|
11
|
+
const isSuppressedMatch = (match, sourceCode, lines, frameworkConstantOffsets) => frameworkConstantOffsets.has(match.start) ||
|
|
12
|
+
hasIgnoreCommentOnLine(lines, offsetToLine(sourceCode, match.start));
|
|
13
|
+
const collectDraftVisibleDebtDiagnostics = (sourceCode, filePath, ast) => {
|
|
14
|
+
const frameworkConstantOffsets = collectFrameworkDraftPrefixConstantOffsets(ast, filePath);
|
|
15
|
+
const lines = splitSourceLines(sourceCode);
|
|
16
|
+
const seen = new Set();
|
|
17
|
+
return findStringLiterals(ast, (value) => isDraftId(value)).flatMap((match) => {
|
|
18
|
+
if (isSuppressedMatch(match, sourceCode, lines, frameworkConstantOffsets)) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
const key = `${match.value}:${String(match.start)}`;
|
|
22
|
+
if (seen.has(key)) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
seen.add(key);
|
|
26
|
+
return [createDiagnostic(sourceCode, filePath, match)];
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Warns when draft ids are still present so the debt stays visible during
|
|
31
|
+
* review even when the file is correctly marked.
|
|
32
|
+
*
|
|
33
|
+
* Severity is intentionally `warn`, not `error`. The hard rejection layer for
|
|
34
|
+
* draft state leaking into established outputs is `validateEstablishedTopo` at
|
|
35
|
+
* runtime — it blocks topo export, trailhead projection, and lockfile writes.
|
|
36
|
+
* This rule surfaces the debt for human reviewers without duplicating that layer.
|
|
37
|
+
*/
|
|
38
|
+
export const draftVisibleDebt = {
|
|
39
|
+
check(sourceCode, filePath) {
|
|
40
|
+
const ast = parse(filePath, sourceCode);
|
|
41
|
+
if (!ast) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
return collectDraftVisibleDebtDiagnostics(sourceCode, filePath, ast);
|
|
45
|
+
},
|
|
46
|
+
description: 'Warn when draft ids remain in source so the debt stays visible during review.',
|
|
47
|
+
name: 'draft-visible-debt',
|
|
48
|
+
severity: 'warn',
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=draft-visible-debt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-visible-debt.js","sourceRoot":"","sources":["../../src/rules/draft-visible-debt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EACL,0CAA0C,EAC1C,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,KAAK,EACL,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAGlB,MAAM,gBAAgB,GAAG,CACvB,UAAkB,EAClB,QAAgB,EAChB,KAAuC,EACrB,EAAE,CAAC,CAAC;IACtB,QAAQ;IACR,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;IAC3C,OAAO,EACL,aAAa,KAAK,CAAC,KAAK,2BAA2B;QACnD,kGAAkG;IACpG,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,MAAM;CACjB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CACxB,KAAwB,EACxB,UAAkB,EAClB,KAAwB,EACxB,wBAA6C,EACpC,EAAE,CACX,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACzC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEvE,MAAM,kCAAkC,GAAG,CACzC,UAAkB,EAClB,QAAgB,EAChB,GAA0C,EACtB,EAAE;IACtB,MAAM,wBAAwB,GAAG,0CAA0C,CACzE,GAAG,EACH,QAAQ,CACT,CAAC;IACF,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,OAAO,kBAAkB,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CACjE,CAAC,KAAK,EAAE,EAAE;QACR,IACE,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,wBAAwB,CAAC,EACrE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,kCAAkC,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,WAAW,EACT,+EAA+E;IACjF,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,MAAM;CACjB,CAAC"}
|