@goodbones/core 0.1.0-beta.10 → 0.1.0-beta.12

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.
Files changed (119) hide show
  1. package/build/dts/core/structure.d.ts.map +1 -1
  2. package/build/dts/domain/architecture-config.d.ts +3 -310
  3. package/build/dts/domain/architecture-config.d.ts.map +1 -1
  4. package/build/dts/domain/snapshot.d.ts +150 -18
  5. package/build/dts/domain/snapshot.d.ts.map +1 -1
  6. package/build/dts/index.d.ts +11 -14
  7. package/build/dts/index.d.ts.map +1 -1
  8. package/build/dts/infrastructure/file-system-fake.d.ts.map +1 -1
  9. package/build/dts/infrastructure/file-system-live.d.ts.map +1 -1
  10. package/build/dts/infrastructure/walk.d.ts +6 -1
  11. package/build/dts/infrastructure/walk.d.ts.map +1 -1
  12. package/build/dts/load/extension.d.ts +33 -0
  13. package/build/dts/load/extension.d.ts.map +1 -0
  14. package/build/dts/load/policy.d.ts +4 -10
  15. package/build/dts/load/policy.d.ts.map +1 -1
  16. package/build/dts/manifest/compile.d.ts +7 -2
  17. package/build/dts/manifest/compile.d.ts.map +1 -1
  18. package/build/dts/manifest/extension.d.ts +8 -0
  19. package/build/dts/manifest/extension.d.ts.map +1 -0
  20. package/build/dts/manifest/glob.d.ts +1 -0
  21. package/build/dts/manifest/glob.d.ts.map +1 -1
  22. package/build/dts/manifest/json-schema.d.ts +6 -2
  23. package/build/dts/manifest/json-schema.d.ts.map +1 -1
  24. package/build/dts/manifest/manifest.d.ts +7 -362
  25. package/build/dts/manifest/manifest.d.ts.map +1 -1
  26. package/build/dts/ports/file-system.d.ts +1 -0
  27. package/build/dts/ports/file-system.d.ts.map +1 -1
  28. package/build/dts/testing.d.ts +0 -1
  29. package/build/dts/testing.d.ts.map +1 -1
  30. package/build/esm/core/structure.js +1 -1
  31. package/build/esm/core/structure.js.map +1 -1
  32. package/build/esm/domain/architecture-config.js +3 -136
  33. package/build/esm/domain/architecture-config.js.map +1 -1
  34. package/build/esm/domain/snapshot.js +55 -15
  35. package/build/esm/domain/snapshot.js.map +1 -1
  36. package/build/esm/index.js +16 -10
  37. package/build/esm/index.js.map +1 -1
  38. package/build/esm/infrastructure/file-system-fake.js +10 -0
  39. package/build/esm/infrastructure/file-system-fake.js.map +1 -1
  40. package/build/esm/infrastructure/file-system-live.js +9 -1
  41. package/build/esm/infrastructure/file-system-live.js.map +1 -1
  42. package/build/esm/infrastructure/walk.js +50 -4
  43. package/build/esm/infrastructure/walk.js.map +1 -1
  44. package/build/esm/load/extension.js +2 -0
  45. package/build/esm/load/extension.js.map +1 -0
  46. package/build/esm/load/policy.js +43 -116
  47. package/build/esm/load/policy.js.map +1 -1
  48. package/build/esm/manifest/compile.js +3 -182
  49. package/build/esm/manifest/compile.js.map +1 -1
  50. package/build/esm/manifest/extension.js +2 -0
  51. package/build/esm/manifest/extension.js.map +1 -0
  52. package/build/esm/manifest/glob.js +3 -0
  53. package/build/esm/manifest/glob.js.map +1 -1
  54. package/build/esm/manifest/json-schema.js +45 -11
  55. package/build/esm/manifest/json-schema.js.map +1 -1
  56. package/build/esm/manifest/manifest.js +56 -172
  57. package/build/esm/manifest/manifest.js.map +1 -1
  58. package/build/esm/testing.js +0 -1
  59. package/build/esm/testing.js.map +1 -1
  60. package/package.json +1 -1
  61. package/schema/architecture-node.schema.json +0 -887
  62. package/schema/architecture.schema.json +3264 -1591
  63. package/schema/conformance.schema.json +291 -47
  64. package/src/core/structure.ts +5 -3
  65. package/src/domain/architecture-config.ts +3 -180
  66. package/src/domain/snapshot.ts +125 -25
  67. package/src/index.ts +51 -78
  68. package/src/infrastructure/file-system-fake.ts +12 -0
  69. package/src/infrastructure/file-system-live.ts +8 -1
  70. package/src/infrastructure/walk.ts +58 -3
  71. package/src/load/extension.ts +66 -0
  72. package/src/load/policy.ts +60 -175
  73. package/src/manifest/compile.ts +2 -213
  74. package/src/manifest/extension.ts +41 -0
  75. package/src/manifest/glob.ts +5 -0
  76. package/src/manifest/json-schema.ts +53 -11
  77. package/src/manifest/manifest.ts +82 -214
  78. package/src/ports/file-system.ts +3 -0
  79. package/src/testing.ts +0 -1
  80. package/build/dts/core/campaigns.d.ts +0 -141
  81. package/build/dts/core/campaigns.d.ts.map +0 -1
  82. package/build/dts/core/ledger.d.ts +0 -61
  83. package/build/dts/core/ledger.d.ts.map +0 -1
  84. package/build/dts/domain/report.d.ts +0 -16
  85. package/build/dts/domain/report.d.ts.map +0 -1
  86. package/build/dts/infrastructure/campaign-functions.d.ts +0 -7
  87. package/build/dts/infrastructure/campaign-functions.d.ts.map +0 -1
  88. package/build/dts/infrastructure/report-source-fake.d.ts +0 -4
  89. package/build/dts/infrastructure/report-source-fake.d.ts.map +0 -1
  90. package/build/dts/infrastructure/report-source-live.d.ts +0 -3
  91. package/build/dts/infrastructure/report-source-live.d.ts.map +0 -1
  92. package/build/dts/ports/campaign-predicate.d.ts +0 -24
  93. package/build/dts/ports/campaign-predicate.d.ts.map +0 -1
  94. package/build/dts/ports/report-source.d.ts +0 -14
  95. package/build/dts/ports/report-source.d.ts.map +0 -1
  96. package/build/esm/core/campaigns.js +0 -778
  97. package/build/esm/core/campaigns.js.map +0 -1
  98. package/build/esm/core/ledger.js +0 -171
  99. package/build/esm/core/ledger.js.map +0 -1
  100. package/build/esm/domain/report.js +0 -168
  101. package/build/esm/domain/report.js.map +0 -1
  102. package/build/esm/infrastructure/campaign-functions.js +0 -67
  103. package/build/esm/infrastructure/campaign-functions.js.map +0 -1
  104. package/build/esm/infrastructure/report-source-fake.js +0 -6
  105. package/build/esm/infrastructure/report-source-fake.js.map +0 -1
  106. package/build/esm/infrastructure/report-source-live.js +0 -165
  107. package/build/esm/infrastructure/report-source-live.js.map +0 -1
  108. package/build/esm/ports/campaign-predicate.js +0 -2
  109. package/build/esm/ports/campaign-predicate.js.map +0 -1
  110. package/build/esm/ports/report-source.js +0 -7
  111. package/build/esm/ports/report-source.js.map +0 -1
  112. package/src/core/campaigns.ts +0 -1056
  113. package/src/core/ledger.ts +0 -242
  114. package/src/domain/report.ts +0 -203
  115. package/src/infrastructure/campaign-functions.ts +0 -98
  116. package/src/infrastructure/report-source-fake.ts +0 -10
  117. package/src/infrastructure/report-source-live.ts +0 -192
  118. package/src/ports/campaign-predicate.ts +0 -30
  119. package/src/ports/report-source.ts +0 -35
