@nielspeter/eess-ts 0.4.0 → 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/dist/builders/call-rule-builder.d.ts.map +1 -1
- package/dist/builders/call-rule-builder.js +2 -1
- package/dist/builders/call-rule-builder.js.map +1 -1
- package/dist/builders/class-rule-builder.d.ts.map +1 -1
- package/dist/builders/class-rule-builder.js +7 -25
- package/dist/builders/class-rule-builder.js.map +1 -1
- package/dist/builders/correspondence-builder.d.ts.map +1 -1
- package/dist/builders/correspondence-builder.js +6 -14
- package/dist/builders/correspondence-builder.js.map +1 -1
- package/dist/builders/cross-layer-builder.d.ts.map +1 -1
- package/dist/builders/cross-layer-builder.js +7 -6
- package/dist/builders/cross-layer-builder.js.map +1 -1
- package/dist/builders/function-rule-builder.d.ts.map +1 -1
- package/dist/builders/function-rule-builder.js +4 -13
- package/dist/builders/function-rule-builder.js.map +1 -1
- package/dist/builders/module-rule-builder.d.ts.map +1 -1
- package/dist/builders/module-rule-builder.js +4 -16
- package/dist/builders/module-rule-builder.js.map +1 -1
- package/dist/builders/slice-rule-builder.d.ts.map +1 -1
- package/dist/builders/slice-rule-builder.js +4 -3
- package/dist/builders/slice-rule-builder.js.map +1 -1
- package/dist/builders/type-rule-builder.d.ts.map +1 -1
- package/dist/builders/type-rule-builder.js +4 -13
- package/dist/builders/type-rule-builder.js.map +1 -1
- package/dist/cli/commands/baseline.d.ts +5 -1
- package/dist/cli/commands/baseline.d.ts.map +1 -1
- package/dist/cli/commands/baseline.js +47 -5
- package/dist/cli/commands/baseline.js.map +1 -1
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +155 -13
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/doctor.js +1 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/explain.js +1 -1
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/import-rule-module.d.ts.map +1 -1
- package/dist/cli/import-rule-module.js +1 -14
- package/dist/cli/import-rule-module.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/load-rules.d.ts.map +1 -1
- package/dist/cli/load-rules.js +5 -4
- 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 +18 -48
- package/dist/cli/resolve-config.js.map +1 -1
- package/dist/cli/rule-file-findings.d.ts.map +1 -1
- package/dist/cli/rule-file-findings.js +60 -2
- package/dist/cli/rule-file-findings.js.map +1 -1
- package/dist/cli/watch.d.ts +13 -43
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +8 -148
- package/dist/cli/watch.js.map +1 -1
- package/dist/conditions/call.d.ts.map +1 -1
- package/dist/conditions/call.js +4 -3
- package/dist/conditions/call.js.map +1 -1
- package/dist/conditions/cross-layer.js +2 -2
- package/dist/conditions/cross-layer.js.map +1 -1
- package/dist/conditions/dependency.js +2 -2
- package/dist/conditions/dependency.js.map +1 -1
- package/dist/conditions/exports.d.ts.map +1 -1
- package/dist/conditions/exports.js +31 -37
- package/dist/conditions/exports.js.map +1 -1
- package/dist/conditions/function.js +1 -1
- package/dist/conditions/function.js.map +1 -1
- package/dist/conditions/jsx.js +1 -1
- package/dist/conditions/jsx.js.map +1 -1
- package/dist/conditions/members.d.ts.map +1 -1
- package/dist/conditions/members.js +3 -2
- package/dist/conditions/members.js.map +1 -1
- package/dist/conditions/reverse-dependency.d.ts.map +1 -1
- package/dist/conditions/reverse-dependency.js +47 -2
- package/dist/conditions/reverse-dependency.js.map +1 -1
- package/dist/conditions/slice.js +1 -1
- package/dist/conditions/slice.js.map +1 -1
- package/dist/conditions/structural.js +1 -1
- package/dist/conditions/structural.js.map +1 -1
- package/dist/core/check-all.d.ts.map +1 -1
- package/dist/core/check-all.js +61 -7
- package/dist/core/check-all.js.map +1 -1
- package/dist/core/combinators.d.ts.map +1 -1
- package/dist/core/combinators.js +20 -27
- package/dist/core/combinators.js.map +1 -1
- package/dist/core/descendant-cache.d.ts.map +1 -1
- package/dist/core/descendant-cache.js +5 -7
- package/dist/core/descendant-cache.js.map +1 -1
- package/dist/core/diagnose.js +15 -7
- package/dist/core/diagnose.js.map +1 -1
- package/dist/core/disk-set.js +1 -1
- package/dist/core/disk-set.js.map +1 -1
- package/dist/core/element-cache.js +1 -1
- package/dist/core/element-cache.js.map +1 -1
- package/dist/core/exclusion-comments.d.ts +15 -50
- package/dist/core/exclusion-comments.d.ts.map +1 -1
- package/dist/core/exclusion-comments.js +4 -307
- package/dist/core/exclusion-comments.js.map +1 -1
- package/dist/core/execute-rule.d.ts +8 -0
- package/dist/core/execute-rule.d.ts.map +1 -1
- package/dist/core/execute-rule.js +99 -13
- package/dist/core/execute-rule.js.map +1 -1
- package/dist/core/glob-evaluator.js +2 -2
- package/dist/core/glob-evaluator.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.map +1 -1
- package/dist/core/line-index.js +6 -8
- package/dist/core/line-index.js.map +1 -1
- package/dist/core/metric-violation.d.ts +1 -1
- package/dist/core/module-edges.d.ts.map +1 -1
- package/dist/core/module-edges.js +26 -25
- package/dist/core/module-edges.js.map +1 -1
- package/dist/core/orphan-exclusions.d.ts.map +1 -1
- package/dist/core/orphan-exclusions.js +15 -5
- package/dist/core/orphan-exclusions.js.map +1 -1
- package/dist/core/path-universe.d.ts +10 -42
- package/dist/core/path-universe.d.ts.map +1 -1
- package/dist/core/path-universe.js +0 -20
- package/dist/core/path-universe.js.map +1 -1
- package/dist/core/project.d.ts.map +1 -1
- package/dist/core/project.js +6 -5
- package/dist/core/project.js.map +1 -1
- package/dist/core/rule-builder.d.ts +22 -1
- package/dist/core/rule-builder.d.ts.map +1 -1
- package/dist/core/rule-builder.js +38 -20
- package/dist/core/rule-builder.js.map +1 -1
- package/dist/core/rule-declaration.d.ts.map +1 -1
- package/dist/core/rule-declaration.js +14 -52
- package/dist/core/rule-declaration.js.map +1 -1
- package/dist/core/terminal-builder.d.ts +17 -13
- package/dist/core/terminal-builder.d.ts.map +1 -1
- package/dist/core/terminal-builder.js +41 -21
- package/dist/core/terminal-builder.js.map +1 -1
- package/dist/core/terminal-execution.d.ts +22 -6
- package/dist/core/terminal-execution.d.ts.map +1 -1
- package/dist/core/terminal-execution.js +39 -7
- package/dist/core/terminal-execution.js.map +1 -1
- 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.js +1 -1
- package/dist/core/vacuity-diagnosis.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 +1 -0
- package/dist/graphql/index.js.map +1 -1
- package/dist/graphql/resolver-rule-builder.d.ts +22 -76
- package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
- package/dist/graphql/resolver-rule-builder.js +8 -130
- package/dist/graphql/resolver-rule-builder.js.map +1 -1
- package/dist/graphql/schema-loader.d.ts.map +1 -1
- package/dist/graphql/schema-loader.js +4 -3
- 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 +21 -67
- package/dist/graphql/schema-rule-builder.d.ts.map +1 -1
- package/dist/graphql/schema-rule-builder.js +6 -120
- package/dist/graphql/schema-rule-builder.js.map +1 -1
- package/dist/helpers/baseline-generator.d.ts +9 -0
- package/dist/helpers/baseline-generator.d.ts.map +1 -1
- package/dist/helpers/baseline-generator.js +9 -0
- package/dist/helpers/baseline-generator.js.map +1 -1
- package/dist/helpers/baseline.d.ts.map +1 -1
- package/dist/helpers/baseline.js +4 -4
- package/dist/helpers/baseline.js.map +1 -1
- package/dist/helpers/body-traversal.d.ts.map +1 -1
- package/dist/helpers/body-traversal.js +13 -0
- package/dist/helpers/body-traversal.js.map +1 -1
- package/dist/helpers/callback-extractor.js +6 -38
- package/dist/helpers/callback-extractor.js.map +1 -1
- package/dist/helpers/complexity.d.ts +1 -1
- package/dist/helpers/complexity.js +1 -1
- package/dist/helpers/diff-aware.d.ts +11 -39
- package/dist/helpers/diff-aware.d.ts.map +1 -1
- package/dist/helpers/diff-aware.js +11 -79
- package/dist/helpers/diff-aware.js.map +1 -1
- package/dist/helpers/matchers.d.ts.map +1 -1
- package/dist/helpers/matchers.js +51 -67
- package/dist/helpers/matchers.js.map +1 -1
- package/dist/index.d.ts +15 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -18
- package/dist/index.js.map +1 -1
- package/dist/models/arch-function.d.ts +26 -2
- package/dist/models/arch-function.d.ts.map +1 -1
- package/dist/models/arch-function.js +51 -17
- 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 +16 -17
- package/dist/models/arch-jsx-element.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/presets/agent-guardrails.d.ts +29 -3
- package/dist/presets/agent-guardrails.d.ts.map +1 -1
- package/dist/presets/agent-guardrails.js +185 -1
- package/dist/presets/agent-guardrails.js.map +1 -1
- package/dist/presets/boundaries.d.ts +2 -2
- package/dist/presets/boundaries.d.ts.map +1 -1
- package/dist/presets/data-layer.d.ts +2 -2
- package/dist/presets/data-layer.d.ts.map +1 -1
- package/dist/presets/index.d.ts +4 -1
- package/dist/presets/index.d.ts.map +1 -1
- package/dist/presets/index.js +11 -1
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/layered.d.ts +2 -2
- package/dist/presets/layered.d.ts.map +1 -1
- package/dist/presets/recommended.d.ts +3 -3
- package/dist/presets/recommended.d.ts.map +1 -1
- package/dist/presets/shared.d.ts +8 -11
- package/dist/presets/shared.d.ts.map +1 -1
- package/dist/presets/shared.js +57 -28
- package/dist/presets/shared.js.map +1 -1
- package/dist/rules/metrics-function.d.ts.map +1 -1
- package/dist/rules/metrics-function.js +59 -62
- package/dist/rules/metrics-function.js.map +1 -1
- package/dist/rules/metrics.d.ts.map +1 -1
- package/dist/rules/metrics.js +62 -59
- 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 +38 -4
- package/dist/smells/duplicate-bodies.d.ts.map +1 -1
- package/dist/smells/duplicate-bodies.js +93 -44
- 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 +12 -0
- package/dist/smells/fingerprint.d.ts.map +1 -1
- package/dist/smells/fingerprint.js +8 -2
- package/dist/smells/fingerprint.js.map +1 -1
- package/dist/smells/inconsistent-siblings.js +1 -1
- package/dist/smells/inconsistent-siblings.js.map +1 -1
- package/dist/smells/similar-pairs.d.ts +9 -8
- package/dist/smells/similar-pairs.d.ts.map +1 -1
- package/dist/smells/similar-pairs.js +83 -1
- package/dist/smells/similar-pairs.js.map +1 -1
- package/dist/smells/smell-builder.d.ts.map +1 -1
- package/dist/smells/smell-builder.js +3 -2
- 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/tsconfig-builder.d.ts.map +1 -1
- package/dist/tsconfig/tsconfig-builder.js +3 -2
- package/dist/tsconfig/tsconfig-builder.js.map +1 -1
- package/package.json +3 -2
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AA2DA,UAAU,UAAU;IAClB,MAAM,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,aAAa,CAAC,EAAE,OAAO,CAAA;QACvB,GAAG,CAAC,EAAE,OAAO,CAAA;QACb,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;IACD,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAyBvD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AA2DA,UAAU,UAAU;IAClB,MAAM,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,aAAa,CAAC,EAAE,OAAO,CAAA;QACvB,GAAG,CAAC,EAAE,OAAO,CAAA;QACb,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;IACD,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAyBvD;AA6FD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGvD"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parseArgs } from 'node:util';
|
|
2
|
-
import { isRecord } from '@nielspeter/eess';
|
|
2
|
+
import { isRecord, requireRuleFiles } from '@nielspeter/eess/internal';
|
|
3
3
|
import { readFileSync } from 'node:fs';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import path from 'node:path';
|
|
@@ -82,16 +82,9 @@ export function parseCliArgs(args) {
|
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
84
|
/** Require rule files to be specified, printing an error and setting exit code if missing. */
|
|
85
|
-
function requireRuleFiles(ruleFiles) {
|
|
86
|
-
if (ruleFiles.length > 0)
|
|
87
|
-
return true;
|
|
88
|
-
console.error('Error: No rule files specified. Pass rule files as arguments or set them in config.');
|
|
89
|
-
process.exitCode = 1;
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
85
|
/** Handle the `check` subcommand. */
|
|
93
86
|
async function handleCheck(ruleFiles, values, config, format, baseline, changed, base) {
|
|
94
|
-
if (!requireRuleFiles(ruleFiles))
|
|
87
|
+
if (!requireRuleFiles(ruleFiles, 'eess-ts.config.ts'))
|
|
95
88
|
return;
|
|
96
89
|
if (values.watch === true) {
|
|
97
90
|
const watchDirs = config.watchDirs ?? ['src'];
|
|
@@ -128,7 +121,7 @@ async function handleCheck(ruleFiles, values, config, format, baseline, changed,
|
|
|
128
121
|
}
|
|
129
122
|
/** Handle the `baseline` subcommand. */
|
|
130
123
|
async function handleBaseline(ruleFiles, output) {
|
|
131
|
-
if (!requireRuleFiles(ruleFiles))
|
|
124
|
+
if (!requireRuleFiles(ruleFiles, 'eess-ts.config.ts'))
|
|
132
125
|
return;
|
|
133
126
|
const code = await runBaseline({ ruleFiles, output });
|
|
134
127
|
if (code !== 0)
|
|
@@ -156,7 +149,7 @@ function isValidFormat(command, format) {
|
|
|
156
149
|
}
|
|
157
150
|
/** Handle the `explain` subcommand. */
|
|
158
151
|
async function handleExplain(ruleFiles, markdown, format) {
|
|
159
|
-
if (!requireRuleFiles(ruleFiles))
|
|
152
|
+
if (!requireRuleFiles(ruleFiles, 'eess-ts.config.ts'))
|
|
160
153
|
return;
|
|
161
154
|
await runExplain({ ruleFiles, markdown, format });
|
|
162
155
|
}
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-rules.d.ts","sourceRoot":"","sources":["../../src/cli/load-rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"load-rules.d.ts","sourceRoot":"","sources":["../../src/cli/load-rules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIvD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,UAAU,WAAW;IACnB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAmC5B"}
|
package/dist/cli/load-rules.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { ArchConfigError } from '@nielspeter/eess';
|
|
1
2
|
import path from 'node:path';
|
|
2
3
|
import { importRuleModule } from './import-rule-module.js';
|
|
3
|
-
import { isNullaryCallable } from '@nielspeter/eess';
|
|
4
|
+
import { isNullaryCallable } from '@nielspeter/eess/internal';
|
|
4
5
|
/**
|
|
5
6
|
* Load rule files (supports `.ts` and `.js`/`.mjs`).
|
|
6
7
|
*
|
|
@@ -28,7 +29,7 @@ export async function loadRuleFiles(files, options) {
|
|
|
28
29
|
// with `tests/cli/load-rules.test.ts` carrying eess's assertions.
|
|
29
30
|
items.forEach((item, index) => {
|
|
30
31
|
if (!isRuleBuilderLike(item)) {
|
|
31
|
-
throw new
|
|
32
|
+
throw new ArchConfigError('loadRuleFiles', `Rule file "${file}": default export entry [${index}] is not a rule builder ` +
|
|
32
33
|
`(got ${describeValue(item)}). Every entry must be a builder with a .check() ` +
|
|
33
34
|
`method — e.g. \`modules(p).that()…\`. A preset that returns void cannot be placed ` +
|
|
34
35
|
`directly in the array; call it in its own statement, or export a builder.`);
|
|
@@ -55,10 +56,10 @@ function resolveExported(exported, file) {
|
|
|
55
56
|
if (Array.isArray(result)) {
|
|
56
57
|
return result;
|
|
57
58
|
}
|
|
58
|
-
throw new
|
|
59
|
+
throw new ArchConfigError('resolveExported', `Rule file "${file}": default-exported function must return an array of rule builders ` +
|
|
59
60
|
`(got ${describeValue(result)}).`);
|
|
60
61
|
}
|
|
61
|
-
throw new
|
|
62
|
+
throw new ArchConfigError('resolveExported', `Rule file "${file}": default export must be an array of rule builders, or a function ` +
|
|
62
63
|
`returning one (got ${describeValue(exported)}). Add \`export default [ …builders ]\`.`);
|
|
63
64
|
}
|
|
64
65
|
/** Short human-readable description of an unexpected value, for error messages. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-rules.js","sourceRoot":"","sources":["../../src/cli/load-rules.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"load-rules.js","sourceRoot":"","sources":["../../src/cli/load-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
1
|
import type { CliConfig } from './config.js';
|
|
2
|
-
/**
|
|
3
|
-
* Resolve CLI configuration from an explicit path or by searching for a config file.
|
|
4
|
-
*
|
|
5
|
-
* Config resolution order:
|
|
6
|
-
* 1. CLI flags (highest priority) — handled by caller
|
|
7
|
-
* 2. eess-ts.config.ts in project root
|
|
8
|
-
* 3. Defaults (project: 'tsconfig.json', format: 'auto')
|
|
9
|
-
*/
|
|
10
2
|
export declare function resolveConfig(explicitPath?: string): Promise<CliConfig>;
|
|
11
3
|
//# sourceMappingURL=resolve-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-config.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-config.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAgB5C,wBAAsB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAS7E"}
|
|
@@ -1,71 +1,41 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
+
import { findConfigFile, extractSharedConfig, isRecord } from '@nielspeter/eess/internal';
|
|
2
3
|
import { importRuleModule } from './import-rule-module.js';
|
|
3
|
-
import { isRecord } from '@nielspeter/eess';
|
|
4
|
-
import fs from 'node:fs';
|
|
5
|
-
const CONFIG_FILENAMES = ['eess-ts.config.ts', 'eess-ts.config.js'];
|
|
6
4
|
/**
|
|
7
|
-
* Resolve CLI configuration from an explicit path or by searching for
|
|
5
|
+
* Resolve CLI configuration from an explicit path or by searching for one.
|
|
8
6
|
*
|
|
9
7
|
* Config resolution order:
|
|
10
8
|
* 1. CLI flags (highest priority) — handled by caller
|
|
11
9
|
* 2. eess-ts.config.ts in project root
|
|
12
10
|
* 3. Defaults (project: 'tsconfig.json', format: 'auto')
|
|
11
|
+
*
|
|
12
|
+
* Finding the file and validating the shared fields are the kernel's — they were
|
|
13
|
+
* duplicated with `eess-mermaid` (`findConfigFile` scored 100%). What stays here
|
|
14
|
+
* is this dialect's own filenames, its own two extra fields, and its loader.
|
|
13
15
|
*/
|
|
16
|
+
const CONFIG_FILENAMES = ['eess-ts.config.ts', 'eess-ts.config.js'];
|
|
14
17
|
export async function resolveConfig(explicitPath) {
|
|
15
|
-
const configPath = explicitPath ?? findConfigFile();
|
|
18
|
+
const configPath = explicitPath ?? findConfigFile(CONFIG_FILENAMES);
|
|
16
19
|
if (configPath === undefined)
|
|
17
20
|
return {};
|
|
18
21
|
// Native `import()` first, jiti only if Node refuses the file's module format
|
|
19
22
|
// — see `import-rule-module.ts`. A config in a `"type": "commonjs"` project is
|
|
20
23
|
// bug 0074; a config in an ESM project must share the CLI's module registry.
|
|
21
24
|
const mod = await importRuleModule(path.resolve(configPath), false);
|
|
22
|
-
return
|
|
23
|
-
}
|
|
24
|
-
function findConfigFile() {
|
|
25
|
-
const cwd = process.cwd();
|
|
26
|
-
for (const name of CONFIG_FILENAMES) {
|
|
27
|
-
const candidate = path.join(cwd, name);
|
|
28
|
-
if (fs.existsSync(candidate))
|
|
29
|
-
return candidate;
|
|
30
|
-
}
|
|
31
|
-
return undefined;
|
|
25
|
+
return { ...extractSharedConfig(mod), ...tsOnlyFields(mod) };
|
|
32
26
|
}
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
*/
|
|
37
|
-
function extractDefault(mod) {
|
|
38
|
-
if (mod === null || mod === undefined || typeof mod !== 'object') {
|
|
27
|
+
/** `project` and `baseline` — the two fields no other dialect has. */
|
|
28
|
+
function tsOnlyFields(mod) {
|
|
29
|
+
if (!isRecord(mod) || !('default' in mod))
|
|
39
30
|
return {};
|
|
40
|
-
}
|
|
41
|
-
// Dynamic import returns a module namespace — 'in' narrows safely
|
|
42
|
-
if (!('default' in mod)) {
|
|
43
|
-
return {};
|
|
44
|
-
}
|
|
45
31
|
const defaultExport = mod.default;
|
|
46
|
-
if (defaultExport === null || defaultExport === undefined || typeof defaultExport !== 'object') {
|
|
47
|
-
return {};
|
|
48
|
-
}
|
|
49
|
-
// Runtime validate: only pick known CliConfig fields
|
|
50
32
|
if (!isRecord(defaultExport))
|
|
51
33
|
return {};
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (typeof obj['format'] === 'string') {
|
|
59
|
-
// A guard over the literal union, so the narrowing is the check rather than
|
|
60
|
-
// a cast that repeats it. `includes` on a `string[]` cannot narrow; a
|
|
61
|
-
// predicate over the same list can.
|
|
62
|
-
const isFormat = (v) => ['terminal', 'json', 'github', 'auto'].some((f) => f === v);
|
|
63
|
-
if (isFormat(obj['format'])) {
|
|
64
|
-
config.format = obj['format'];
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (Array.isArray(obj['rules']))
|
|
68
|
-
config.rules = obj['rules'].filter((r) => typeof r === 'string');
|
|
69
|
-
return config;
|
|
34
|
+
const out = {};
|
|
35
|
+
if (typeof defaultExport['project'] === 'string')
|
|
36
|
+
out.project = defaultExport['project'];
|
|
37
|
+
if (typeof defaultExport['baseline'] === 'string')
|
|
38
|
+
out.baseline = defaultExport['baseline'];
|
|
39
|
+
return out;
|
|
70
40
|
}
|
|
71
41
|
//# sourceMappingURL=resolve-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../../src/cli/resolve-config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../../src/cli/resolve-config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAG1D;;;;;;;;;;;GAWG;AACH,MAAM,gBAAgB,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAA;AAEnE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,YAAqB;IACvD,MAAM,UAAU,GAAG,YAAY,IAAI,cAAc,CAAC,gBAAgB,CAAC,CAAA;IACnE,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAEvC,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,MAAM,GAAG,GAAY,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAA;IAC5E,OAAO,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAA;AAC9D,CAAC;AAED,sEAAsE;AACtE,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IACpD,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAA;IACjC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,CAAA;IACvC,MAAM,GAAG,GAA4C,EAAE,CAAA;IACvD,IAAI,OAAO,aAAa,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,GAAG,CAAC,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACxF,IAAI,OAAO,aAAa,CAAC,UAAU,CAAC,KAAK,QAAQ;QAAE,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;IAC3F,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-file-findings.d.ts","sourceRoot":"","sources":["../../src/cli/rule-file-findings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"rule-file-findings.d.ts","sourceRoot":"","sources":["../../src/cli/rule-file-findings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAKrD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,SAAS,aAAa,EAAE,EACpC,IAAI,EAAE,MAAM,GACX,aAAa,EAAE,CAEjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,CA0B9F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAChB,aAAa,EAAE,CASjB;AA2DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,CAqBhF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC/C,aAAa,CAkDf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAsBtE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isArchRuleError } from '@nielspeter/eess';
|
|
1
|
+
import { isArchRuleError, isArchConfigError } from '@nielspeter/eess';
|
|
2
2
|
import { basename } from 'node:path';
|
|
3
3
|
/**
|
|
4
4
|
* Attribute findings that have no source location of their own to the rule file
|
|
@@ -94,7 +94,65 @@ export function ruleFileFailure(file, error, ruleFiles) {
|
|
|
94
94
|
* did with everything else.
|
|
95
95
|
*/
|
|
96
96
|
export function failureOrViolations(file, error, ruleFiles) {
|
|
97
|
-
|
|
97
|
+
if (isArchRuleError(error))
|
|
98
|
+
return error.violations;
|
|
99
|
+
// Bug 0241. `ArchConfigError` knows WHAT was misconfigured, so it is the one
|
|
100
|
+
// error here that can carry a specific remedy without guessing — which is the
|
|
101
|
+
// whole reason the type exists, and it shipped with 17 throw sites and nothing
|
|
102
|
+
// reading it. Ordered after the rule-error branch, never before: a rule file
|
|
103
|
+
// that self-executes a failing check reports its own findings.
|
|
104
|
+
if (isArchConfigError(error))
|
|
105
|
+
return [ruleFileMisconfigured(file, error, ruleFiles)];
|
|
106
|
+
return [ruleFileFailure(file, error, ruleFiles)];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* A rule file misconfigured something eess offers, and eess knows which thing.
|
|
110
|
+
*
|
|
111
|
+
* The sibling `ruleFileFailure` is deliberately vague because it answers for any
|
|
112
|
+
* error a rule file can raise, and naming one cause for all of them is ADR-009
|
|
113
|
+
* rule 2's defect. This one is the opposite case and gets the opposite
|
|
114
|
+
* treatment: the thrower named its subject — `havePropertyNamed`,
|
|
115
|
+
* `requireGraphQL`, `workspace` — so the remedy can point at the call instead of
|
|
116
|
+
* hedging about what the message might mean.
|
|
117
|
+
*
|
|
118
|
+
* The distinction is for the reader this project actually ships to. "Your rule
|
|
119
|
+
* file is wrong, fix the argument" and "eess crashed" ask an agent for opposite
|
|
120
|
+
* next actions, and before this they rendered identically.
|
|
121
|
+
*
|
|
122
|
+
* NOT exported, unlike its sibling `ruleFileFailure`. Nothing outside this
|
|
123
|
+
* module calls it — `failureOrViolations` is the seam, and the tests drive it
|
|
124
|
+
* through that. Exporting it anyway would have added a fourth instance of the
|
|
125
|
+
* exact shape bug 0241 is about, in the fix for bug 0241; `check:arch`'s
|
|
126
|
+
* no-unused-exports rule said so before this comment existed.
|
|
127
|
+
*/
|
|
128
|
+
function ruleFileMisconfigured(file, error, ruleFiles) {
|
|
129
|
+
const others = ruleFiles > 1 ? ' The other rule files in this run were still checked.' : '';
|
|
130
|
+
// The cause, when it adds something. `schema-loader.ts` throws the same
|
|
131
|
+
// subject for "the graphql package is not installed" and "it is installed but
|
|
132
|
+
// failed to load", and only the cause separates them — its own fix records
|
|
133
|
+
// that discarding it "used to be reported as 'not installed' too, discarding
|
|
134
|
+
// the one line that would have told the reader what actually happened".
|
|
135
|
+
// Nothing rendered `cause` before this, so that line was reaching nobody.
|
|
136
|
+
const cause = error.cause instanceof Error ? error.cause.message : undefined;
|
|
137
|
+
const detail = cause !== undefined && !error.message.includes(cause)
|
|
138
|
+
? `${error.message} (${cause})`
|
|
139
|
+
: error.message;
|
|
140
|
+
return {
|
|
141
|
+
// The subject, not the file's basename: the thing to open is the CALL. The
|
|
142
|
+
// file is already in `file`, and the generic path uses the basename there.
|
|
143
|
+
rule: 'eess-ts: rule file',
|
|
144
|
+
element: error.subject,
|
|
145
|
+
file,
|
|
146
|
+
line: 1,
|
|
147
|
+
message: `${error.subject} is misconfigured in this rule file, so its rules enforced nothing in ` +
|
|
148
|
+
`this run: ${detail}${others}`,
|
|
149
|
+
// Specific, because this error earned it. `ruleFileFailure`'s remedy has to
|
|
150
|
+
// hedge ("if it names a builder method…"); this one does not, and asserting
|
|
151
|
+
// that it does not is how the two stay distinguishable.
|
|
152
|
+
suggestion: `Fix the call to ${error.subject} in this rule file. This is a fault in how the rule was ` +
|
|
153
|
+
`configured, not a finding about the code under test — editing the code cannot clear it.`,
|
|
154
|
+
bypassFilters: true,
|
|
155
|
+
};
|
|
98
156
|
}
|
|
99
157
|
/**
|
|
100
158
|
* A rule file stopped evaluating partway, so the rules after that point never ran.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-file-findings.js","sourceRoot":"","sources":["../../src/cli/rule-file-findings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"rule-file-findings.js","sourceRoot":"","sources":["../../src/cli/rule-file-findings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAoC,EACpC,IAAY;IAEZ,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,4JAA4J;AAC5J,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAc,EAAE,SAAiB;IAC7E,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAClE,6EAA6E;IAC7E,+EAA+E;IAC/E,8DAA8D;IAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAA;IACjF,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,uDAAuD,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3F,OAAO;QACL,4EAA4E;QAC5E,wEAAwE;QACxE,sEAAsE;QACtE,6EAA6E;QAC7E,+DAA+D;QAC/D,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC;QACvB,IAAI;QACJ,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,qFAAqF,MAAM,GAAG,MAAM,EAAE;QAC/G,0EAA0E;QAC1E,2EAA2E;QAC3E,uEAAuE;QACvE,2EAA2E;QAC3E,2EAA2E;QAC3E,UAAU,EAAE,oQAAoQ;QAChR,aAAa,EAAE,IAAI;KACpB,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,KAAc,EACd,SAAiB;IAEjB,IAAI,eAAe,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,UAAU,CAAA;IACnD,6EAA6E;IAC7E,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,+DAA+D;IAC/D,IAAI,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAA;IACpF,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAA;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,qBAAqB,CAC5B,IAAY,EACZ,KAAsB,EACtB,SAAiB;IAEjB,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,uDAAuD,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3F,wEAAwE;IACxE,8EAA8E;IAC9E,2EAA2E;IAC3E,6EAA6E;IAC7E,wEAAwE;IACxE,0EAA0E;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;IAC5E,MAAM,MAAM,GACV,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnD,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG;QAC/B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;IACnB,OAAO;QACL,2EAA2E;QAC3E,2EAA2E;QAC3E,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI;QACJ,IAAI,EAAE,CAAC;QACP,OAAO,EACL,GAAG,KAAK,CAAC,OAAO,wEAAwE;YACxF,aAAa,MAAM,GAAG,MAAM,EAAE;QAChC,4EAA4E;QAC5E,4EAA4E;QAC5E,wDAAwD;QACxD,UAAU,EACR,mBAAmB,KAAK,CAAC,OAAO,0DAA0D;YAC1F,yFAAyF;QAC3F,aAAa,EAAE,IAAI;KACpB,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,SAAiB;IAC/D,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,uDAAuD,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3F,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC;QACvB,IAAI;QACJ,IAAI,EAAE,CAAC;QACP,OAAO,EACL,qFAAqF;YACrF,yFAAyF;YACzF,6BAA6B,MAAM,EAAE;QACvC,UAAU,EACR,oFAAoF;YACpF,0FAA0F;YAC1F,0FAA0F;YAC1F,0FAA0F;YAC1F,mFAAmF;YACnF,wFAAwF;YACxF,wDAAwD;QAC1D,aAAa,EAAE,IAAI;KACpB,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,OAAgD;IAEhD,iFAAiF;IACjF,8EAA8E;IAC9E,iFAAiF;IACjF,4DAA4D;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChG,IAAI,OAAO,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;IAChE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEhC,OAAO;QACL,4DAA4D;QAC5D,kEAAkE;QAClE,qEAAqE;QACrE,EAAE;QACF,0EAA0E;QAC1E,qEAAqE;QACrE,EAAE;QACF,sEAAsE;QACtE,4EAA4E;QAC5E,8EAA8E;QAC9E,+EAA+E;QAC/E,2EAA2E;QAC3E,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC;QACvB,IAAI;QACJ,IAAI,EAAE,CAAC;QACP,OAAO,EACL,+CAA+C,IAAI,GAAG;YACtD,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,6CAA6C;YACjF,iFAAiF;YACjF,mFAAmF;YACnF,yCAAyC;QAC3C,OAAO,EACL,gFAAgF;YAChF,+EAA+E;YAC/E,8CAA8C;QAChD,6EAA6E;QAC7E,+EAA+E;QAC/E,gFAAgF;QAChF,mEAAmE;QACnE,UAAU,EACR,6EAA6E;YAC7E,gFAAgF;YAChF,4EAA4E;YAC5E,qDAAqD;YACrD,iFAAiF;YACjF,qEAAqE;QACvE,aAAa,EAAE,IAAI;KACpB,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC;QACvB,IAAI;QACJ,IAAI,EAAE,CAAC;QACP,OAAO,EACL,+EAA+E;YAC/E,+EAA+E;YAC/E,yCAAyC;QAC3C,OAAO,EACL,+EAA+E;YAC/E,qCAAqC;QACvC,UAAU,EACR,gFAAgF;YAChF,kEAAkE;YAClE,iFAAiF;YACjF,gFAAgF;YAChF,+EAA+E;YAC/E,wBAAwB;QAC1B,aAAa,EAAE,IAAI;KACpB,CAAA;AACH,CAAC"}
|
package/dist/cli/watch.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch mode for `eess-ts`.
|
|
3
|
+
*
|
|
4
|
+
* The scheduling and the watch loop live in the kernel — they were duplicated
|
|
5
|
+
* with `eess-mermaid` and the copies drifted (see `@nielspeter/eess`'s
|
|
6
|
+
* `watch.ts`). What is dialect-specific is only which filenames count.
|
|
7
|
+
*/
|
|
1
8
|
interface WatchOptions {
|
|
2
9
|
/** Directories to watch for changes */
|
|
3
10
|
watchDirs: string[];
|
|
@@ -9,53 +16,16 @@ interface WatchOptions {
|
|
|
9
16
|
debounceMs?: number;
|
|
10
17
|
}
|
|
11
18
|
export declare const TS_FILE_RE: RegExp;
|
|
12
|
-
/**
|
|
13
|
-
* Scheduling logic for watch mode — extracted for testability.
|
|
14
|
-
*
|
|
15
|
-
* Debounces rapid triggers. If a trigger arrives while the callback
|
|
16
|
-
* is running, it queues a re-run after the current run completes.
|
|
17
|
-
*/
|
|
18
|
-
export declare class RunScheduler {
|
|
19
|
-
#private;
|
|
20
|
-
private debounceTimer;
|
|
21
|
-
private running;
|
|
22
|
-
private _pendingRerun;
|
|
23
|
-
private readonly debounceMs;
|
|
24
|
-
private readonly onRun;
|
|
25
|
-
/** Completed runs. */
|
|
26
|
-
get runCount(): number;
|
|
27
|
-
constructor(onRun: (trigger: string) => Promise<void>, debounceMs?: number);
|
|
28
|
-
get pendingRerun(): boolean;
|
|
29
|
-
get isRunning(): boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Queue a re-run, debounced.
|
|
32
|
-
*
|
|
33
|
-
* A run already in flight is not interrupted: the request is remembered and
|
|
34
|
-
* replayed when it finishes, so a save during a run is never dropped and
|
|
35
|
-
* never starts a second concurrent run.
|
|
36
|
-
*/
|
|
37
|
-
schedule(trigger: string): void;
|
|
38
|
-
private executeRun;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Watch for file changes and re-run the callback.
|
|
42
|
-
*
|
|
43
|
-
* Uses Node.js `fs.watch` with `recursive: true` (Node 24+).
|
|
44
|
-
* Debounces rapid filesystem events. If a change arrives while
|
|
45
|
-
* a run is in progress, it is queued and executed after the
|
|
46
|
-
* current run completes.
|
|
47
|
-
*
|
|
48
|
-
* Known limitation: each re-run uses `importFresh` which creates
|
|
49
|
-
* a new ESM module cache entry. Over long sessions, memory grows.
|
|
50
|
-
* Restart the watcher periodically for long sessions.
|
|
51
|
-
*/
|
|
52
19
|
export declare function watchAndRerun(options: WatchOptions): void;
|
|
53
20
|
/**
|
|
54
21
|
* Import a module with cache-busting for watch mode.
|
|
55
22
|
*
|
|
56
|
-
* Node ESM has no cache eviction API. Each call creates a new
|
|
57
|
-
*
|
|
58
|
-
*
|
|
23
|
+
* Node ESM has no cache eviction API. Each call creates a new module entry via a
|
|
24
|
+
* unique query string. Over long sessions this leaks memory.
|
|
25
|
+
*
|
|
26
|
+
* Stays in this package rather than moving to the kernel with the watch loop:
|
|
27
|
+
* `eess-mermaid` has no equivalent, so it is not duplicated and unifying it
|
|
28
|
+
* would be inventing shared surface rather than removing copied surface.
|
|
59
29
|
*/
|
|
60
30
|
export declare function importFresh(filePath: string): Promise<unknown>;
|
|
61
31
|
export {};
|
package/dist/cli/watch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,UAAU,YAAY;IACpB,uCAAuC;IACvC,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,mDAAmD;IACnD,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,0CAA0C;IAC1C,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAGD,eAAO,MAAM,UAAU,QAAiB,CAAA;AAExC,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAEzD;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIpE"}
|
package/dist/cli/watch.js
CHANGED
|
@@ -1,159 +1,19 @@
|
|
|
1
|
-
import { watch } from 'node:fs/promises';
|
|
2
|
-
import { isNullaryCallable } from '@nielspeter/eess';
|
|
3
1
|
import path from 'node:path';
|
|
4
|
-
import {
|
|
2
|
+
import { watchAndRerun as watchAndRerunShared } from '@nielspeter/eess/internal';
|
|
5
3
|
// eess-exclude eess/no-unused-exports: consumed by the test suite; the build tsconfig this gate reads excludes tests, so `src` is the only usage it can see
|
|
6
4
|
export const TS_FILE_RE = /\.[cm]?tsx?$/;
|
|
7
|
-
/**
|
|
8
|
-
* Scheduling logic for watch mode — extracted for testability.
|
|
9
|
-
*
|
|
10
|
-
* Debounces rapid triggers. If a trigger arrives while the callback
|
|
11
|
-
* is running, it queues a re-run after the current run completes.
|
|
12
|
-
*/
|
|
13
|
-
// eess-exclude eess/no-unused-exports: consumed by the test suite; the build tsconfig this gate reads excludes tests, so `src` is the only usage it can see
|
|
14
|
-
export class RunScheduler {
|
|
15
|
-
debounceTimer;
|
|
16
|
-
running = false;
|
|
17
|
-
_pendingRerun = false;
|
|
18
|
-
debounceMs;
|
|
19
|
-
onRun;
|
|
20
|
-
/**
|
|
21
|
-
* How many runs have completed — read by the watch loop's own tests.
|
|
22
|
-
*
|
|
23
|
-
* Hard-private with a getter, matching `eess-mermaid`'s `RunScheduler`: the
|
|
24
|
-
* counter is this class's bookkeeping and a caller that could reassign it
|
|
25
|
-
* would make the number mean nothing.
|
|
26
|
-
*/
|
|
27
|
-
#runCount = 0;
|
|
28
|
-
/** Completed runs. */
|
|
29
|
-
get runCount() {
|
|
30
|
-
return this.#runCount;
|
|
31
|
-
}
|
|
32
|
-
constructor(onRun, debounceMs = 250) {
|
|
33
|
-
this.onRun = onRun;
|
|
34
|
-
this.debounceMs = debounceMs;
|
|
35
|
-
}
|
|
36
|
-
get pendingRerun() {
|
|
37
|
-
return this._pendingRerun;
|
|
38
|
-
}
|
|
39
|
-
get isRunning() {
|
|
40
|
-
return this.running;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Queue a re-run, debounced.
|
|
44
|
-
*
|
|
45
|
-
* A run already in flight is not interrupted: the request is remembered and
|
|
46
|
-
* replayed when it finishes, so a save during a run is never dropped and
|
|
47
|
-
* never starts a second concurrent run.
|
|
48
|
-
*/
|
|
49
|
-
schedule(trigger) {
|
|
50
|
-
if (this.debounceTimer)
|
|
51
|
-
clearTimeout(this.debounceTimer);
|
|
52
|
-
this.debounceTimer = setTimeout(() => {
|
|
53
|
-
if (this.running) {
|
|
54
|
-
this._pendingRerun = true;
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
this.executeRun(trigger);
|
|
58
|
-
}, this.debounceMs);
|
|
59
|
-
}
|
|
60
|
-
executeRun(trigger) {
|
|
61
|
-
this.running = true;
|
|
62
|
-
this._pendingRerun = false;
|
|
63
|
-
this.#runCount++;
|
|
64
|
-
process.stdout.write('\x1B[2J\x1B[H'); // clear screen, preserve scrollback
|
|
65
|
-
process.stdout.write(`Change detected: ${trigger}\n\n`);
|
|
66
|
-
this.onRun(trigger)
|
|
67
|
-
.catch((err) => {
|
|
68
|
-
// Rule failures are expected — swallow ArchRuleError, print others
|
|
69
|
-
if (!isArchRuleError(err)) {
|
|
70
|
-
if (err instanceof Error) {
|
|
71
|
-
console.error(err.message);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
})
|
|
75
|
-
.finally(() => {
|
|
76
|
-
this.running = false;
|
|
77
|
-
if (this._pendingRerun) {
|
|
78
|
-
this.executeRun('(queued change)');
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
process.stdout.write('\nWatching for changes...\n');
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Watch for file changes and re-run the callback.
|
|
88
|
-
*
|
|
89
|
-
* Uses Node.js `fs.watch` with `recursive: true` (Node 24+).
|
|
90
|
-
* Debounces rapid filesystem events. If a change arrives while
|
|
91
|
-
* a run is in progress, it is queued and executed after the
|
|
92
|
-
* current run completes.
|
|
93
|
-
*
|
|
94
|
-
* Known limitation: each re-run uses `importFresh` which creates
|
|
95
|
-
* a new ESM module cache entry. Over long sessions, memory grows.
|
|
96
|
-
* Restart the watcher periodically for long sessions.
|
|
97
|
-
*/
|
|
98
5
|
export function watchAndRerun(options) {
|
|
99
|
-
|
|
100
|
-
const scheduler = new RunScheduler(onChangeDetected, debounceMs);
|
|
101
|
-
const watchers = [];
|
|
102
|
-
// Watch directories recursively
|
|
103
|
-
for (const dir of watchDirs) {
|
|
104
|
-
const resolved = path.resolve(dir);
|
|
105
|
-
const watcher = watch(resolved, { recursive: true });
|
|
106
|
-
watchers.push(watcher);
|
|
107
|
-
void (async () => {
|
|
108
|
-
try {
|
|
109
|
-
for await (const event of watcher) {
|
|
110
|
-
if (event.filename && TS_FILE_RE.test(event.filename)) {
|
|
111
|
-
scheduler.schedule(event.filename);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
catch (err) {
|
|
116
|
-
if (err instanceof Error && err.message !== 'The operation was aborted') {
|
|
117
|
-
console.error(`Watcher error on ${dir}: ${err.message}`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
})();
|
|
121
|
-
}
|
|
122
|
-
// Watch individual rule files
|
|
123
|
-
for (const file of watchFiles) {
|
|
124
|
-
const resolved = path.resolve(file);
|
|
125
|
-
const watcher = watch(resolved);
|
|
126
|
-
watchers.push(watcher);
|
|
127
|
-
void (async () => {
|
|
128
|
-
try {
|
|
129
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- must consume async iterator
|
|
130
|
-
for await (const _event of watcher) {
|
|
131
|
-
scheduler.schedule(path.basename(file));
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
catch (err) {
|
|
135
|
-
if (err instanceof Error && err.message !== 'The operation was aborted') {
|
|
136
|
-
console.error(`Watcher error on ${file}: ${err.message}`);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
})();
|
|
140
|
-
}
|
|
141
|
-
// Graceful shutdown — close all watchers on SIGINT
|
|
142
|
-
process.on('SIGINT', () => {
|
|
143
|
-
for (const w of watchers) {
|
|
144
|
-
if ('return' in w && isNullaryCallable(w.return)) {
|
|
145
|
-
void w.return();
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
process.exit(0);
|
|
149
|
-
});
|
|
6
|
+
watchAndRerunShared({ ...options, watchedFileRe: TS_FILE_RE });
|
|
150
7
|
}
|
|
151
8
|
/**
|
|
152
9
|
* Import a module with cache-busting for watch mode.
|
|
153
10
|
*
|
|
154
|
-
* Node ESM has no cache eviction API. Each call creates a new
|
|
155
|
-
*
|
|
156
|
-
*
|
|
11
|
+
* Node ESM has no cache eviction API. Each call creates a new module entry via a
|
|
12
|
+
* unique query string. Over long sessions this leaks memory.
|
|
13
|
+
*
|
|
14
|
+
* Stays in this package rather than moving to the kernel with the watch loop:
|
|
15
|
+
* `eess-mermaid` has no equivalent, so it is not duplicated and unifying it
|
|
16
|
+
* would be inventing shared surface rather than removing copied surface.
|
|
157
17
|
*/
|
|
158
18
|
export async function importFresh(filePath) {
|
|
159
19
|
const resolved = path.resolve(filePath);
|
package/dist/cli/watch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAoBhF,4JAA4J;AAC5J,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CAAA;AAExC,MAAM,UAAU,aAAa,CAAC,OAAqB;IACjD,mBAAmB,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAA;AAChE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,GAAG,GAAG,UAAU,QAAQ,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IAChD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;AACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/conditions/call.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/conditions/call.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAgDtD;;GAEG;AACH,wBAAgB,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,CAiB9C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,CAoBtF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,CAsCzF;AAiCD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAyChF;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAwCnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,CA4BtF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,CA+BzF"}
|