@nielspeter/eess-ts 0.2.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -35
- package/dist/builders/call-rule-builder.d.ts +66 -26
- package/dist/builders/call-rule-builder.d.ts.map +1 -1
- package/dist/builders/call-rule-builder.js +75 -32
- package/dist/builders/call-rule-builder.js.map +1 -1
- package/dist/builders/class-rule-builder.d.ts +125 -26
- package/dist/builders/class-rule-builder.d.ts.map +1 -1
- package/dist/builders/class-rule-builder.js +141 -55
- package/dist/builders/class-rule-builder.js.map +1 -1
- package/dist/builders/correspondence-builder.d.ts +287 -0
- package/dist/builders/correspondence-builder.d.ts.map +1 -0
- package/dist/builders/correspondence-builder.js +385 -0
- package/dist/builders/correspondence-builder.js.map +1 -0
- package/dist/builders/correspondence-findings.d.ts +104 -0
- package/dist/builders/correspondence-findings.d.ts.map +1 -0
- package/dist/builders/correspondence-findings.js +301 -0
- package/dist/builders/correspondence-findings.js.map +1 -0
- package/dist/builders/cross-layer-builder.d.ts +99 -16
- package/dist/builders/cross-layer-builder.d.ts.map +1 -1
- package/dist/builders/cross-layer-builder.js +182 -35
- package/dist/builders/cross-layer-builder.js.map +1 -1
- package/dist/builders/function-rule-builder.d.ts +144 -25
- package/dist/builders/function-rule-builder.d.ts.map +1 -1
- package/dist/builders/function-rule-builder.js +177 -39
- package/dist/builders/function-rule-builder.js.map +1 -1
- package/dist/builders/jsx-rule-builder.d.ts +70 -14
- package/dist/builders/jsx-rule-builder.d.ts.map +1 -1
- package/dist/builders/jsx-rule-builder.js +73 -14
- package/dist/builders/jsx-rule-builder.js.map +1 -1
- package/dist/builders/module-rule-builder.d.ts +2 -2
- package/dist/builders/module-rule-builder.d.ts.map +1 -1
- package/dist/builders/module-rule-builder.js +16 -19
- package/dist/builders/module-rule-builder.js.map +1 -1
- package/dist/builders/scoped-function-rule-builder.d.ts +11 -0
- package/dist/builders/scoped-function-rule-builder.d.ts.map +1 -1
- package/dist/builders/scoped-function-rule-builder.js +12 -0
- package/dist/builders/scoped-function-rule-builder.js.map +1 -1
- package/dist/builders/slice-discovery-message.d.ts +36 -0
- package/dist/builders/slice-discovery-message.d.ts.map +1 -0
- package/dist/builders/slice-discovery-message.js +181 -0
- package/dist/builders/slice-discovery-message.js.map +1 -0
- package/dist/builders/slice-rule-builder.d.ts +151 -12
- package/dist/builders/slice-rule-builder.d.ts.map +1 -1
- package/dist/builders/slice-rule-builder.js +243 -35
- package/dist/builders/slice-rule-builder.js.map +1 -1
- package/dist/builders/type-rule-builder.d.ts +95 -24
- package/dist/builders/type-rule-builder.d.ts.map +1 -1
- package/dist/builders/type-rule-builder.js +109 -42
- package/dist/builders/type-rule-builder.js.map +1 -1
- package/dist/{helpers → builders}/within.d.ts +2 -2
- package/dist/builders/within.d.ts.map +1 -0
- package/dist/{helpers → builders}/within.js +1 -1
- package/dist/builders/within.js.map +1 -0
- package/dist/cli/commands/baseline.d.ts +8 -3
- package/dist/cli/commands/baseline.d.ts.map +1 -1
- package/dist/cli/commands/baseline.js +111 -7
- package/dist/cli/commands/baseline.js.map +1 -1
- package/dist/cli/commands/check.d.ts +7 -2
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +385 -47
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +29 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +224 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +2 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +19 -10
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/init.d.ts +9 -3
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +162 -137
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/import-rule-module.d.ts +29 -0
- package/dist/cli/import-rule-module.d.ts.map +1 -0
- package/dist/cli/import-rule-module.js +47 -0
- package/dist/cli/import-rule-module.js.map +1 -0
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +101 -43
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/load-rules.d.ts +6 -11
- package/dist/cli/load-rules.d.ts.map +1 -1
- package/dist/cli/load-rules.js +25 -32
- package/dist/cli/load-rules.js.map +1 -1
- package/dist/cli/resolve-config.d.ts +0 -8
- package/dist/cli/resolve-config.d.ts.map +1 -1
- package/dist/cli/resolve-config.js +25 -55
- package/dist/cli/resolve-config.js.map +1 -1
- package/dist/cli/rule-file-findings.d.ts +178 -0
- package/dist/cli/rule-file-findings.d.ts.map +1 -0
- package/dist/cli/rule-file-findings.js +351 -0
- package/dist/cli/rule-file-findings.js.map +1 -0
- package/dist/cli/watch.d.ts +17 -34
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +14 -129
- package/dist/cli/watch.js.map +1 -1
- package/dist/conditions/body-analysis-function.d.ts.map +1 -1
- package/dist/conditions/body-analysis-function.js +16 -7
- package/dist/conditions/body-analysis-function.js.map +1 -1
- package/dist/conditions/body-analysis-module.d.ts.map +1 -1
- package/dist/conditions/body-analysis-module.js +14 -9
- package/dist/conditions/body-analysis-module.js.map +1 -1
- package/dist/conditions/body-analysis.d.ts.map +1 -1
- package/dist/conditions/body-analysis.js +16 -7
- package/dist/conditions/body-analysis.js.map +1 -1
- package/dist/conditions/call.d.ts.map +1 -1
- package/dist/conditions/call.js +41 -19
- package/dist/conditions/call.js.map +1 -1
- package/dist/conditions/catch-analysis.d.ts +2 -1
- package/dist/conditions/catch-analysis.d.ts.map +1 -1
- package/dist/conditions/catch-analysis.js.map +1 -1
- package/dist/conditions/cross-layer.d.ts +2 -10
- package/dist/conditions/cross-layer.d.ts.map +1 -1
- package/dist/conditions/cross-layer.js +227 -23
- package/dist/conditions/cross-layer.js.map +1 -1
- package/dist/conditions/dependency.d.ts +35 -6
- package/dist/conditions/dependency.d.ts.map +1 -1
- package/dist/conditions/dependency.js +299 -45
- package/dist/conditions/dependency.js.map +1 -1
- package/dist/conditions/exports.d.ts.map +1 -1
- package/dist/conditions/exports.js +41 -37
- package/dist/conditions/exports.js.map +1 -1
- package/dist/conditions/function.d.ts.map +1 -1
- package/dist/conditions/function.js +19 -5
- package/dist/conditions/function.js.map +1 -1
- package/dist/conditions/helpers.d.ts +2 -1
- package/dist/conditions/helpers.d.ts.map +1 -1
- package/dist/conditions/helpers.js +4 -1
- package/dist/conditions/helpers.js.map +1 -1
- package/dist/conditions/jsx.d.ts.map +1 -1
- package/dist/conditions/jsx.js +7 -2
- package/dist/conditions/jsx.js.map +1 -1
- package/dist/conditions/match-identity.d.ts +43 -0
- package/dist/conditions/match-identity.d.ts.map +1 -0
- package/dist/conditions/match-identity.js +43 -0
- package/dist/conditions/match-identity.js.map +1 -0
- package/dist/conditions/members.d.ts.map +1 -1
- package/dist/conditions/members.js +20 -6
- package/dist/conditions/members.js.map +1 -1
- package/dist/conditions/reverse-dependency.d.ts +18 -5
- package/dist/conditions/reverse-dependency.d.ts.map +1 -1
- package/dist/conditions/reverse-dependency.js +155 -93
- package/dist/conditions/reverse-dependency.js.map +1 -1
- package/dist/conditions/slice.d.ts +86 -2
- package/dist/conditions/slice.d.ts.map +1 -1
- package/dist/conditions/slice.js +234 -53
- package/dist/conditions/slice.js.map +1 -1
- package/dist/conditions/structural.d.ts.map +1 -1
- package/dist/conditions/structural.js +16 -4
- package/dist/conditions/structural.js.map +1 -1
- package/dist/core/check-all.d.ts +19 -0
- package/dist/core/check-all.d.ts.map +1 -0
- package/dist/core/check-all.js +150 -0
- package/dist/core/check-all.js.map +1 -0
- package/dist/core/combinators.d.ts +48 -0
- package/dist/core/combinators.d.ts.map +1 -0
- package/dist/core/combinators.js +49 -0
- package/dist/core/combinators.js.map +1 -0
- package/dist/core/descendant-cache.d.ts +36 -0
- package/dist/core/descendant-cache.d.ts.map +1 -0
- package/dist/core/descendant-cache.js +117 -0
- package/dist/core/descendant-cache.js.map +1 -0
- package/dist/core/diagnose.d.ts +234 -0
- package/dist/core/diagnose.d.ts.map +1 -0
- package/dist/core/diagnose.js +390 -0
- package/dist/core/diagnose.js.map +1 -0
- package/dist/core/disk-set.d.ts +48 -0
- package/dist/core/disk-set.d.ts.map +1 -0
- package/dist/core/disk-set.js +218 -0
- package/dist/core/disk-set.js.map +1 -0
- package/dist/core/element-cache.d.ts +75 -0
- package/dist/core/element-cache.d.ts.map +1 -0
- package/dist/core/element-cache.js +32 -0
- package/dist/core/element-cache.js.map +1 -0
- package/dist/core/empty-project-advice.d.ts +75 -0
- package/dist/core/empty-project-advice.d.ts.map +1 -0
- package/dist/core/empty-project-advice.js +61 -0
- package/dist/core/empty-project-advice.js.map +1 -0
- package/dist/core/exclusion-comments.d.ts +19 -0
- package/dist/core/exclusion-comments.d.ts.map +1 -0
- package/dist/core/exclusion-comments.js +7 -0
- package/dist/core/exclusion-comments.js.map +1 -0
- package/dist/core/execute-rule.d.ts +158 -0
- package/dist/core/execute-rule.d.ts.map +1 -0
- package/dist/core/execute-rule.js +666 -0
- package/dist/core/execute-rule.js.map +1 -0
- package/dist/core/glob-diagnosis.d.ts +78 -0
- package/dist/core/glob-diagnosis.d.ts.map +1 -0
- package/dist/core/glob-diagnosis.js +134 -0
- package/dist/core/glob-diagnosis.js.map +1 -0
- package/dist/core/glob-evaluator.d.ts +48 -0
- package/dist/core/glob-evaluator.d.ts.map +1 -0
- package/dist/core/glob-evaluator.js +89 -0
- package/dist/core/glob-evaluator.js.map +1 -0
- package/dist/core/import-candidates.d.ts +60 -0
- package/dist/core/import-candidates.d.ts.map +1 -0
- package/dist/core/import-candidates.js +93 -0
- package/dist/core/import-candidates.js.map +1 -0
- package/dist/core/import-options.d.ts +55 -2
- package/dist/core/import-options.d.ts.map +1 -1
- package/dist/core/import-options.js +64 -0
- package/dist/core/import-options.js.map +1 -1
- package/dist/core/invalidate-on-modify.d.ts +20 -0
- package/dist/core/invalidate-on-modify.d.ts.map +1 -0
- package/dist/core/invalidate-on-modify.js +26 -0
- package/dist/core/invalidate-on-modify.js.map +1 -0
- package/dist/core/line-index.d.ts +3 -0
- package/dist/core/line-index.d.ts.map +1 -0
- package/dist/core/line-index.js +227 -0
- package/dist/core/line-index.js.map +1 -0
- package/dist/core/metric-violation.d.ts +86 -0
- package/dist/core/metric-violation.d.ts.map +1 -0
- package/dist/core/metric-violation.js +132 -0
- package/dist/core/metric-violation.js.map +1 -0
- package/dist/core/module-edges.d.ts +361 -0
- package/dist/core/module-edges.d.ts.map +1 -0
- package/dist/core/module-edges.js +593 -0
- package/dist/core/module-edges.js.map +1 -0
- package/dist/core/object-literal-functions.d.ts +42 -0
- package/dist/core/object-literal-functions.d.ts.map +1 -0
- package/dist/core/object-literal-functions.js +75 -0
- package/dist/core/object-literal-functions.js.map +1 -0
- package/dist/core/orphan-exclusions.d.ts +44 -0
- package/dist/core/orphan-exclusions.d.ts.map +1 -0
- package/dist/core/orphan-exclusions.js +224 -0
- package/dist/core/orphan-exclusions.js.map +1 -0
- package/dist/core/pair-condition.d.ts +32 -3
- package/dist/core/pair-condition.d.ts.map +1 -1
- package/dist/core/path-universe.d.ts +22 -0
- package/dist/core/path-universe.d.ts.map +1 -0
- package/dist/core/path-universe.js +45 -0
- package/dist/core/path-universe.js.map +1 -0
- package/dist/core/per-root-compiler-options.d.ts +20 -0
- package/dist/core/per-root-compiler-options.d.ts.map +1 -0
- package/dist/core/per-root-compiler-options.js +57 -0
- package/dist/core/per-root-compiler-options.js.map +1 -0
- package/dist/core/project-relative.d.ts +98 -0
- package/dist/core/project-relative.d.ts.map +1 -0
- package/dist/core/project-relative.js +185 -0
- package/dist/core/project-relative.js.map +1 -0
- package/dist/core/project.d.ts +7 -1
- package/dist/core/project.d.ts.map +1 -1
- package/dist/core/project.js +29 -4
- package/dist/core/project.js.map +1 -1
- package/dist/core/rule-builder.d.ts +303 -0
- package/dist/core/rule-builder.d.ts.map +1 -0
- package/dist/core/rule-builder.js +463 -0
- package/dist/core/rule-builder.js.map +1 -0
- package/dist/core/rule-declaration.d.ts +32 -0
- package/dist/core/rule-declaration.d.ts.map +1 -0
- package/dist/core/rule-declaration.js +88 -0
- package/dist/core/rule-declaration.js.map +1 -0
- package/dist/core/terminal-builder.d.ts +629 -0
- package/dist/core/terminal-builder.d.ts.map +1 -0
- package/dist/core/terminal-builder.js +807 -0
- package/dist/core/terminal-builder.js.map +1 -0
- package/dist/core/terminal-execution.d.ts +39 -0
- package/dist/core/terminal-execution.d.ts.map +1 -0
- package/dist/core/terminal-execution.js +103 -0
- package/dist/core/terminal-execution.js.map +1 -0
- package/dist/core/ts-comment-mask.d.ts +2 -0
- package/dist/core/ts-comment-mask.d.ts.map +1 -0
- package/dist/core/ts-comment-mask.js +102 -0
- package/dist/core/ts-comment-mask.js.map +1 -0
- package/dist/core/vacuity-diagnosis.d.ts +103 -0
- package/dist/core/vacuity-diagnosis.d.ts.map +1 -0
- package/dist/core/vacuity-diagnosis.js +415 -0
- package/dist/core/vacuity-diagnosis.js.map +1 -0
- package/dist/core/violation.d.ts +16 -11
- package/dist/core/violation.d.ts.map +1 -1
- package/dist/core/violation.js +33 -13
- package/dist/core/violation.js.map +1 -1
- package/dist/graphql/graphql-rule-builder.d.ts +95 -0
- package/dist/graphql/graphql-rule-builder.d.ts.map +1 -0
- package/dist/graphql/graphql-rule-builder.js +127 -0
- package/dist/graphql/graphql-rule-builder.js.map +1 -0
- package/dist/graphql/index.d.ts +1 -0
- package/dist/graphql/index.d.ts.map +1 -1
- package/dist/graphql/index.js +2 -1
- package/dist/graphql/index.js.map +1 -1
- package/dist/graphql/resolver-rule-builder.d.ts +44 -23
- package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
- package/dist/graphql/resolver-rule-builder.js +80 -72
- package/dist/graphql/resolver-rule-builder.js.map +1 -1
- package/dist/graphql/schema-loader.d.ts +21 -0
- package/dist/graphql/schema-loader.d.ts.map +1 -1
- package/dist/graphql/schema-loader.js +82 -12
- package/dist/graphql/schema-loader.js.map +1 -1
- package/dist/graphql/schema-predicates.d.ts.map +1 -1
- package/dist/graphql/schema-predicates.js +17 -12
- package/dist/graphql/schema-predicates.js.map +1 -1
- package/dist/graphql/schema-rule-builder.d.ts +15 -24
- package/dist/graphql/schema-rule-builder.d.ts.map +1 -1
- package/dist/graphql/schema-rule-builder.js +39 -77
- package/dist/graphql/schema-rule-builder.js.map +1 -1
- package/dist/helpers/baseline-diagnostics.d.ts +45 -0
- package/dist/helpers/baseline-diagnostics.d.ts.map +1 -0
- package/dist/helpers/baseline-diagnostics.js +168 -0
- package/dist/helpers/baseline-diagnostics.js.map +1 -0
- package/dist/helpers/baseline-generator.d.ts +28 -0
- package/dist/helpers/baseline-generator.d.ts.map +1 -0
- package/dist/helpers/baseline-generator.js +27 -0
- package/dist/helpers/baseline-generator.js.map +1 -0
- package/dist/helpers/baseline.d.ts +336 -0
- package/dist/helpers/baseline.d.ts.map +1 -0
- package/dist/helpers/baseline.js +664 -0
- package/dist/helpers/baseline.js.map +1 -0
- package/dist/helpers/body-traversal.d.ts +27 -2
- package/dist/helpers/body-traversal.d.ts.map +1 -1
- package/dist/helpers/body-traversal.js +135 -16
- package/dist/helpers/body-traversal.js.map +1 -1
- package/dist/helpers/callback-extractor.d.ts.map +1 -1
- package/dist/helpers/callback-extractor.js +53 -84
- package/dist/helpers/callback-extractor.js.map +1 -1
- package/dist/helpers/complexity.d.ts +13 -5
- package/dist/helpers/complexity.d.ts.map +1 -1
- package/dist/helpers/complexity.js +15 -6
- package/dist/helpers/complexity.js.map +1 -1
- package/dist/helpers/diff-aware.d.ts +16 -0
- package/dist/helpers/diff-aware.d.ts.map +1 -0
- package/dist/helpers/diff-aware.js +16 -0
- package/dist/helpers/diff-aware.js.map +1 -0
- package/dist/helpers/matchers.d.ts +68 -7
- package/dist/helpers/matchers.d.ts.map +1 -1
- package/dist/helpers/matchers.js +164 -86
- package/dist/helpers/matchers.js.map +1 -1
- package/dist/helpers/slice-graph.d.ts +100 -8
- package/dist/helpers/slice-graph.d.ts.map +1 -1
- package/dist/helpers/slice-graph.js +126 -34
- package/dist/helpers/slice-graph.js.map +1 -1
- package/dist/helpers/tarjan.d.ts +0 -14
- package/dist/helpers/tarjan.d.ts.map +1 -1
- package/dist/helpers/tarjan.js +29 -16
- package/dist/helpers/tarjan.js.map +1 -1
- package/dist/index.d.ts +55 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -15
- package/dist/index.js.map +1 -1
- package/dist/models/arch-call.d.ts +3 -2
- package/dist/models/arch-call.d.ts.map +1 -1
- package/dist/models/arch-call.js.map +1 -1
- package/dist/models/arch-function.d.ts +54 -8
- package/dist/models/arch-function.d.ts.map +1 -1
- package/dist/models/arch-function.js +145 -8
- package/dist/models/arch-function.js.map +1 -1
- package/dist/models/arch-jsx-element.d.ts.map +1 -1
- package/dist/models/arch-jsx-element.js +18 -19
- package/dist/models/arch-jsx-element.js.map +1 -1
- package/dist/models/slice.d.ts +33 -9
- package/dist/models/slice.d.ts.map +1 -1
- package/dist/models/slice.js +129 -19
- package/dist/models/slice.js.map +1 -1
- package/dist/predicates/call.d.ts.map +1 -1
- package/dist/predicates/call.js +5 -0
- package/dist/predicates/call.js.map +1 -1
- package/dist/predicates/identity.d.ts +21 -0
- package/dist/predicates/identity.d.ts.map +1 -1
- package/dist/predicates/identity.js +75 -3
- package/dist/predicates/identity.js.map +1 -1
- package/dist/predicates/index.d.ts +1 -1
- package/dist/predicates/index.d.ts.map +1 -1
- package/dist/predicates/index.js +1 -1
- package/dist/predicates/index.js.map +1 -1
- package/dist/predicates/jsx.d.ts.map +1 -1
- package/dist/predicates/jsx.js +2 -1
- package/dist/predicates/jsx.js.map +1 -1
- package/dist/predicates/metrics.d.ts +4 -2
- package/dist/predicates/metrics.d.ts.map +1 -1
- package/dist/predicates/metrics.js +4 -2
- package/dist/predicates/metrics.js.map +1 -1
- package/dist/predicates/module.d.ts +4 -12
- package/dist/predicates/module.d.ts.map +1 -1
- package/dist/predicates/module.js +57 -37
- package/dist/predicates/module.js.map +1 -1
- package/dist/presets/agent-guardrails.d.ts +49 -16
- package/dist/presets/agent-guardrails.d.ts.map +1 -1
- package/dist/presets/agent-guardrails.js +308 -19
- package/dist/presets/agent-guardrails.js.map +1 -1
- package/dist/presets/boundaries.d.ts +46 -3
- package/dist/presets/boundaries.d.ts.map +1 -1
- package/dist/presets/boundaries.js +132 -23
- package/dist/presets/boundaries.js.map +1 -1
- package/dist/presets/data-layer.d.ts +23 -3
- package/dist/presets/data-layer.d.ts.map +1 -1
- package/dist/presets/data-layer.js +58 -16
- package/dist/presets/data-layer.js.map +1 -1
- package/dist/presets/index.d.ts +10 -5
- package/dist/presets/index.d.ts.map +1 -1
- package/dist/presets/index.js +19 -3
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/layered.d.ts +47 -3
- package/dist/presets/layered.d.ts.map +1 -1
- package/dist/presets/layered.js +66 -29
- package/dist/presets/layered.js.map +1 -1
- package/dist/presets/recommended.d.ts +81 -10
- package/dist/presets/recommended.d.ts.map +1 -1
- package/dist/presets/recommended.js +25 -23
- package/dist/presets/recommended.js.map +1 -1
- package/dist/presets/shared.d.ts +267 -2
- package/dist/presets/shared.d.ts.map +1 -1
- package/dist/presets/shared.js +367 -4
- package/dist/presets/shared.js.map +1 -1
- package/dist/rules/code-quality.d.ts.map +1 -1
- package/dist/rules/code-quality.js +15 -6
- package/dist/rules/code-quality.js.map +1 -1
- package/dist/rules/hygiene.d.ts +1 -1
- package/dist/rules/hygiene.js +1 -1
- package/dist/rules/metrics-function.d.ts +2 -1
- package/dist/rules/metrics-function.d.ts.map +1 -1
- package/dist/rules/metrics-function.js +63 -39
- package/dist/rules/metrics-function.js.map +1 -1
- package/dist/rules/metrics.d.ts +2 -1
- package/dist/rules/metrics.d.ts.map +1 -1
- package/dist/rules/metrics.js +80 -47
- package/dist/rules/metrics.js.map +1 -1
- package/dist/smells/clusters.d.ts +78 -0
- package/dist/smells/clusters.d.ts.map +1 -0
- package/dist/smells/clusters.js +124 -0
- package/dist/smells/clusters.js.map +1 -0
- package/dist/smells/duplicate-bodies.d.ts +92 -5
- package/dist/smells/duplicate-bodies.d.ts.map +1 -1
- package/dist/smells/duplicate-bodies.js +203 -73
- package/dist/smells/duplicate-bodies.js.map +1 -1
- package/dist/smells/duplicate-report.d.ts +90 -0
- package/dist/smells/duplicate-report.d.ts.map +1 -0
- package/dist/smells/duplicate-report.js +344 -0
- package/dist/smells/duplicate-report.js.map +1 -0
- package/dist/smells/fingerprint.d.ts +20 -1
- package/dist/smells/fingerprint.d.ts.map +1 -1
- package/dist/smells/fingerprint.js +27 -3
- package/dist/smells/fingerprint.js.map +1 -1
- package/dist/smells/inconsistent-siblings.d.ts +128 -7
- package/dist/smells/inconsistent-siblings.d.ts.map +1 -1
- package/dist/smells/inconsistent-siblings.js +288 -86
- package/dist/smells/inconsistent-siblings.js.map +1 -1
- package/dist/smells/sibling-files.d.ts +47 -0
- package/dist/smells/sibling-files.d.ts.map +1 -0
- package/dist/smells/sibling-files.js +104 -0
- package/dist/smells/sibling-files.js.map +1 -0
- package/dist/smells/similar-pairs.d.ts +28 -0
- package/dist/smells/similar-pairs.d.ts.map +1 -0
- package/dist/smells/similar-pairs.js +134 -0
- package/dist/smells/similar-pairs.js.map +1 -0
- package/dist/smells/smell-builder.d.ts +57 -12
- package/dist/smells/smell-builder.d.ts.map +1 -1
- package/dist/smells/smell-builder.js +112 -14
- package/dist/smells/smell-builder.js.map +1 -1
- package/dist/smells/variation.d.ts +47 -0
- package/dist/smells/variation.d.ts.map +1 -0
- package/dist/smells/variation.js +90 -0
- package/dist/smells/variation.js.map +1 -0
- package/dist/tsconfig/index.d.ts +19 -0
- package/dist/tsconfig/index.d.ts.map +1 -0
- package/dist/tsconfig/index.js +20 -0
- package/dist/tsconfig/index.js.map +1 -0
- package/dist/tsconfig/tsconfig-builder.d.ts +42 -9
- package/dist/tsconfig/tsconfig-builder.d.ts.map +1 -1
- package/dist/tsconfig/tsconfig-builder.js +65 -16
- package/dist/tsconfig/tsconfig-builder.js.map +1 -1
- package/package.json +4 -2
- package/dist/core/module-dependencies.d.ts +0 -28
- package/dist/core/module-dependencies.d.ts.map +0 -1
- package/dist/core/module-dependencies.js +0 -35
- package/dist/core/module-dependencies.js.map +0 -1
- package/dist/helpers/within.d.ts.map +0 -1
- package/dist/helpers/within.js.map +0 -1
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { diagnose } from '../../core/diagnose.js';
|
|
2
|
+
import { isArchRuleError } from '@nielspeter/eess';
|
|
3
|
+
import { loadRuleFiles } from '../load-rules.js';
|
|
4
|
+
import { writeStderr } from '@nielspeter/eess/internal';
|
|
5
|
+
import { orphanExclusions } from '../../core/orphan-exclusions.js';
|
|
6
|
+
/**
|
|
7
|
+
* Report what each rule cannot enforce, without evaluating their conditions.
|
|
8
|
+
*
|
|
9
|
+
* It DOES materialize each rule's selection, as of plan 0096: "this rule examined
|
|
10
|
+
* nothing" is a fact about the selection, and the preview for 0098's floor has to
|
|
11
|
+
* read the same computation the floor will. The docstring used to say "without
|
|
12
|
+
* running any of them" and that stopped being true.
|
|
13
|
+
*
|
|
14
|
+
* **Supported and scoped** since plan 0077, which settled the keep-or-retire
|
|
15
|
+
* question 0069 left open. It diagnoses rule files the CLI can **load** — the
|
|
16
|
+
* `arch.rules.ts` shape `init` scaffolds, which `getting-started.md` calls the
|
|
17
|
+
* default path. Rules hosted in a vitest or jest file cannot be imported outside
|
|
18
|
+
* their runner; `diagnose()` is the answer there and reports the same findings.
|
|
19
|
+
*
|
|
20
|
+
* **Why the command earns its slot:** a **dead glob**. A rule whose selector can
|
|
21
|
+
* never match certifies nothing, and `check` never calls `diagnose()` — measured,
|
|
22
|
+
* `check` exits 0 with no output on such a rule while this reports it and exits
|
|
23
|
+
* 1. Until 0069's R3b turns that into a check-time failure, this and `diagnose()`
|
|
24
|
+
* are the only surfaces that see it.
|
|
25
|
+
*
|
|
26
|
+
* Not a build gate (0069): `check` is the gate.
|
|
27
|
+
*/
|
|
28
|
+
export async function runDoctor(args) {
|
|
29
|
+
if (args.ruleFiles.length === 0) {
|
|
30
|
+
writeStderr('Error: no rule files. Pass them as arguments or set `rules` in your config.\n');
|
|
31
|
+
return 1;
|
|
32
|
+
}
|
|
33
|
+
// Per file, not one flat array. `diagnose()` treats rules independently, so
|
|
34
|
+
// the results are identical — but the loop is the only place that knows which
|
|
35
|
+
// file a rule came from, and flattening first discarded it (bug 0026).
|
|
36
|
+
const findings = [];
|
|
37
|
+
const rules = [];
|
|
38
|
+
// Identities, never totals (docs/cli.md): a boolean told a JSON consumer that
|
|
39
|
+
// something failed without saying which file or why, leaving them to scrape
|
|
40
|
+
// stderr prose they do not read.
|
|
41
|
+
const loadFailures = [];
|
|
42
|
+
for (const file of args.ruleFiles) {
|
|
43
|
+
try {
|
|
44
|
+
const loaded = await loadRuleFiles([file]);
|
|
45
|
+
rules.push(...loaded);
|
|
46
|
+
findings.push(...diagnose(loaded).map((f) => ({ ...f, ruleFile: file })));
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
// A rule file that self-executes a throwing `.check()` at import is a
|
|
50
|
+
// documented shape, and `runCheck` already tolerates it. Without this,
|
|
51
|
+
// `doctor` — the pre-flight R3b's gate depends on — crashes on the
|
|
52
|
+
// commonest legacy rule-file shape and abandons every remaining file,
|
|
53
|
+
// so the gate cannot be run on the population it was invented for.
|
|
54
|
+
// `loadRuleFiles` accumulates into a local array and returns it only
|
|
55
|
+
// after its own loop, so when the import throws NOTHING from that file
|
|
56
|
+
// survives. Saying "diagnosing what loaded" would be false, and
|
|
57
|
+
// swallowing it silently turned a visible crash into `exit 0` plus a
|
|
58
|
+
// clean bill of health — the ADR-009 rule 1 failure this command exists
|
|
59
|
+
// to surface, committed by the command.
|
|
60
|
+
//
|
|
61
|
+
// Two loud shapes (plan 0070 round 2): an ArchRuleError means the file
|
|
62
|
+
// self-executes a failing rule at import; anything else — measured, a
|
|
63
|
+
// raw TypeError from importing a vitest test file — used to crash the
|
|
64
|
+
// whole command and abandon every remaining file.
|
|
65
|
+
if (isArchRuleError(error)) {
|
|
66
|
+
writeStderr(`Error: ${file} executes its rules at import and threw, so none of it could be ` +
|
|
67
|
+
`diagnosed. Leave builders un-terminated in a rule file (see docs/running-in-tests).\n`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// The remedy is CONDITIONAL: this branch fires for any load failure —
|
|
71
|
+
// a syntax error, a missing dependency — and asserting "this imports a
|
|
72
|
+
// test runner" unconditionally would be a false cause (ADR-009 rule 2,
|
|
73
|
+
// caught in review). The error message is the evidence; the test-runner
|
|
74
|
+
// sentence is offered as the common case, not stated as the cause.
|
|
75
|
+
writeStderr(`Error: ${file} could not be loaded (${error instanceof Error ? error.message : String(error)}), ` +
|
|
76
|
+
`so none of it could be diagnosed. If this file imports a test runner (vitest/jest), ` +
|
|
77
|
+
`doctor cannot load it — run your test suite instead; the runtime writes the same ` +
|
|
78
|
+
`diagnostics to stderr.\n`);
|
|
79
|
+
}
|
|
80
|
+
loadFailures.push({ file, error: error instanceof Error ? error.message : String(error) });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Orphan exclusion comments, AFTER the loop and over every rule at once
|
|
84
|
+
// (bug 0044). Not inside the loop and not inside `diagnose()`: the declared-id
|
|
85
|
+
// set is the union across rule files, so a per-file check would report a
|
|
86
|
+
// directive naming a rule declared in a sibling file as an orphan. That is a
|
|
87
|
+
// false positive on the commonest multi-file layout, and a diagnostic that
|
|
88
|
+
// cries wolf is one nobody runs.
|
|
89
|
+
//
|
|
90
|
+
// Reported as `dead-glob`'s sibling kind rather than a separate output
|
|
91
|
+
// section, so `--format json` consumers get it through the `findings` array
|
|
92
|
+
// they already parse.
|
|
93
|
+
// The scope is passed, so the advice can say what it checked. `doctor
|
|
94
|
+
// arch.rules.ts` — the single-file form `docs/cli.md` itself shows — sees a
|
|
95
|
+
// subset of a multi-file project's rules, and a directive naming a rule from
|
|
96
|
+
// another file would otherwise be reported as an orphan with "delete the
|
|
97
|
+
// comment" as its remedy. Deleting a working comment un-waives a real
|
|
98
|
+
// violation, which is the rule-2 failure this caveat exists to prevent.
|
|
99
|
+
for (const orphan of orphanExclusions(rules, { ruleFilesChecked: args.ruleFiles.length })) {
|
|
100
|
+
findings.push({
|
|
101
|
+
kind: 'orphan-exclusion',
|
|
102
|
+
rule: orphan.ruleId,
|
|
103
|
+
advice: orphan.advice,
|
|
104
|
+
// `sourceFile`, not `ruleFile`: that field is documented as "the rule file
|
|
105
|
+
// this rule was written in", and putting a *source* path there gave JSON
|
|
106
|
+
// consumers two different things under one name, by `kind`, undocumented.
|
|
107
|
+
sourceFile: orphan.file,
|
|
108
|
+
line: orphan.line,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
// A load failure is a REPORT, and this command's contract is "exits
|
|
112
|
+
// non-zero when it reports anything". Review measured the mixed case —
|
|
113
|
+
// one broken file, one clean file, zero findings — printing the error and
|
|
114
|
+
// then exiting 0 with a clean bill of health: exactly the "exit 0 plus
|
|
115
|
+
// silence" this command exists to prevent, reintroduced by the catch that
|
|
116
|
+
// fixed the crash. Every exit path below folds the load failures in.
|
|
117
|
+
//
|
|
118
|
+
// And every exit path emits the JSON document when asked for it: a consumer
|
|
119
|
+
// parsing stdout used to get zero bytes on the commonest single-file failure,
|
|
120
|
+
// and `JSON.parse('')` throws — the exact consumer the exit-code fix was for.
|
|
121
|
+
const emitJson = (findings) => {
|
|
122
|
+
if (args.format === 'json') {
|
|
123
|
+
process.stdout.write(JSON.stringify({ findings, loadFailures }, null, 2) + '\n');
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
if (loadFailures.length > 0 && rules.length === 0) {
|
|
127
|
+
emitJson([]);
|
|
128
|
+
return 1;
|
|
129
|
+
}
|
|
130
|
+
// Nothing to diagnose is not the same as nothing wrong. The earlier guard
|
|
131
|
+
// checked `args.ruleFiles.length`, which is the wrong derivation: a file
|
|
132
|
+
// exporting `[]` reached this point and reported a clean bill of health.
|
|
133
|
+
if (rules.length === 0) {
|
|
134
|
+
writeStderr('Error: no rules found in the given files.\n');
|
|
135
|
+
emitJson([]);
|
|
136
|
+
return 1;
|
|
137
|
+
}
|
|
138
|
+
if (args.format === 'json') {
|
|
139
|
+
emitJson(findings);
|
|
140
|
+
return findings.length > 0 || loadFailures.length > 0 ? 1 : 0;
|
|
141
|
+
}
|
|
142
|
+
if (findings.length === 0) {
|
|
143
|
+
if (loadFailures.length > 0) {
|
|
144
|
+
writeStderr('No findings in the rules that loaded — but at least one file could not be ' +
|
|
145
|
+
'loaded (see above), so this is not a clean bill of health.\n');
|
|
146
|
+
return 1;
|
|
147
|
+
}
|
|
148
|
+
writeStderr('No rules that cannot enforce anything.\n');
|
|
149
|
+
return 0;
|
|
150
|
+
}
|
|
151
|
+
writeStderr(format(findings));
|
|
152
|
+
return 1;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Which kinds carry a glob, and therefore render with origin/position/fault.
|
|
156
|
+
*
|
|
157
|
+
* A `Record` over the union rather than a boolean expression, so that adding a
|
|
158
|
+
* kind fails `tsc` until someone decides how it renders. `project-empty` was
|
|
159
|
+
* added to `DiagnosticFinding['kind']` and this file kept compiling — the gap
|
|
160
|
+
* that made the choice implicit.
|
|
161
|
+
*/
|
|
162
|
+
const HAS_GLOB = {
|
|
163
|
+
'dead-glob': true,
|
|
164
|
+
'no-condition': false,
|
|
165
|
+
'project-unknown': false,
|
|
166
|
+
'project-empty': false,
|
|
167
|
+
// No glob: the fault is the family's own filters emptying the set, so there
|
|
168
|
+
// is no glob text to point at (plan 0096).
|
|
169
|
+
'zero-subjects': false,
|
|
170
|
+
// No glob: the fault is the family's own adequacy predicate, not a
|
|
171
|
+
// selector — the corpus was found and examined, it just cannot ever
|
|
172
|
+
// produce a finding as configured (plan 0102).
|
|
173
|
+
inert: false,
|
|
174
|
+
// No glob: the subject is a comment in a source file, and the identity is the
|
|
175
|
+
// rule id it names plus where it sits. That is why this kind carries `line`.
|
|
176
|
+
'orphan-exclusion': false,
|
|
177
|
+
// No glob: the fault is specific CURRENT violations not covered by the
|
|
178
|
+
// rule's own `accepted` list, not a selector — the corpus was found and
|
|
179
|
+
// examined, and some of what it found is not what was accepted (plan 0090).
|
|
180
|
+
'deferred-warning': false,
|
|
181
|
+
};
|
|
182
|
+
function format(findings) {
|
|
183
|
+
const lines = [''];
|
|
184
|
+
for (const finding of findings) {
|
|
185
|
+
// The rule file first: with two identical vacuous rules in two files, the
|
|
186
|
+
// rule's own description is the same sentence twice and says nothing about
|
|
187
|
+
// which to open.
|
|
188
|
+
// An orphan exclusion is located by its SOURCE file and line, not by a rule
|
|
189
|
+
// file — the subject is a comment. The changelog claimed this printed "the
|
|
190
|
+
// file and line" and the terminal format printed neither, so two stale
|
|
191
|
+
// directives in one file rendered as two identical headers.
|
|
192
|
+
if (finding.sourceFile !== undefined) {
|
|
193
|
+
const at = finding.line === undefined ? '' : `:${String(finding.line)}`;
|
|
194
|
+
lines.push(` ${finding.sourceFile}${at}`);
|
|
195
|
+
lines.push(` ${finding.rule}`);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
lines.push(finding.ruleFile === undefined ? ` ${finding.rule}` : ` ${finding.ruleFile}`);
|
|
199
|
+
if (finding.ruleFile !== undefined)
|
|
200
|
+
lines.push(` ${finding.rule}`);
|
|
201
|
+
}
|
|
202
|
+
if (HAS_GLOB[finding.kind]) {
|
|
203
|
+
lines.push(` ${finding.origin ?? finding.glob ?? '(unknown)'} [${finding.position ?? 'unknown'}]`, ` ${finding.fault ?? 'unknown'}: ${finding.advice}`);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
// `no-condition`, `project-unknown` and `project-empty` have no glob, no
|
|
207
|
+
// position and no fault. Rendering them through the dead-glob shape
|
|
208
|
+
// printed `(unknown) [unknown]` / `unknown: …`, which reads like a bug in
|
|
209
|
+
// the tool rather than a finding about the rule.
|
|
210
|
+
//
|
|
211
|
+
// `HAS_GLOB` below is what makes adding a fifth kind a COMPILE error
|
|
212
|
+
// rather than a silent fall into this branch. `project-empty` was added
|
|
213
|
+
// to the union and compiled without anyone choosing a rendering for it —
|
|
214
|
+
// an if/else cannot ask the question, and `Record<K, …>` can. Same device
|
|
215
|
+
// as `FAULT_ADVICE` and `ON_DISK_ADVICE` in `glob-diagnosis.ts`.
|
|
216
|
+
lines.push(` ${finding.kind}: ${finding.advice}`);
|
|
217
|
+
}
|
|
218
|
+
lines.push('');
|
|
219
|
+
}
|
|
220
|
+
// Deliberately no total. A count is the snapshot ADR-009 rule 4 bars, and it
|
|
221
|
+
// is the number people ratchet against instead of fixing the findings.
|
|
222
|
+
return lines.join('\n');
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
interface ExplainArgs {
|
|
2
2
|
ruleFiles: string[];
|
|
3
3
|
markdown?: boolean;
|
|
4
4
|
/** Explain output format: 'json' (default), 'markdown', or 'agent'. */
|
|
@@ -8,4 +8,5 @@ export interface ExplainArgs {
|
|
|
8
8
|
* Dump all active rules as structured JSON or markdown.
|
|
9
9
|
*/
|
|
10
10
|
export declare function runExplain(args: ExplainArgs): Promise<void>;
|
|
11
|
+
export {};
|
|
11
12
|
//# sourceMappingURL=explain.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAIA,
|
|
1
|
+
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBjE"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
+
import { isDescribable } from '@nielspeter/eess/internal';
|
|
1
2
|
import { loadRuleFiles } from '../load-rules.js';
|
|
2
|
-
function isDescribable(value) {
|
|
3
|
-
return (value !== null &&
|
|
4
|
-
value !== undefined &&
|
|
5
|
-
typeof value === 'object' &&
|
|
6
|
-
'describeRule' in value &&
|
|
7
|
-
typeof value['describeRule'] === 'function');
|
|
8
|
-
}
|
|
9
3
|
/**
|
|
10
4
|
* Dump all active rules as structured JSON or markdown.
|
|
11
5
|
*/
|
|
@@ -42,7 +36,7 @@ function outputAgent(descriptions) {
|
|
|
42
36
|
'The following rules are enforced by CI. Violations will block your PR.',
|
|
43
37
|
'',
|
|
44
38
|
'**Verify before you continue:** after writing or changing code, run ' +
|
|
45
|
-
'`eess-ts check --format json`, read the `violations` array, and fix ' +
|
|
39
|
+
'`npx eess-ts check --format json`, read the `violations` array, and fix ' +
|
|
46
40
|
'each one using its `suggestion`. Do this in your edit loop — do not wait for CI.',
|
|
47
41
|
'',
|
|
48
42
|
];
|
|
@@ -62,10 +56,24 @@ function outputAgent(descriptions) {
|
|
|
62
56
|
}
|
|
63
57
|
for (const [group, rules] of groups) {
|
|
64
58
|
lines.push(`### ${titleCase(group)}`, '');
|
|
59
|
+
// Deduplicated within the group. A preset generates one rule per configured
|
|
60
|
+
// folder — `strictBoundaries({ folders })` with six boundaries produces six
|
|
61
|
+
// `no-cross-boundary` rules carrying IDENTICAL metadata — so the same bullet
|
|
62
|
+
// printed six times. This output is meant to be committed into an agent's
|
|
63
|
+
// system prompt (`init` says so), where repetition is pure cost: it is
|
|
64
|
+
// tokens on every request and it reads as six different rules.
|
|
65
|
+
//
|
|
66
|
+
// The bullet TEXT is the key, not the rule id: two rules can share an id and
|
|
67
|
+
// differ in imperative, and it is the line that would repeat.
|
|
68
|
+
const seen = new Set();
|
|
65
69
|
for (const d of rules) {
|
|
66
70
|
// The imperative is the self-contained rule statement; `because`/`suggestion`
|
|
67
71
|
// live in the check --format json payload, so don't double them up here.
|
|
68
|
-
|
|
72
|
+
const bullet = d.imperative ?? (d.rule || 'Follow the architecture rule.');
|
|
73
|
+
if (seen.has(bullet))
|
|
74
|
+
continue;
|
|
75
|
+
seen.add(bullet);
|
|
76
|
+
lines.push(`- ${bullet}`);
|
|
69
77
|
}
|
|
70
78
|
lines.push('');
|
|
71
79
|
}
|
|
@@ -73,7 +81,8 @@ function outputAgent(descriptions) {
|
|
|
73
81
|
process.stdout.write(lines.join('\n') + '\n');
|
|
74
82
|
}
|
|
75
83
|
function titleCase(s) {
|
|
76
|
-
|
|
84
|
+
const [first] = s;
|
|
85
|
+
return first === undefined ? s : first.toUpperCase() + s.slice(1);
|
|
77
86
|
}
|
|
78
87
|
function outputJson(descriptions) {
|
|
79
88
|
const output = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
interface InitArgs {
|
|
2
2
|
/** Directory to scaffold into. Defaults to `process.cwd()`. */
|
|
3
3
|
cwd?: string;
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Starter preset. Floor: `recommended` (default) | `agent-guardrails`.
|
|
6
|
+
* Shape: `layered` | `strict-boundaries` | `data-layer` (scaffolded with
|
|
7
|
+
* fill-in folder globs, alongside the `recommended` floor).
|
|
8
|
+
*/
|
|
5
9
|
preset?: string;
|
|
6
10
|
/** tsconfig path written into the generated files. Default `tsconfig.json`. */
|
|
7
11
|
tsconfig?: string;
|
|
@@ -17,7 +21,9 @@ export interface InitArgs {
|
|
|
17
21
|
* (0 success, 1 on a recoverable error — bad `--preset`, missing tsconfig, a
|
|
18
22
|
* file conflict without `--force`, or a write failure). All reads, parses, and
|
|
19
23
|
* conflict checks run before any file is written, so a validation failure never
|
|
20
|
-
* leaves a partial scaffold; a raw I/O failure mid-write is caught and reported
|
|
24
|
+
* leaves a partial scaffold; a raw I/O failure mid-write is caught and reported
|
|
25
|
+
* (writes are ordered, not transactional).
|
|
21
26
|
*/
|
|
22
27
|
export declare function runInit(args: InitArgs): number;
|
|
28
|
+
export {};
|
|
23
29
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAgBA,UAAU,QAAQ;IAChB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAUD;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAyE9C"}
|