@@ -1,17 +1,14 @@
1
1
  import * as Result from "effect/Result";
2
2
  import { decodeBaseline, EMPTY_BASELINE, makeBaselineFilter, } from "../core/baseline.js";
3
- import { campaignsFailingTheirProbe, compileCampaignRules, leafTermsOf, } from "../core/campaigns.js";
4
3
  import { compileExportRules, exportRulesFailingTheirProbe, } from "../core/exports.js";
5
4
  import { compileGraphRules, graphRulesFailingTheirProbe, } from "../core/graph.js";
6
5
  import { compileImportRules, rulesFailingTheirProbe, } from "../core/imports.js";
7
- import { decodeLedger } from "../core/ledger.js";
8
6
  import { compileMemberRules, memberRulesFailingTheirProbe, } from "../core/members.js";
9
7
  import { compileStructure, structureRulesFailingTheirProbe, } from "../core/structure.js";
10
8
  import { compileSurfaceRules, surfaceRulesFailingTheirProbe, } from "../core/surface.js";
11
9
  import { ConfigInvalid, ImportUnresolved, } from "../domain/architecture-error.js";
12
10
  import { lowerManifest } from "../manifest/compile.js";
13
- import { decodeManifest, DEFAULT_LEDGER_DIR } from "../manifest/manifest.js";
14
- import { NO_REPORTS } from "../ports/report-source.js";
11
+ import { decodeManifest } from "../manifest/manifest.js";
15
12
  const NOTHING = {
16
13
  specifiers: [],
17
14
  bindings: new Map(),
@@ -38,19 +35,6 @@ const routesOf = (configPath, scopes, languages) => {
38
35
  return Result.succeed(routes);
39
36
  };
40
37
  const routeFor = (routes, file) => routes.find((route) => route.matches.test(file));
41
- const referencedFunctions = (detect) => {
42
- switch (detect.kind) {
43
- case "all":
44
- case "any":
45
- return detect.terms.flatMap(referencedFunctions);
46
- case "not":
47
- return referencedFunctions(detect.term);
48
- case "fn":
49
- return [detect.name];
50
- default:
51
- return [];
52
- }
53
- };
54
38
  // One resolver per scope, built by the scope's language, behind one port that
55
39
  // picks the scope by the importing file.
56
40
  const makeRouter = (configPath, repoRoot, routes) => {
@@ -84,45 +68,11 @@ const makeRoutingExtractor = (routes) => ({
84
68
  });
85
69
  // One matcher per scope, behind one port that picks the scope by the file. A
86
70
  // language without one parses nothing, which a `syntax` term reads as no
87
- // matches — and which the probe check below refuses for a campaign that
71
+ // matches — and which an extension's probe check refuses for a family that
88
72
  // depends on it.
89
73
  const makeRoutingMatcher = (routes) => ({
90
74
  parse: (file, text) => routeFor(routes, file)?.language.syntax?.parse(file, text) ?? null,
91
75
  });
92
- // The ledgers, read through the port. An absent file is a campaign with no
93
- // ledger yet; a malformed one is refused, since reading it as empty would
94
- // report every hit as unrecorded growth.
95
- const readLedgers = (configPath, fileSystem, ledgerDir, campaigns) => {
96
- const ledgers = new Map();
97
- for (const campaign of campaigns) {
98
- const at = `${ledgerDir}/${campaign.id}.json`;
99
- const text = fileSystem.readText(at);
100
- if (text === null)
101
- continue;
102
- let raw;
103
- try {
104
- raw = JSON.parse(text);
105
- }
106
- catch (cause) {
107
- return Result.fail(new ConfigInvalid({ configPath, detail: `the ledger ${at} is not JSON: ${String(cause)}` }));
108
- }
109
- const decoded = decodeLedger(raw);
110
- if (Result.isFailure(decoded)) {
111
- return Result.fail(new ConfigInvalid({
112
- configPath,
113
- detail: `the ledger ${at} does not decode:\n${decoded.failure}`,
114
- }));
115
- }
116
- if (decoded.success.id !== campaign.id) {
117
- return Result.fail(new ConfigInvalid({
118
- configPath,
119
- detail: `the ledger ${at} says it belongs to "${decoded.success.id}", not "${campaign.id}".`,
120
- }));
121
- }
122
- ledgers.set(campaign.id, decoded.success);
123
- }
124
- return Result.succeed(ledgers);
125
- };
126
76
  // The baseline is read through the port, so this tier touches no file itself.
127
77
  // An absent or unreadable one carries nothing, which is the safe direction:
128
78
  // every violation reports.
@@ -144,7 +94,11 @@ const readBaseline = (fileSystem, at) => {
144
94
  // gap reports nothing there and looks exactly like a clean codebase.
145
95
  export const loadPolicy = (input) => {
146
96
  const { configPath, fileSystem, languages, repoRoot } = input;
147
- const decoded = decodeManifest(configPath, input.manifest, { locate: input.locate });
97
+ const extensions = input.extensions ?? [];
98
+ const decoded = decodeManifest(configPath, input.manifest, {
99
+ locate: input.locate,
100
+ extensions,
101
+ });
148
102
  if (Result.isFailure(decoded))
149
103
  return Result.fail(decoded.failure);
150
104
  const config = decoded.success.manifest;
@@ -207,57 +161,42 @@ export const loadPolicy = (input) => {
207
161
  const structure = compileStructure(rules.structure);
208
162
  if (Result.isFailure(structure))
209
163
  return Result.fail(structure.failure);
210
- const campaignRules = compileCampaignRules(rules.campaigns);
211
- if (Result.isFailure(campaignRules))
212
- return Result.fail(campaignRules.failure);
213
- // A `fn` term names a function the host was to import. One it did not is
214
- // a term that would answer false for every file, and is refused.
215
- const functions = input.functions ?? new Map();
216
- const missing = campaignRules.success.flatMap((rule) => referencedFunctions(rule.detect).filter((name) => !functions.has(name)));
217
- if (missing.length > 0) {
218
- return Result.fail(new ConfigInvalid({
219
- configPath,
220
- detail: `these campaigns name a predicate function the host did not load: ` +
221
- `${[...new Set(missing)].join(", ")}. A \`fn\` term is \`module#export\`, resolved ` +
222
- `relative to the manifest, and the export must be a function.`,
223
- }));
224
- }
225
- // A `report` term is answered by the host's source. Without one every
226
- // such campaign would report nothing and look complete.
227
- const reporting = campaignRules.success.filter((rule) => leafTermsOf(rule.detect).includes("report"));
228
- if (input.reports === undefined && reporting.length > 0) {
229
- return Result.fail(new ConfigInvalid({
230
- configPath,
231
- detail: `these campaigns hold a \`report\` term and the host provided no report source: ` +
232
- `${reporting.map((rule) => rule.name).join(", ")}.`,
233
- }));
234
- }
235
- // A `syntax` term needs a matcher for the language of every file in its
236
- // scope. The probes are the files the campaign is proven on; a probe whose
237
- // language has none would pass no probe and mean nothing.
238
- const syntaxless = campaignRules.success.flatMap((rule) => {
239
- if (!leafTermsOf(rule.detect).includes("syntax"))
240
- return [];
241
- return [...rule.probes.fires, ...rule.probes.ignores].flatMap((probe) => {
242
- const route = routeFor(routes.success, probe.path);
243
- return route === undefined || route.language.syntax !== undefined
244
- ? []
245
- : [`${rule.name} (${probe.path}: ${route.language.id} carries no syntax matcher)`];
246
- });
247
- });
248
- if (syntaxless.length > 0) {
249
- return Result.fail(new ConfigInvalid({
250
- configPath,
251
- detail: `these campaigns hold a \`syntax\` term in a scope whose language has no syntax ` +
252
- `matcher: ${[...new Set(syntaxless)].join(", ")}. Compose the language pack with ` +
253
- `one (\`@goodbones/ast-grep\` for TypeScript), or write the detector without it.`,
254
- }));
255
- }
256
164
  // A probe carrying a source snippet is parsed by the extractor of the
257
165
  // language whose scope covers the probe's file — the same extractor the CLI
258
166
  // reads that file through. The plugin reads through oxlint's tree instead,
259
167
  // and the parity suite is what holds that tree to this one.
260
168
  const extractor = makeRoutingExtractor(routes.success);
169
+ const syntax = makeRoutingMatcher(routes.success);
170
+ const routeOf = (file) => {
171
+ const found = routeFor(routes.success, file);
172
+ return found === undefined ? undefined : { language: found.language, scope: found.scope };
173
+ };
174
+ const now = input.now ?? Date.now();
175
+ // Each family the core does not own compiles and probes its own rules, with
176
+ // the same extractor and matcher the core used for its. Its probe failures
177
+ // join the one refusal below, so a vacuous campaign and a vacuous import
178
+ // rule are reported in the same sentence.
179
+ const loadedExtensions = new Map();
180
+ const extensionVacuous = [];
181
+ for (const extension of extensions) {
182
+ const loaded = extension.load({
183
+ spec: decoded.success.extensions.get(extension.id),
184
+ configPath,
185
+ repoRoot,
186
+ config,
187
+ languages,
188
+ fileSystem,
189
+ extractor,
190
+ syntax,
191
+ routeFor: routeOf,
192
+ now,
193
+ });
194
+ if (Result.isFailure(loaded))
195
+ return Result.fail(loaded.failure);
196
+ loadedExtensions.set(extension.id, loaded.success.value);
197
+ for (const name of loaded.success.vacuous ?? [])
198
+ extensionVacuous.push(name);
199
+ }
261
200
  const parsedBy = (rule) => {
262
201
  const route = routeFor(routes.success, rule.probe.from);
263
202
  return route === undefined
@@ -271,12 +210,7 @@ export const loadPolicy = (input) => {
271
210
  ...surfaceRulesFailingTheirProbe(surfaceRules.success, extractor).map((rule) => rule.name + (rule.probe.source === undefined ? "" : parsedBy(rule))),
272
211
  ...structureRulesFailingTheirProbe(structure.success),
273
212
  ...graphRulesFailingTheirProbe(graph.success),
274
- ...campaignsFailingTheirProbe(campaignRules.success, extractor, (file) => routeFor(routes.success, file)?.language.syntax ?? null, functions).map((failed) => failed.outOfScope === true
275
- ? `${failed.name} (its probe ${failed.probe.path} is outside the campaign's own scope)`
276
- : failed.expected === "fires"
277
- ? `${failed.name} (fires probe ${failed.probe.path} did not fire)`
278
- : `${failed.name} (ignores probe ${failed.probe.path} fired` +
279
- (failed.admittedBy === undefined ? ")" : `, admitted by \`${failed.admittedBy}\`)`)),
213
+ ...extensionVacuous,
280
214
  ];
281
215
  if (vacuous.length > 0) {
282
216
  return Result.fail(new ConfigInvalid({
@@ -294,10 +228,6 @@ export const loadPolicy = (input) => {
294
228
  const resolver = makeRouter(configPath, repoRoot, routes.success);
295
229
  if (Result.isFailure(resolver))
296
230
  return Result.fail(resolver.failure);
297
- const ledgerDir = config.ledger ?? DEFAULT_LEDGER_DIR;
298
- const ledgers = readLedgers(configPath, fileSystem, ledgerDir, campaignRules.success);
299
- if (Result.isFailure(ledgers))
300
- return Result.fail(ledgers.failure);
301
231
  return Result.succeed({
302
232
  repoRoot,
303
233
  config,
@@ -308,18 +238,15 @@ export const loadPolicy = (input) => {
308
238
  graph: graph.success,
309
239
  adoption: rules.adoption,
310
240
  structure: structure.success,
311
- campaignRules: campaignRules.success,
312
- ledgers: ledgers.success,
313
- ledgerDir,
314
- functions,
315
- reports: input.reports ?? NO_REPORTS,
316
- now: input.now ?? Date.now(),
241
+ extensions: loadedExtensions,
242
+ now,
317
243
  fileSystem,
318
244
  languages,
319
245
  baseline: makeBaselineFilter(readBaseline(fileSystem, config.baseline)),
320
246
  resolver: resolver.success,
321
247
  extractor,
322
- syntax: makeRoutingMatcher(routes.success),
248
+ syntax,
249
+ routeFor: routeOf,
323
250
  ignoreUnresolved: (config.resolve.ignoreUnresolved ?? []).map((pattern) => new RegExp(pattern)),
324
251
  notices: decoded.success.notices,
325
252
  });
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/load/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/load/policy.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { OPEN_LAYOUT, } from "../domain/architecture-config.js";
2
2
  import { fragmentOf } from "./expand.js";
3
3
  import { anchored, globToRegexSource, prefixed } from "./glob.js";
4
- import { durationMs, globsOf, } from "./manifest.js";
4
+ import { globsOf, } from "./manifest.js";
5
5
  const FOLDER_KEY = /\/$/;
6
6
  // The marker an open folder's allowlist carries: it admits any name, so it has
7
7
  // no layout policy to prove.
@@ -21,7 +21,7 @@ const alternativesOf = (key) => key
21
21
  .split(ALTERNATIVE)
22
22
  .map(stripSlash)
23
23
  .filter((one) => one !== "");
24
- const expandAliases = (glob, aliases) => {
24
+ export const expandAliases = (glob, aliases) => {
25
25
  for (const [alias, target] of Object.entries(aliases)) {
26
26
  if (glob === alias)
27
27
  return target;
@@ -61,7 +61,7 @@ const probeMemberName = (match) => {
61
61
  };
62
62
  // Each convention pairs the shape a name must have with a name that does not
63
63
  // have it, so the rule's probe is generated rather than written.
64
- const CONVENTIONS = {
64
+ export const CONVENTIONS = {
65
65
  "kebab-case": {
66
66
  source: "^[a-z0-9]+(?:-[a-z0-9]+)*$",
67
67
  violating: "zzProbeStray",
@@ -716,193 +716,14 @@ export const lowerManifest = (manifest, languages = [], options = {}) => {
716
716
  ...(rule.via === undefined ? {} : { via: asGraphPatterns(rule.via) ?? [] }),
717
717
  })),
718
718
  };
719
- const campaigns = (manifest.campaigns ?? []).map((campaign) => lowerCampaign(campaign, aliases));
720
719
  return {
721
720
  imports,
722
721
  exports,
723
722
  members,
724
723
  surface,
725
724
  graph,
726
- campaigns,
727
725
  adoption: { unrestricted: unrestrictedNodes, partial: partialNodes },
728
726
  structure: { roots, folders, parity, naming: namingRules },
729
727
  };
730
728
  };
731
- // The keys of a `syntax` term that belong to the engine's rule; `where` is
732
- // the one that does not.
733
- const SYNTAX_RULE_KEYS = [
734
- "pattern",
735
- "kind",
736
- "regex",
737
- "nthChild",
738
- "inside",
739
- "has",
740
- "precedes",
741
- "follows",
742
- "all",
743
- "any",
744
- "not",
745
- ];
746
- const syntaxRuleOf = (term) => Object.fromEntries(SYNTAX_RULE_KEYS.flatMap((key) => (term[key] === undefined ? [] : [[key, term[key]]])));
747
- // The leaf terms a path alone cannot exercise: each reads the file's text,
748
- // its syntax, or its facts, so a probe for a detector holding one must carry
749
- // a `source`.
750
- const TERMS_NEEDING_SOURCE = ["content", "syntax", "exports", "members", "fn"];
751
- const leafTermsOf = (detector) => {
752
- if ("all" in detector)
753
- return detector.all.flatMap(leafTermsOf);
754
- if ("any" in detector)
755
- return detector.any.flatMap(leafTermsOf);
756
- if ("not" in detector)
757
- return leafTermsOf(detector.not);
758
- return Object.keys(detector);
759
- };
760
- // A campaign's globs resolved: `scope` and a path-shaped `resolves` the way
761
- // graph rules resolve theirs, `exports`/`members` names the way `surface` and
762
- // `members` rules do, and the rest carried as written. The `fn` string is
763
- // kept verbatim for the loader, which holds the function it names.
764
- const lowerCampaign = (campaign, aliases) => {
765
- const asPath = (glob) => prefixed(globToRegexSource(expandAliases(glob, aliases), {}, { declaring: false, nextGroup: 1 })
766
- .source);
767
- const asName = (globs) => globsOf(globs).map((one) => anchored(globToRegexSource(one, {}, { declaring: false, nextGroup: 1 }).source));
768
- const name = `campaign/${campaign.id}`;
769
- const lower = (detector) => {
770
- if ("all" in detector)
771
- return { all: detector.all.map(lower) };
772
- if ("any" in detector)
773
- return { any: detector.any.map(lower) };
774
- if ("not" in detector)
775
- return { not: lower(detector.not) };
776
- if ("path" in detector) {
777
- const { convention, ...rest } = detector.path;
778
- const conventionSource = convention === undefined
779
- ? undefined
780
- : typeof convention === "string"
781
- ? CONVENTIONS[convention]?.source
782
- : convention.regex;
783
- if (convention !== undefined && conventionSource === undefined) {
784
- throw new Error(`campaign "${campaign.id}" names an unknown convention "${convention}".`);
785
- }
786
- if (conventionSource !== undefined && rest.subject === undefined) {
787
- throw new Error(`campaign "${campaign.id}" states a path convention with no \`subject\`: say which ` +
788
- `capture group of \`file\` holds the name the convention is about.`);
789
- }
790
- return {
791
- path: {
792
- file: globsOf(rest.file),
793
- ...(rest.fileNot === undefined ? {} : { fileNot: globsOf(rest.fileNot) }),
794
- ...(rest.subject === undefined ? {} : { subject: rest.subject }),
795
- ...(conventionSource === undefined ? {} : { convention: conventionSource }),
796
- },
797
- };
798
- }
799
- if ("imports" in detector) {
800
- const { resolves, symbols } = detector.imports;
801
- return {
802
- imports: {
803
- resolves: typeof resolves === "string" ? asPath(resolves) : resolves,
804
- ...(symbols === undefined ? {} : { symbols: [...symbols] }),
805
- },
806
- };
807
- }
808
- if ("exports" in detector) {
809
- const term = detector.exports;
810
- return {
811
- exports: {
812
- ...(term.name === undefined ? {} : { name: asName(term.name) }),
813
- ...(term.kinds === undefined ? {} : { kinds: [...term.kinds] }),
814
- ...(term.declares === undefined ? {} : { declares: [...term.declares] }),
815
- ...(term.reexport === undefined ? {} : { reexport: term.reexport }),
816
- },
817
- };
818
- }
819
- if ("members" in detector) {
820
- const term = detector.members;
821
- return {
822
- members: {
823
- subject: term.subject,
824
- ...(term.name === undefined ? {} : { name: asName(term.name) }),
825
- ...(term.in === undefined ? {} : { in: asName(term.in) }),
826
- ...(term.declares === undefined ? {} : { declares: [...term.declares] }),
827
- },
828
- };
829
- }
830
- if ("requires" in detector)
831
- return { requires: [...detector.requires] };
832
- if ("content" in detector)
833
- return { content: { regex: detector.content.regex } };
834
- if ("report" in detector) {
835
- // Exactly one of `command` and `file`, and a pattern for `regex`: the
836
- // manifest schema refused anything else at decode.
837
- const term = detector.report;
838
- return {
839
- report: {
840
- ...(term.command === undefined ? {} : { command: globsOf(term.command) }),
841
- ...(term.file === undefined ? {} : { file: globsOf(term.file) }),
842
- format: term.format,
843
- ...(term.pattern === undefined ? {} : { pattern: term.pattern }),
844
- ...(term.codes === undefined ? {} : { codes: [...term.codes] }),
845
- ...(term.codesNot === undefined ? {} : { codesNot: [...term.codesNot] }),
846
- },
847
- };
848
- }
849
- if ("syntax" in detector) {
850
- const { where } = detector.syntax;
851
- const narrowed = where === undefined
852
- ? {}
853
- : {
854
- where: Object.fromEntries(Object.entries(where).map(([capture, narrowing]) => [
855
- capture,
856
- {
857
- ...(narrowing.regex === undefined ? {} : { regex: narrowing.regex }),
858
- ...(narrowing.binding === undefined
859
- ? {}
860
- : {
861
- binding: {
862
- resolves: typeof narrowing.binding.resolves === "string"
863
- ? asPath(narrowing.binding.resolves)
864
- : narrowing.binding.resolves,
865
- ...(narrowing.binding.member === undefined
866
- ? {}
867
- : { member: [...narrowing.binding.member] }),
868
- },
869
- }),
870
- },
871
- ])),
872
- };
873
- return { syntax: { rule: syntaxRuleOf(detector.syntax), ...narrowed } };
874
- }
875
- return { fn: detector.fn };
876
- };
877
- // A probe without a source proves only the path; a detector that reads the
878
- // file needs the file. Refused here, with the term named, rather than at
879
- // load as a probe that mysteriously never fires.
880
- const leaves = leafTermsOf(campaign.detect);
881
- const needsSource = TERMS_NEEDING_SOURCE.filter((term) => leaves.includes(term));
882
- const probes = [...campaign.probes.fires, ...(campaign.probes.ignores ?? [])];
883
- const sourceless = probes.find((probe) => probe.source === undefined);
884
- if (needsSource.length > 0 && sourceless !== undefined) {
885
- throw new Error(`campaign "${campaign.id}" has a probe (${sourceless.path}) with no \`source\`, and its ` +
886
- `detector holds a ${needsSource.map((term) => `\`${term}\``).join(", ")} term, which ` +
887
- `a path alone cannot exercise. Give every probe a source.`);
888
- }
889
- if (campaign.probes.fires.length === 0) {
890
- throw new Error(`campaign "${campaign.id}" carries no \`probes.fires\`. A campaign proves it can fire ` +
891
- `the way every rule does; write at least one source it must report.`);
892
- }
893
- return {
894
- name,
895
- id: campaign.id,
896
- ...(campaign.title === undefined ? {} : { title: campaign.title }),
897
- message: campaign.how,
898
- why: campaign.why,
899
- ...(campaign.owner === undefined ? {} : { owner: campaign.owner }),
900
- scope: globsOf(campaign.scope).map(asPath),
901
- unit: campaign.unit,
902
- detect: lower(campaign.detect),
903
- probes: { fires: [...campaign.probes.fires], ignores: [...(campaign.probes.ignores ?? [])] },
904
- staleAfter: durationMs(campaign.staleAfter),
905
- onComplete: campaign.onComplete ?? "keep",
906
- };
907
- };
908
729
  //# sourceMappingURL=compile.js.map