@goodbones/core 0.1.0-beta.1 → 0.1.0-beta.3

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 (43) hide show
  1. package/build/dts/domain/manifest-location.d.ts +9 -0
  2. package/build/dts/domain/manifest-location.d.ts.map +1 -0
  3. package/build/dts/index.d.ts +6 -2
  4. package/build/dts/index.d.ts.map +1 -1
  5. package/build/dts/infrastructure/manifest-file.d.ts +11 -2
  6. package/build/dts/infrastructure/manifest-file.d.ts.map +1 -1
  7. package/build/dts/infrastructure/manifest-include.d.ts +16 -0
  8. package/build/dts/infrastructure/manifest-include.d.ts.map +1 -0
  9. package/build/dts/load/policy.d.ts +2 -0
  10. package/build/dts/load/policy.d.ts.map +1 -1
  11. package/build/dts/manifest/expand.d.ts +26 -0
  12. package/build/dts/manifest/expand.d.ts.map +1 -0
  13. package/build/dts/manifest/json-schema.d.ts +10 -0
  14. package/build/dts/manifest/json-schema.d.ts.map +1 -0
  15. package/build/dts/manifest/manifest.d.ts +5 -1
  16. package/build/dts/manifest/manifest.d.ts.map +1 -1
  17. package/build/esm/domain/manifest-location.js +21 -0
  18. package/build/esm/domain/manifest-location.js.map +1 -0
  19. package/build/esm/index.js +5 -1
  20. package/build/esm/index.js.map +1 -1
  21. package/build/esm/infrastructure/manifest-file.js +158 -7
  22. package/build/esm/infrastructure/manifest-file.js.map +1 -1
  23. package/build/esm/infrastructure/manifest-include.js +187 -0
  24. package/build/esm/infrastructure/manifest-include.js.map +1 -0
  25. package/build/esm/load/policy.js +1 -1
  26. package/build/esm/load/policy.js.map +1 -1
  27. package/build/esm/manifest/expand.js +111 -0
  28. package/build/esm/manifest/expand.js.map +1 -0
  29. package/build/esm/manifest/json-schema.js +131 -0
  30. package/build/esm/manifest/json-schema.js.map +1 -0
  31. package/build/esm/manifest/manifest.js +58 -4
  32. package/build/esm/manifest/manifest.js.map +1 -1
  33. package/package.json +7 -3
  34. package/schema/architecture-node.schema.json +1518 -0
  35. package/schema/architecture.schema.json +1500 -0
  36. package/src/domain/manifest-location.ts +41 -0
  37. package/src/index.ts +34 -1
  38. package/src/infrastructure/manifest-file.ts +204 -8
  39. package/src/infrastructure/manifest-include.ts +318 -0
  40. package/src/load/policy.ts +5 -1
  41. package/src/manifest/expand.ts +174 -0
  42. package/src/manifest/json-schema.ts +164 -0
  43. package/src/manifest/manifest.ts +101 -9
@@ -0,0 +1,187 @@
1
+ import * as path from "node:path";
2
+ import { ConfigInvalid } from "../domain/architecture-error.js";
3
+ import { renderManifestPath, } from "../domain/manifest-location.js";
4
+ const INCLUDABLE = [".yaml", ".yml", ".json"];
5
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
6
+ const isInclude = (value) => isRecord(value) && "include" in value;
7
+ const isPrefix = (prefix, whole) => prefix.length <= whole.length && prefix.every((segment, index) => whole[index] === segment);
8
+ const makeLocator = (mounts) => {
9
+ if (!mounts.some((mount) => mount.locate !== undefined))
10
+ return undefined;
11
+ return (manifestPath) => {
12
+ const innermost = mounts
13
+ .filter((mount) => isPrefix(mount.at, manifestPath))
14
+ .sort((a, b) => a.at.length - b.at.length)
15
+ .at(-1);
16
+ if (innermost === undefined)
17
+ return null;
18
+ const found = innermost.locate?.([...innermost.origin, ...manifestPath.slice(innermost.at.length)]) ?? null;
19
+ if (found === null)
20
+ return null;
21
+ return innermost.label === undefined ? found : { ...found, file: innermost.label };
22
+ };
23
+ };
24
+ export const expandIncludes = (rootPath, root, reader) => {
25
+ const rootDirectory = path.dirname(rootPath);
26
+ const labelOf = (file) => path.relative(rootDirectory, file).split(path.sep).join("/");
27
+ const nameOf = (source) => source.label ?? path.basename(rootPath);
28
+ const files = [rootPath];
29
+ const mounts = [{ at: [], origin: [], label: undefined, locate: root.locate }];
30
+ // Fragments hoisted out of included files, and the file each name came from.
31
+ const hoisted = {};
32
+ const definedIn = new Map();
33
+ const refuse = (source, origin, detail) => {
34
+ const position = source.locate?.(origin) ?? null;
35
+ const at = position === null
36
+ ? ""
37
+ : `${nameOf(source)}:${String(position.line)}:${String(position.column)} `;
38
+ throw new ConfigInvalid({
39
+ configPath: rootPath,
40
+ detail: `the manifest does not include:\n ${at}${renderManifestPath(origin)}: ${detail}`,
41
+ });
42
+ };
43
+ // Checks a reference and reads the file it names. Nothing is placed yet:
44
+ // where the value lands depends on whether it is a list spliced into a list.
45
+ const open = (reference, origin, source) => {
46
+ const { include: specifier, ...rest } = reference;
47
+ if (typeof specifier !== "string") {
48
+ return refuse(source, origin, "`include` names a file, as a string.");
49
+ }
50
+ const shown = `\`include: ${JSON.stringify(specifier)}\``;
51
+ const beside = Object.keys(rest);
52
+ if (beside.length > 0) {
53
+ return refuse(source, origin, `${shown} stands alone: an included file is replaced whole, so there is nothing for ` +
54
+ `${beside.map((key) => `\`${key}\``).join(", ")} to override. ` +
55
+ `To override a fragment, put it under \`defs\` and \`use\` it.`);
56
+ }
57
+ const target = path.resolve(path.dirname(source.file), specifier);
58
+ if (!INCLUDABLE.includes(path.extname(target).toLowerCase())) {
59
+ return refuse(source, origin, `${shown} names a file that is not YAML or JSON. Only a data file can be included: ` +
60
+ `a module would make the manifest readable by one runtime only.`);
61
+ }
62
+ if (source.stack.includes(target)) {
63
+ return refuse(source, origin, `${shown} includes a file that is already being included: ` +
64
+ `${[...source.stack, target].map(labelOf).join(" → ")}.`);
65
+ }
66
+ if (!reader.exists(target)) {
67
+ return refuse(source, origin, `${shown} names a file that does not exist (looked for ${labelOf(target)}, ` +
68
+ `relative to ${nameOf(source)}).`);
69
+ }
70
+ const document = reader.read(target);
71
+ files.push(target);
72
+ return {
73
+ document,
74
+ source: {
75
+ file: target,
76
+ label: labelOf(target),
77
+ locate: document.locate,
78
+ stack: [...source.stack, target],
79
+ },
80
+ };
81
+ };
82
+ // Places an opened file at `at`, whole, and walks it so no reference is
83
+ // left inside. A top-level `defs` in the file joins the root's, and its
84
+ // `$schema` is for the editor — unless the file was included somewhere
85
+ // under `defs`, where it is a fragment or the map itself, and a key by
86
+ // either name is the author's.
87
+ const place = (opened, at) => {
88
+ const { document, source } = opened;
89
+ mounts.push({ at, origin: [], label: source.label, locate: source.locate });
90
+ if (!isRecord(document.value) || at[0] === "defs") {
91
+ return walk(document.value, at, [], source);
92
+ }
93
+ const { $schema: _schema, defs, ...body } = document.value;
94
+ if (defs !== undefined) {
95
+ if (!isRecord(defs)) {
96
+ return refuse(source, ["defs"], "`defs` must be a map of named fragments.");
97
+ }
98
+ for (const [name, fragment] of Object.entries(defs)) {
99
+ const already = definedIn.get(name);
100
+ if (already !== undefined) {
101
+ return refuse(source, ["defs", name], `\`defs.${name}\` is already defined in ${already}. Every file's \`defs\` share ` +
102
+ `one namespace; rename one of them.`);
103
+ }
104
+ definedIn.set(name, nameOf(source));
105
+ mounts.push({
106
+ at: ["defs", name],
107
+ origin: ["defs", name],
108
+ label: source.label,
109
+ locate: source.locate,
110
+ });
111
+ hoisted[name] = walk(fragment, ["defs", name], ["defs", name], source);
112
+ }
113
+ }
114
+ return walk(body, at, [], source);
115
+ };
116
+ // Appends each item of `list` to `items`. An include standing as an item
117
+ // whose file holds a list is spliced in, so a list can be split across
118
+ // files; an item that does not sit at the index it was written at is
119
+ // mounted on its own.
120
+ const append = (items, list, at, origin, source, spliced) => {
121
+ for (const [index, item] of list.entries()) {
122
+ const itemOrigin = [...origin, index];
123
+ const slot = [...at, items.length];
124
+ if (isInclude(item)) {
125
+ const opened = open(item, itemOrigin, source);
126
+ if (Array.isArray(opened.document.value)) {
127
+ append(items, opened.document.value, at, [], opened.source, true);
128
+ }
129
+ else {
130
+ items.push(place(opened, slot));
131
+ }
132
+ continue;
133
+ }
134
+ if (spliced || items.length !== index) {
135
+ mounts.push({ at: slot, origin: itemOrigin, label: source.label, locate: source.locate });
136
+ }
137
+ items.push(walk(item, slot, itemOrigin, source));
138
+ }
139
+ };
140
+ const walk = (value, at, origin, source) => {
141
+ if (isInclude(value))
142
+ return place(open(value, origin, source), at);
143
+ if (Array.isArray(value)) {
144
+ const items = [];
145
+ append(items, value, at, origin, source, false);
146
+ return items;
147
+ }
148
+ if (isRecord(value)) {
149
+ const entries = {};
150
+ for (const [key, item] of Object.entries(value)) {
151
+ entries[key] = walk(item, [...at, key], [...origin, key], source);
152
+ }
153
+ return entries;
154
+ }
155
+ return value;
156
+ };
157
+ const rootSource = {
158
+ file: rootPath,
159
+ label: undefined,
160
+ locate: root.locate,
161
+ stack: [rootPath],
162
+ };
163
+ const value = walk(root.value, [], [], rootSource);
164
+ // Nothing was included: the value and the locator are the reader's own.
165
+ if (files.length === 1)
166
+ return { value, locate: root.locate, files };
167
+ const names = Object.keys(hoisted);
168
+ if (names.length === 0 || !isRecord(value)) {
169
+ return { value, locate: makeLocator(mounts), files };
170
+ }
171
+ const own = value.defs;
172
+ if (own !== undefined && !isRecord(own)) {
173
+ return refuse(rootSource, ["defs"], "`defs` must be a map of named fragments.");
174
+ }
175
+ for (const name of names) {
176
+ if (own !== undefined && name in own) {
177
+ return refuse(rootSource, ["defs", name], `\`defs.${name}\` is also defined in ${definedIn.get(name) ?? "an included file"}. ` +
178
+ `Every file's \`defs\` share one namespace; rename one of them.`);
179
+ }
180
+ }
181
+ return {
182
+ value: { ...value, defs: { ...(own ?? {}), ...hoisted } },
183
+ locate: makeLocator(mounts),
184
+ files,
185
+ };
186
+ };
187
+ //# sourceMappingURL=manifest-include.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-include.js","sourceRoot":"","sources":["../../../src/infrastructure/manifest-include.ts"],"names":[],"mappings":"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"}
@@ -87,7 +87,7 @@ const readBaseline = (fileSystem, at) => {
87
87
  // gap reports nothing there and looks exactly like a clean codebase.
88
88
  export const loadPolicy = (input) => {
89
89
  const { configPath, fileSystem, languages, repoRoot } = input;
90
- const decoded = decodeManifest(configPath, input.manifest);
90
+ const decoded = decodeManifest(configPath, input.manifest, { locate: input.locate });
91
91
  if (Result.isFailure(decoded))
92
92
  return Result.fail(decoded.failure);
93
93
  const config = decoded.success.manifest;
@@ -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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"}
@@ -0,0 +1,111 @@
1
+ import * as Result from "effect/Result";
2
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
+ const isReference = (value) => isRecord(value) && typeof value.use === "string";
4
+ export const expandManifest = (input) => {
5
+ if (!isRecord(input))
6
+ return Result.succeed({ value: input, substitutions: [] });
7
+ // Two keys the file may carry that the schema does not: the fragments, and
8
+ // the `$schema` a JSON author writes for editor validation.
9
+ const { $schema: _schema, defs, ...rest } = input;
10
+ if (defs !== undefined && !isRecord(defs)) {
11
+ return Result.fail({
12
+ path: ["defs"],
13
+ detail: "`defs` must be a map of named fragments.",
14
+ });
15
+ }
16
+ const fragments = defs ?? {};
17
+ const defined = Object.keys(fragments);
18
+ const substitutions = [];
19
+ // `at` is the path in the document being built; `origin` the path in the
20
+ // document as written; `stack` the fragments currently being expanded, for
21
+ // the cycle check.
22
+ const walk = (value, at, origin, stack) => {
23
+ if (isReference(value)) {
24
+ const { use: name, ...overrides } = value;
25
+ if (!(name in fragments)) {
26
+ return Result.fail({
27
+ path: origin,
28
+ detail: `\`use: ${JSON.stringify(name)}\` names no entry in \`defs\`` +
29
+ (defined.length === 0
30
+ ? " — the manifest defines none."
31
+ : ` (defined: ${defined.join(", ")}).`),
32
+ });
33
+ }
34
+ if (stack.includes(name)) {
35
+ return Result.fail({
36
+ path: origin,
37
+ detail: `\`defs\` contains a cycle: ${[...stack, name].join(" → ")}.`,
38
+ });
39
+ }
40
+ substitutions.push({ at, ref: origin, name, overrides: new Set(Object.keys(overrides)) });
41
+ const fragment = walk(fragments[name], at, ["defs", name], [...stack, name]);
42
+ if (Result.isFailure(fragment))
43
+ return fragment;
44
+ if (Object.keys(overrides).length === 0)
45
+ return fragment;
46
+ if (!isRecord(fragment.success)) {
47
+ return Result.fail({
48
+ path: origin,
49
+ detail: `\`use: ${JSON.stringify(name)}\` is written with overrides ` +
50
+ `(${Object.keys(overrides).join(", ")}), but \`defs.${name}\` is not an object, ` +
51
+ `so there is nothing to override.`,
52
+ });
53
+ }
54
+ const merged = { ...fragment.success };
55
+ for (const [key, override] of Object.entries(overrides)) {
56
+ const expanded = walk(override, [...at, key], [...origin, key], stack);
57
+ if (Result.isFailure(expanded))
58
+ return expanded;
59
+ merged[key] = expanded.success;
60
+ }
61
+ return Result.succeed(merged);
62
+ }
63
+ if (Array.isArray(value)) {
64
+ const items = [];
65
+ for (const [index, item] of value.entries()) {
66
+ const expanded = walk(item, [...at, index], [...origin, index], stack);
67
+ if (Result.isFailure(expanded))
68
+ return expanded;
69
+ items.push(expanded.success);
70
+ }
71
+ return Result.succeed(items);
72
+ }
73
+ if (isRecord(value)) {
74
+ const entries = {};
75
+ for (const [key, item] of Object.entries(value)) {
76
+ const expanded = walk(item, [...at, key], [...origin, key], stack);
77
+ if (Result.isFailure(expanded))
78
+ return expanded;
79
+ entries[key] = expanded.success;
80
+ }
81
+ return Result.succeed(entries);
82
+ }
83
+ return Result.succeed(value);
84
+ };
85
+ const expanded = walk(rest, [], [], []);
86
+ if (Result.isFailure(expanded))
87
+ return Result.fail(expanded.failure);
88
+ return Result.succeed({ value: expanded.success, substitutions });
89
+ };
90
+ const isPrefix = (prefix, path) => prefix.length <= path.length && prefix.every((segment, index) => path[index] === segment);
91
+ // Maps a path in the expanded document back to where it was written.
92
+ export const originOf = (substitutions, path) => {
93
+ const crossed = substitutions
94
+ .filter((one) => isPrefix(one.at, path))
95
+ .sort((a, b) => a.at.length - b.at.length);
96
+ const innermost = crossed.at(-1);
97
+ if (innermost === undefined)
98
+ return { path, via: [] };
99
+ const outer = crossed.slice(0, -1).map((one) => ({ at: one.ref, name: one.name }));
100
+ const rest = path.slice(innermost.at.length);
101
+ const first = rest[0];
102
+ // A key written beside `use` belongs to the reference site, not the fragment.
103
+ if (typeof first === "string" && innermost.overrides.has(first)) {
104
+ return { path: [...innermost.ref, ...rest], via: outer };
105
+ }
106
+ return {
107
+ path: ["defs", innermost.name, ...rest],
108
+ via: [...outer, { at: innermost.ref, name: innermost.name }],
109
+ };
110
+ };
111
+ //# sourceMappingURL=expand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expand.js","sourceRoot":"","sources":["../../../src/manifest/expand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ import * as Schema from "effect/Schema";
2
+ import { Manifest } from "./manifest.js";
3
+ // The manifest's shape as a JSON Schema, generated from the same codec that
4
+ // decodes it, so the two cannot disagree. A YAML file names it in a header
5
+ // comment and a JSON file in a `$schema` key; either way the editor completes
6
+ // keys and flags a misspelled one before the loader ever runs.
7
+ //
8
+ // Three things the codec does not know are added here: the `defs` map, the
9
+ // `{ use }` reference form that may stand in for any object, and the
10
+ // `{ include }` form that may stand in for any object or list — all belong to
11
+ // the passes that run before decoding.
12
+ export const MANIFEST_SCHEMA_ID = "https://dataquail.github.io/goodbones/schema/architecture.schema.json";
13
+ // The schema an included file names: one node of the tree, with the two keys
14
+ // a file of its own may carry at the top.
15
+ export const MANIFEST_NODE_SCHEMA_ID = "https://dataquail.github.io/goodbones/schema/architecture-node.schema.json";
16
+ const entriesOf = (value) => Object.entries(value);
17
+ const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
18
+ const isList = (value) => Array.isArray(value);
19
+ // The generator names the recursive node after its own internal wrapper. A
20
+ // stable name is what a `$ref` in an error message or a docs page can point at.
21
+ const DEFINITION_NAMES = { Suspend_: "ManifestNode" };
22
+ const USE_REFERENCE = "#/$defs/Use";
23
+ const INCLUDE_REFERENCE = "#/$defs/Include";
24
+ const Use = {
25
+ type: "object",
26
+ description: "A reference to a fragment under the top-level `defs`. Replaced by a copy of the fragment before the manifest is decoded; any other key written beside `use` overrides the fragment's key of the same name.",
27
+ properties: { use: { type: "string" } },
28
+ required: ["use"],
29
+ };
30
+ const Include = {
31
+ type: "object",
32
+ description: "A reference to another YAML or JSON file, relative to this one. Replaced by that file's whole value before the manifest is decoded; a list item naming a file that holds a list is spliced in. Nothing may be written beside `include`.",
33
+ properties: { include: { type: "string" } },
34
+ required: ["include"],
35
+ additionalProperties: false,
36
+ };
37
+ // Every object schema below the root becomes "this object, or a `use` of a
38
+ // fragment shaped like it, or an `include` of a file holding one", and every
39
+ // list schema "this list, or an `include` of a file holding one". The
40
+ // expansion passes replace a reference wherever it stands, so the schema
41
+ // admits one wherever the value may stand.
42
+ const admitReferences = (value) => {
43
+ if (Array.isArray(value))
44
+ return value.map(admitReferences);
45
+ if (!isObject(value))
46
+ return value;
47
+ const rebuilt = {};
48
+ for (const [key, entry] of entriesOf(value)) {
49
+ if (key === "$ref" && typeof entry === "string") {
50
+ const name = entry.replace(/^#\/\$defs\//, "");
51
+ rebuilt[key] = `#/$defs/${DEFINITION_NAMES[name] ?? name}`;
52
+ }
53
+ else {
54
+ rebuilt[key] = admitReferences(entry);
55
+ }
56
+ }
57
+ if (rebuilt.type === "object" && "properties" in rebuilt) {
58
+ return { anyOf: [{ $ref: USE_REFERENCE }, { $ref: INCLUDE_REFERENCE }, rebuilt] };
59
+ }
60
+ if (rebuilt.type === "array") {
61
+ return { anyOf: [{ $ref: INCLUDE_REFERENCE }, rebuilt] };
62
+ }
63
+ return rebuilt;
64
+ };
65
+ const DEFS_PROPERTY = {
66
+ type: "object",
67
+ description: 'Named fragments, referenced elsewhere in the manifest as `{ use: "<name>" }`. A fragment may itself contain `use`. Every file\'s `defs` share one namespace.',
68
+ additionalProperties: true,
69
+ };
70
+ const SCHEMA_PROPERTY = {
71
+ type: "string",
72
+ description: "For editors. Ignored by the loader.",
73
+ };
74
+ export const manifestJsonSchema = () => {
75
+ const generated = Schema.toJsonSchemaDocument(Manifest);
76
+ const { properties, ...root } = generated.schema;
77
+ if (properties === undefined || !isObject(properties)) {
78
+ throw new Error("the manifest schema generated with no properties");
79
+ }
80
+ const definitions = {};
81
+ for (const [name, definition] of entriesOf(generated.definitions)) {
82
+ definitions[DEFINITION_NAMES[name] ?? name] = admitReferences(definition);
83
+ }
84
+ return {
85
+ $schema: "https://json-schema.org/draft/2020-12/schema",
86
+ $id: MANIFEST_SCHEMA_ID,
87
+ title: "Architecture manifest",
88
+ description: "One manifest of a repository's architecture, read by @goodbones/cli and @goodbones/oxlint. See https://dataquail.github.io/goodbones/architecture-rules/manifest/.",
89
+ ...root,
90
+ properties: {
91
+ $schema: SCHEMA_PROPERTY,
92
+ defs: DEFS_PROPERTY,
93
+ ...Object.fromEntries(entriesOf(properties).map(([key, value]) => [key, admitReferences(value)])),
94
+ },
95
+ $defs: { ...definitions, Use, Include },
96
+ };
97
+ };
98
+ // One node of the tree as a file of its own — what a per-package
99
+ // `architecture.yaml` that the root manifest `include`s is shaped like. The
100
+ // node's object form, with the `$schema` and `defs` keys such a file may carry
101
+ // at the top, over the same definitions as the whole manifest.
102
+ export const manifestNodeJsonSchema = () => {
103
+ const whole = manifestJsonSchema();
104
+ const definitions = whole.$defs;
105
+ if (definitions === undefined || !isObject(definitions)) {
106
+ throw new Error("the manifest schema generated with no definitions");
107
+ }
108
+ const node = definitions.ManifestNode;
109
+ const variants = node !== undefined && isObject(node) ? node.anyOf : undefined;
110
+ const object = variants !== undefined && isList(variants)
111
+ ? variants.find((variant) => isObject(variant) && variant.type === "object")
112
+ : undefined;
113
+ if (object === undefined || !isObject(object)) {
114
+ throw new Error("the manifest schema generated with no object form of a node");
115
+ }
116
+ const { $id: _id, $schema: _schema, ...rest } = object;
117
+ return {
118
+ $schema: "https://json-schema.org/draft/2020-12/schema",
119
+ $id: MANIFEST_NODE_SCHEMA_ID,
120
+ title: "Architecture manifest node",
121
+ description: "One node of an architecture manifest's tree, as a file the manifest includes. See https://dataquail.github.io/goodbones/architecture-rules/manifest/#splitting-the-manifest-include.",
122
+ ...rest,
123
+ properties: {
124
+ $schema: SCHEMA_PROPERTY,
125
+ defs: DEFS_PROPERTY,
126
+ ...(rest.properties !== undefined && isObject(rest.properties) ? rest.properties : {}),
127
+ },
128
+ $defs: definitions,
129
+ };
130
+ };
131
+ //# sourceMappingURL=json-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../../src/manifest/json-schema.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import * as Result from "effect/Result";
2
2
  import * as Schema from "effect/Schema";
3
+ import * as SchemaIssue from "effect/SchemaIssue";
3
4
  import { DeclarationKind, ResolveConfig } from "../domain/architecture-config.js";
4
5
  import { ConfigInvalid } from "../domain/architecture-error.js";
6
+ import { renderManifestPath, } from "../domain/manifest-location.js";
7
+ import { expandManifest, originOf } from "./expand.js";
5
8
  // A manifest is a tree of nodes keyed by path pattern, where everything the
6
9
  // architecture says about a part of the tree is written at that part of the tree.
7
10
  // A node is a folder (it has `children` and/or `files`) or a file (its key names
@@ -220,7 +223,12 @@ export const Manifest = Schema.Struct({
220
223
  tree: Schema.Record(Schema.String, ManifestNodeSchema),
221
224
  });
222
225
  export const globsOf = (globs) => typeof globs === "string" ? [globs] : globs;
223
- const decode = Schema.decodeUnknownResult(Manifest);
226
+ // Every issue, not the first: a manifest is edited by hand, and the reader
227
+ // fixing one line wants to know about the other three. A key the schema does
228
+ // not declare is refused rather than dropped — a misspelled `matchNot` that
229
+ // decoded to nothing would be a rule quietly enforcing less than it says.
230
+ const decode = Schema.decodeUnknownResult(Manifest, { errors: "all", onExcessProperty: "error" });
231
+ const flatten = SchemaIssue.makeFormatterStandardSchemaV1();
224
232
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
225
233
  const isList = (value) => Array.isArray(value);
226
234
  // The three resolver options that used to sit on `resolve` itself, when every
@@ -295,9 +303,55 @@ const normalizeLegacyMembers = (input) => {
295
303
  const tree = Object.fromEntries(Object.entries(input.tree).map(([key, value]) => [key, node(key, value)]));
296
304
  return { input: { ...input, tree }, notices };
297
305
  };
298
- export const decodeManifest = (configPath, input) => {
299
- const resolve = normalizeLegacyResolve(input);
306
+ const fileLabelOf = (configPath) => configPath.split(/[\\/]/).at(-1) ?? configPath;
307
+ // A position carries its own file when the value was written in a file the
308
+ // manifest `include`d; otherwise it is in the manifest file itself.
309
+ const positionOf = (file, locate, path) => {
310
+ const found = locate?.(path) ?? null;
311
+ return found === null
312
+ ? null
313
+ : `${found.file ?? file}:${String(found.line)}:${String(found.column)}`;
314
+ };
315
+ // One line per issue: where in the file, which path, what was wrong — and,
316
+ // when the value came in through a `use`, the reference that pulled it in,
317
+ // since the fragment's own line may sit far from where the reader is looking.
318
+ const describeIssue = (configPath, locate, substitutions, path, detail) => {
319
+ const file = fileLabelOf(configPath);
320
+ const origin = originOf(substitutions, path);
321
+ const at = positionOf(file, locate, origin.path);
322
+ const via = origin.via.map(({ at: ref, name }) => {
323
+ const position = positionOf(file, locate, ref);
324
+ return `via \`use: ${JSON.stringify(name)}\`${position === null ? "" : ` at ${position}`}`;
325
+ });
326
+ return (` ${at === null ? "" : `${at} `}${renderManifestPath(origin.path)}: ${detail}` +
327
+ (via.length === 0 ? "" : ` (${via.join(", ")})`));
328
+ };
329
+ // The standard-schema formatter flattens the issue tree to `{ path, message }`
330
+ // pairs; a path segment may arrive wrapped as `{ key }`.
331
+ const pathOf = (issue) => (issue.path ?? []).map((segment) => (typeof segment === "object" ? segment.key : segment));
332
+ export const decodeManifest = (configPath, input, options = {}) => {
333
+ const expanded = expandManifest(input);
334
+ if (Result.isFailure(expanded)) {
335
+ return Result.fail(new ConfigInvalid({
336
+ configPath,
337
+ detail: "the manifest does not expand:\n" +
338
+ describeIssue(configPath, options.locate, [], expanded.failure.path, expanded.failure.detail),
339
+ }));
340
+ }
341
+ const { substitutions, value } = expanded.success;
342
+ const resolve = normalizeLegacyResolve(value);
300
343
  const members = normalizeLegacyMembers(resolve.input);
301
- return Result.map(Result.mapError(decode(members.input), (issue) => new ConfigInvalid({ configPath, detail: String(issue) })), (manifest) => ({ manifest, notices: [...resolve.notices, ...members.notices] }));
344
+ const decoded = decode(members.input);
345
+ if (Result.isFailure(decoded)) {
346
+ const lines = flatten(decoded.failure.issue).issues.map((issue) => describeIssue(configPath, options.locate, substitutions, pathOf(issue), issue.message));
347
+ return Result.fail(new ConfigInvalid({
348
+ configPath,
349
+ detail: `the manifest does not decode:\n${lines.join("\n")}`,
350
+ }));
351
+ }
352
+ return Result.succeed({
353
+ manifest: decoded.success,
354
+ notices: [...resolve.notices, ...members.notices],
355
+ });
302
356
  };
303
357
  //# sourceMappingURL=manifest.js.map