craftar 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -7
- package/dist/cli.js +28 -5
- package/dist/cli.js.map +1 -1
- package/dist/core/param-writes.js +27 -1
- package/dist/core/param-writes.js.map +1 -1
- package/dist/core/resolve.js +25 -1
- package/dist/core/resolve.js.map +1 -1
- package/dist/core/sections.js +238 -0
- package/dist/core/sections.js.map +1 -0
- package/dist/core/sync.js +135 -7
- package/dist/core/sync.js.map +1 -1
- package/dist/core/template-import.js +47 -15
- package/dist/core/template-import.js.map +1 -1
- package/dist/core/unify.js +43 -0
- package/dist/core/unify.js.map +1 -1
- package/dist/core/yaml-edit.js +6 -1
- package/dist/core/yaml-edit.js.map +1 -1
- package/dist/importers/claude-code.js +159 -28
- package/dist/importers/claude-code.js.map +1 -1
- package/dist/importers/decide.js +115 -21
- package/dist/importers/decide.js.map +1 -1
- package/dist/schema/index.js +16 -1
- package/dist/schema/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { SECTION_NAME } from "../schema/index.js";
|
|
2
|
+
import { substitute } from "./resolve.js";
|
|
3
|
+
import { placeholders } from "./extract.js";
|
|
4
|
+
import { stripBom, toLf } from "./text.js";
|
|
5
|
+
/**
|
|
6
|
+
* Sections (spec 11): a block of an ingredient body between two marker lines whose content is the
|
|
7
|
+
* default, replaced or emptied by a profile or a workspace. Pure — the Forge and import sides call
|
|
8
|
+
* these with text they read themselves.
|
|
9
|
+
*
|
|
10
|
+
* <!-- craftar:section <name> -->
|
|
11
|
+
* …default…
|
|
12
|
+
* <!-- /craftar:section -->
|
|
13
|
+
*
|
|
14
|
+
* The grammar is line-based and not Markdown-aware (Ruling 10): a marker is a whole line starting at
|
|
15
|
+
* column 0, single spaces between its tokens, trailing spaces or tabs tolerated. A line that starts
|
|
16
|
+
* like one and is not one is an error (a near miss); an indented marker is literal text.
|
|
17
|
+
*/
|
|
18
|
+
const OPEN = /^<!-- craftar:section (\S+) -->[ \t]*$/;
|
|
19
|
+
const CLOSE = /^<!-- \/craftar:section -->[ \t]*$/;
|
|
20
|
+
const NEAR = /^<!--[ \t]*\/?[ \t]*craftar:section/;
|
|
21
|
+
/** What a line is to the grammar: an opener (with its name), a closer, a near miss, or text (null). */
|
|
22
|
+
export function markerLine(line) {
|
|
23
|
+
const l = line.endsWith("\n") ? line.slice(0, -1) : line;
|
|
24
|
+
const open = OPEN.exec(l);
|
|
25
|
+
if (open && SECTION_NAME.test(open[1]))
|
|
26
|
+
return { kind: "open", name: open[1] };
|
|
27
|
+
if (CLOSE.test(l))
|
|
28
|
+
return { kind: "close" };
|
|
29
|
+
if (NEAR.test(l))
|
|
30
|
+
return { kind: "near" };
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
/** A marker problem, with the Forge-relative file and 1-based line it names. */
|
|
34
|
+
export class SectionMarkerError extends Error {
|
|
35
|
+
file;
|
|
36
|
+
line;
|
|
37
|
+
problem;
|
|
38
|
+
constructor(file, line, problem) {
|
|
39
|
+
super(`section markers in ${file}:${line}: ${problem}`);
|
|
40
|
+
this.file = file;
|
|
41
|
+
this.line = line;
|
|
42
|
+
this.problem = problem;
|
|
43
|
+
this.name = "SectionMarkerError";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Lines that keep their terminator; the last one may have none. */
|
|
47
|
+
function linesOf(text) {
|
|
48
|
+
const out = [];
|
|
49
|
+
let at = 0;
|
|
50
|
+
while (at < text.length) {
|
|
51
|
+
const nl = text.indexOf("\n", at);
|
|
52
|
+
const end = nl === -1 ? text.length : nl + 1;
|
|
53
|
+
out.push(text.slice(at, end));
|
|
54
|
+
at = end;
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parse `text` (spec 11 §6.1). `label` is the Forge-relative file the errors name; `ref`, the
|
|
60
|
+
* ingredient the duplicate-name message names (defaults to `label`). Works on `toLf(stripBom(text))`.
|
|
61
|
+
*/
|
|
62
|
+
export function parseSections(text, label, ref = label) {
|
|
63
|
+
const lines = linesOf(toLf(stripBom(text)));
|
|
64
|
+
const segments = [];
|
|
65
|
+
const sections = [];
|
|
66
|
+
const seen = new Map();
|
|
67
|
+
let outside = "";
|
|
68
|
+
let open = null;
|
|
69
|
+
lines.forEach((line, i) => {
|
|
70
|
+
const n = i + 1;
|
|
71
|
+
const m = markerLine(line);
|
|
72
|
+
if (m === null) {
|
|
73
|
+
if (open)
|
|
74
|
+
open.body += line;
|
|
75
|
+
else
|
|
76
|
+
outside += line;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (m.kind === "near") {
|
|
80
|
+
throw new SectionMarkerError(label, n, `malformed section marker — expected "<!-- craftar:section <name> -->" or "<!-- /craftar:section -->"`);
|
|
81
|
+
}
|
|
82
|
+
if (m.kind === "open") {
|
|
83
|
+
if (open)
|
|
84
|
+
throw new SectionMarkerError(label, n, `section ${m.name} opens inside section ${open.name} (line ${open.line})`);
|
|
85
|
+
const prev = seen.get(m.name);
|
|
86
|
+
if (prev !== undefined)
|
|
87
|
+
throw new SectionMarkerError(label, n, `section ${m.name} is declared twice in ${ref} (also ${label}:${prev})`);
|
|
88
|
+
seen.set(m.name, n);
|
|
89
|
+
segments.push({ text: outside });
|
|
90
|
+
outside = "";
|
|
91
|
+
open = { name: m.name, line: n, body: "" };
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (!open)
|
|
95
|
+
throw new SectionMarkerError(label, n, "a closing marker with no open section");
|
|
96
|
+
const s = { name: open.name, default: open.body, line: open.line };
|
|
97
|
+
segments.push(s);
|
|
98
|
+
sections.push(s);
|
|
99
|
+
open = null;
|
|
100
|
+
});
|
|
101
|
+
if (open) {
|
|
102
|
+
const o = open;
|
|
103
|
+
throw new SectionMarkerError(label, o.line, `section ${o.name} is never closed`);
|
|
104
|
+
}
|
|
105
|
+
segments.push({ text: outside });
|
|
106
|
+
// Always text, then section and text alternately: O0 [s1] O1 … [sn] On (spec 11 §6.2).
|
|
107
|
+
return { file: label, segments, sections };
|
|
108
|
+
}
|
|
109
|
+
/** A name declared once per ingredient, across its files too (Ruling 11). Throws naming the second declaration. */
|
|
110
|
+
export function checkDeclaredOnce(ref, files) {
|
|
111
|
+
const first = new Map();
|
|
112
|
+
for (const f of files) {
|
|
113
|
+
for (const s of f.sections) {
|
|
114
|
+
const prev = first.get(s.name);
|
|
115
|
+
if (prev !== undefined)
|
|
116
|
+
throw new SectionMarkerError(f.file, s.line, `section ${s.name} is declared twice in ${ref} (also ${prev})`);
|
|
117
|
+
first.set(s.name, `${f.file}:${s.line}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** A section value as it is inserted (spec 11 §6.2): LF, and one final newline unless it is empty. */
|
|
122
|
+
export function canonicalValue(v) {
|
|
123
|
+
const lf = toLf(v);
|
|
124
|
+
return lf !== "" && !lf.endsWith("\n") ? lf + "\n" : lf;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* The file with every section replaced by its value in `values`, or by its default when `values`
|
|
128
|
+
* has none, and every marker line removed (spec 11 §6.2). Substitution comes after, by the caller.
|
|
129
|
+
*/
|
|
130
|
+
export function expandSections(parsed, values) {
|
|
131
|
+
let out = "";
|
|
132
|
+
for (const s of parsed.segments) {
|
|
133
|
+
if ("text" in s)
|
|
134
|
+
out += s.text;
|
|
135
|
+
else
|
|
136
|
+
out += values && Object.hasOwn(values, s.name) ? canonicalValue(values[s.name]) : s.default;
|
|
137
|
+
}
|
|
138
|
+
return out;
|
|
139
|
+
}
|
|
140
|
+
/** The 1-based line of the first column-0 marker or near miss in `text`, or null (the output guard, §6.6). */
|
|
141
|
+
export function firstMarkerLine(text) {
|
|
142
|
+
const lines = linesOf(text);
|
|
143
|
+
for (let i = 0; i < lines.length; i++)
|
|
144
|
+
if (markerLine(lines[i]) !== null)
|
|
145
|
+
return i + 1;
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Infer the open sections of one file from the source (spec 11 §6.8). Outside text is rendered
|
|
150
|
+
* with `map`; a section `fixed` sets (the workspace's value) is fixed text too; every other section
|
|
151
|
+
* is a gap that starts at a line start and is empty or ends with a newline. Exactly one assignment
|
|
152
|
+
* must spell the source. Not proved here — the caller renders with the result and compares.
|
|
153
|
+
*/
|
|
154
|
+
export function inferSections(parsed, source, fixed, map) {
|
|
155
|
+
const src = toLf(stripBom(source));
|
|
156
|
+
const pieces = [];
|
|
157
|
+
for (const s of parsed.segments) {
|
|
158
|
+
if ("text" in s)
|
|
159
|
+
pieces.push({ fixed: substitute(s.text, map) });
|
|
160
|
+
else if (Object.hasOwn(fixed, s.name))
|
|
161
|
+
pieces.push({ fixed: substitute(canonicalValue(fixed[s.name]), map), ws: s.name });
|
|
162
|
+
else
|
|
163
|
+
pieces.push({ gap: s.name });
|
|
164
|
+
}
|
|
165
|
+
const atLineStart = (pos) => pos === 0 || src[pos - 1] === "\n";
|
|
166
|
+
const found = [];
|
|
167
|
+
const dead = new Set();
|
|
168
|
+
let far = { pos: -1, ws: undefined };
|
|
169
|
+
const walk = (i, pos, assigned) => {
|
|
170
|
+
if (found.length >= 2)
|
|
171
|
+
return true;
|
|
172
|
+
const key = `${i}:${pos}`;
|
|
173
|
+
if (dead.has(key))
|
|
174
|
+
return false;
|
|
175
|
+
let ok = false;
|
|
176
|
+
if (i === pieces.length) {
|
|
177
|
+
if (pos === src.length) {
|
|
178
|
+
found.push({ ...assigned });
|
|
179
|
+
ok = true;
|
|
180
|
+
}
|
|
181
|
+
else if (pos > far.pos)
|
|
182
|
+
far = { pos, ws: undefined };
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
const p = pieces[i];
|
|
186
|
+
if ("fixed" in p) {
|
|
187
|
+
if (src.startsWith(p.fixed, pos))
|
|
188
|
+
ok = walk(i + 1, pos + p.fixed.length, assigned);
|
|
189
|
+
else {
|
|
190
|
+
let common = 0;
|
|
191
|
+
while (common < p.fixed.length && src[pos + common] === p.fixed[common])
|
|
192
|
+
common++;
|
|
193
|
+
if (pos + common > far.pos)
|
|
194
|
+
far = { pos: pos + common, ws: p.ws };
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else if (atLineStart(pos)) {
|
|
198
|
+
for (let end = pos; end <= src.length; end++) {
|
|
199
|
+
if (end !== pos && src[end - 1] !== "\n")
|
|
200
|
+
continue;
|
|
201
|
+
assigned[p.gap] = src.slice(pos, end);
|
|
202
|
+
if (walk(i + 1, end, assigned))
|
|
203
|
+
ok = true;
|
|
204
|
+
delete assigned[p.gap];
|
|
205
|
+
if (found.length >= 2)
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (!ok)
|
|
211
|
+
dead.add(key);
|
|
212
|
+
return ok;
|
|
213
|
+
};
|
|
214
|
+
walk(0, 0, {});
|
|
215
|
+
if (found.length === 0) {
|
|
216
|
+
if (far.ws !== undefined)
|
|
217
|
+
return { fallback: "F11", reason: `section ${far.ws} of ${parsed.file} is set by the workspace and the source differs there` };
|
|
218
|
+
const line = src.slice(0, Math.max(0, far.pos)).split("\n").length;
|
|
219
|
+
return { fallback: "F11", reason: `the text outside the sections of ${parsed.file} differs (line ${line})` };
|
|
220
|
+
}
|
|
221
|
+
if (found.length > 1) {
|
|
222
|
+
const [a, b] = found;
|
|
223
|
+
const differ = Object.keys(a).filter((k) => a[k] !== b[k]);
|
|
224
|
+
return { fallback: "F12", reason: `section inference ambiguous in ${parsed.file}: ${differ.join(", ")}` };
|
|
225
|
+
}
|
|
226
|
+
const values = found[0];
|
|
227
|
+
for (const s of parsed.sections) {
|
|
228
|
+
if (!Object.hasOwn(values, s.name))
|
|
229
|
+
continue;
|
|
230
|
+
if (firstMarkerLine(values[s.name]) !== null)
|
|
231
|
+
return { fallback: "F13", reason: `section ${s.name} would hold a section marker` };
|
|
232
|
+
const k = placeholders(values[s.name]).find((x) => Object.hasOwn(map, x));
|
|
233
|
+
if (k !== undefined)
|
|
234
|
+
return { fallback: "F13", reason: `section ${s.name} would cite {{${k}}}, which this profile renders` };
|
|
235
|
+
}
|
|
236
|
+
return { values };
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=sections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/core/sections.ts"],"names":[],"mappings":"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"}
|
package/dist/core/sync.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { promises as fs } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import YAML from "yaml";
|
|
4
|
-
import { loadForge, exists } from "./forge.js";
|
|
5
|
-
import { resolve, substitute, paramsFor } from "./resolve.js";
|
|
4
|
+
import { loadForge, exists, listFiles, FORGE_MANIFEST } from "./forge.js";
|
|
5
|
+
import { resolve, substitute, paramsFor, sectionKey, sectionsFor } from "./resolve.js";
|
|
6
6
|
import { hashNormalized, stripBom, toLf } from "./text.js";
|
|
7
7
|
import { deepMerge } from "./merge.js";
|
|
8
|
+
import { canonicalValue, checkDeclaredOnce, expandSections, firstMarkerLine, markerLine, parseSections } from "./sections.js";
|
|
9
|
+
import { placeholders, substitutedFile } from "./extract.js";
|
|
8
10
|
import { LockSchema, WorkspaceConfigSchema } from "../schema/index.js";
|
|
9
11
|
import { claudeCode } from "../emitters/claude-code.js";
|
|
10
12
|
import { kiro } from "../emitters/kiro.js";
|
|
@@ -20,8 +22,13 @@ export async function loadWorkspace(root) {
|
|
|
20
22
|
throw new Error(`${WORKSPACE_FILE} not found in ${root} — run \`craftar import --workspace "${root}" --from claude-code --forge <dir> --profile <name> --write-config\` to create it`);
|
|
21
23
|
const base = YAML.parse(await fs.readFile(file, "utf8")) ?? {};
|
|
22
24
|
const localFile = path.join(root, LOCAL_FILE);
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
+
const hasLocal = await exists(localFile);
|
|
26
|
+
const local = hasLocal ? YAML.parse(await fs.readFile(localFile, "utf8")) ?? {} : {};
|
|
27
|
+
const parsed = WorkspaceConfigSchema.safeParse(deepMerge(base, local));
|
|
28
|
+
// Named, as a Forge file is: a wrong-shape `overrides.sections` key fails here (spec 11 §5.2).
|
|
29
|
+
if (!parsed.success)
|
|
30
|
+
throw new Error(`invalid ${WORKSPACE_FILE}${hasLocal ? ` (merged with ${LOCAL_FILE})` : ""}: ${parsed.error.message}`);
|
|
31
|
+
const config = parsed.data;
|
|
25
32
|
const forgeRoot = /^[a-z]+:\/\/|^git@/.test(config.forge) ? config.forge : path.resolve(root, config.forge);
|
|
26
33
|
if (!(await exists(forgeRoot)))
|
|
27
34
|
throw new Error(`Forge not found at ${forgeRoot} (remote Forges are not supported yet — clone it and point \`forge:\` at the path)`);
|
|
@@ -43,12 +50,123 @@ export async function resolveForge(opts) {
|
|
|
43
50
|
}
|
|
44
51
|
return (await loadWorkspace(root)).forge;
|
|
45
52
|
}
|
|
53
|
+
/** A path as the Forge names it: relative to its root, POSIX separators. */
|
|
54
|
+
function forgeRel(forge, abs) {
|
|
55
|
+
return path.relative(forge.root, abs).split(path.sep).join("/");
|
|
56
|
+
}
|
|
57
|
+
/** `profile <p>` or `the workspace`: the strongest layer that sets section `name` of `key` (Ruling 15). */
|
|
58
|
+
function layerOf(resolution, key, name) {
|
|
59
|
+
const has = (m) => Object.hasOwn(m, key) && Object.hasOwn(m[key], name);
|
|
60
|
+
if (has(resolution.sectionLayers.workspace))
|
|
61
|
+
return "workspace";
|
|
62
|
+
if (has(resolution.sectionLayers.profile))
|
|
63
|
+
return "profile";
|
|
64
|
+
return "default";
|
|
65
|
+
}
|
|
66
|
+
function layerLabel(resolution, layer) {
|
|
67
|
+
return layer === "workspace" ? "the workspace" : `profile ${resolution.profile.name}`;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The section pass of `plan()` (spec 11 §6.6 steps 1–5): parse every admitted file of every resolved
|
|
71
|
+
* ingredient (a malformed marker throws, whichever targets resolve), warn on marker lines in files
|
|
72
|
+
* not every target renders, fail a `schema: 1` Forge that holds a marker (Ruling 7/21), and warn on
|
|
73
|
+
* section values that apply to nothing.
|
|
74
|
+
*/
|
|
75
|
+
async function sectionPass(forge, resolution, warnings) {
|
|
76
|
+
const parsed = new Map(); // abs path → parse
|
|
77
|
+
const declared = new Map(); // section key → names declared by resolved ingredients
|
|
78
|
+
const byRef = new Map();
|
|
79
|
+
let firstMarker = null;
|
|
80
|
+
for (const ing of resolution.ingredients) {
|
|
81
|
+
const key = sectionKey(ing.meta);
|
|
82
|
+
const names = declared.get(key) ?? new Set();
|
|
83
|
+
declared.set(key, names);
|
|
84
|
+
if (ing.meta.type === "mcp")
|
|
85
|
+
continue; // no file, so no marker: a value keyed mcp/<name> is warned below
|
|
86
|
+
const files = [];
|
|
87
|
+
for (const rel of await listFiles(ing.dir)) {
|
|
88
|
+
if (rel === "ingredient.yaml")
|
|
89
|
+
continue;
|
|
90
|
+
const abs = path.join(ing.dir, rel);
|
|
91
|
+
if (substitutedFile(ing.meta, rel)) {
|
|
92
|
+
const p = parseSections(await fs.readFile(abs, "utf8"), forgeRel(forge, abs), ing.ref);
|
|
93
|
+
parsed.set(abs, p);
|
|
94
|
+
files.push({ rel, p });
|
|
95
|
+
if (p.sections.length && firstMarker === null)
|
|
96
|
+
firstMarker = `${p.file}:${p.sections[0].line}`;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// A file not every target renders as text keeps its markers; one, whatever its extension, is warned, never dropped
|
|
100
|
+
// silently. Every marker form contains "craftar:section", so a file without it is not decoded.
|
|
101
|
+
const bytes = await fs.readFile(abs);
|
|
102
|
+
if (bytes.includes("craftar:section") && toLf(stripBom(bytes.toString("utf8"))).split("\n").some((l) => markerLine(l) !== null)) {
|
|
103
|
+
warnings.push(`${ing.ref} ${rel}: section markers are read only in files every target renders as text — copied with them`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
checkDeclaredOnce(ing.ref, files.map((f) => f.p));
|
|
108
|
+
const list = [];
|
|
109
|
+
for (const { rel, p } of files) {
|
|
110
|
+
for (const s of p.sections) {
|
|
111
|
+
names.add(s.name);
|
|
112
|
+
list.push({ file: rel, name: s.name, layer: layerOf(resolution, key, s.name) });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (list.length)
|
|
116
|
+
byRef.set(ing.ref, list);
|
|
117
|
+
}
|
|
118
|
+
// The schema gate (Ruling 7, §6.14): only the bodies this workspace resolves, after every parse error.
|
|
119
|
+
if (firstMarker !== null && forge.manifest.schema === 1) {
|
|
120
|
+
throw new Error(`${FORGE_MANIFEST} declares schema: 1, but ${firstMarker} holds a section marker — set schema: 2 in ${FORGE_MANIFEST}, ` +
|
|
121
|
+
`so that craftar 0.6.2 and older refuse this Forge instead of emitting the markers`);
|
|
122
|
+
}
|
|
123
|
+
// Values that apply to nothing (Ruling 12): an unknown key always; an unknown name only on a resolved key.
|
|
124
|
+
const forgeKeys = new Set([...forge.ingredients.values()].map((i) => sectionKey(i.meta)));
|
|
125
|
+
const said = new Set();
|
|
126
|
+
const say = (w) => {
|
|
127
|
+
if (!said.has(w))
|
|
128
|
+
warnings.push(w);
|
|
129
|
+
said.add(w);
|
|
130
|
+
};
|
|
131
|
+
for (const [key, values] of Object.entries(resolution.sections)) {
|
|
132
|
+
for (const name of Object.keys(values)) {
|
|
133
|
+
const layer = layerLabel(resolution, layerOf(resolution, key, name));
|
|
134
|
+
if (!forgeKeys.has(key))
|
|
135
|
+
say(`section key ${key} in ${layer} names no ingredient in the Forge`);
|
|
136
|
+
else if (declared.has(key) && !declared.get(key).has(name))
|
|
137
|
+
say(`${layer} sets section ${name} of ${key}, which has no such marker`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return { parsed, byRef };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* The output guard (spec 11 §6.6 step 6, Ruling 19): a rendered admitted file never holds a marker
|
|
144
|
+
* line. When one does, it came from a value; name the first value that carries one.
|
|
145
|
+
*/
|
|
146
|
+
function guardOutput(ing, file, out, p, resolution, params) {
|
|
147
|
+
const line = firstMarkerLine(out);
|
|
148
|
+
if (line === null)
|
|
149
|
+
return;
|
|
150
|
+
const key = sectionKey(ing.meta);
|
|
151
|
+
const values = sectionsFor(ing, resolution);
|
|
152
|
+
let from = "a section or param value";
|
|
153
|
+
const section = p.sections.find((s) => Object.hasOwn(values, s.name) && firstMarkerLine(substitute(canonicalValue(values[s.name]), params)) !== null);
|
|
154
|
+
if (section)
|
|
155
|
+
from = `${layerLabel(resolution, layerOf(resolution, key, section.name))}, section ${section.name}`;
|
|
156
|
+
else {
|
|
157
|
+
const k = placeholders(expandSections(p, values)).find((x) => Object.hasOwn(params, x) && /<!--[ \t]*\/?[ \t]*craftar:section/.test(String(params[x])));
|
|
158
|
+
if (k !== undefined)
|
|
159
|
+
from = `param ${k}`;
|
|
160
|
+
}
|
|
161
|
+
throw new Error(`${ing.ref} ${file}: the rendered text holds a section marker on line ${line} (from ${from}) — a value cannot open or close a section`);
|
|
162
|
+
}
|
|
46
163
|
export async function plan(ws) {
|
|
47
164
|
const resolution = resolve(ws.forge, ws.config);
|
|
48
165
|
const warnings = [...resolution.warnings];
|
|
49
166
|
if (resolution.targets.length === 0) {
|
|
50
167
|
warnings.push("no targets resolved — nothing will be emitted and every file in craftar.lock becomes an orphan (an empty list in craftar.local.yaml replaces the workspace's)");
|
|
51
168
|
}
|
|
169
|
+
const sections = await sectionPass(ws.forge, resolution, warnings);
|
|
52
170
|
/** Unresolved placeholder → refs of the ingredients citing it. */
|
|
53
171
|
const missingParams = new Map();
|
|
54
172
|
const ctx = {
|
|
@@ -64,9 +182,19 @@ export async function plan(ws) {
|
|
|
64
182
|
}
|
|
65
183
|
},
|
|
66
184
|
async text(ing, file) {
|
|
67
|
-
const
|
|
185
|
+
const abs = path.join(ing.dir, file);
|
|
186
|
+
const raw = await fs.readFile(abs, "utf8");
|
|
68
187
|
const missing = new Set();
|
|
69
|
-
const
|
|
188
|
+
const params = paramsFor(ing, resolution);
|
|
189
|
+
// Sections first, then params (spec 11 §6.4), in admitted files only (§6.5).
|
|
190
|
+
const parsed = substitutedFile(ing.meta, file) ? sections.parsed.get(abs) : null;
|
|
191
|
+
// Every admitted file of a resolved ingredient was parsed and gated in the section pass; a miss here would skip the schema gate.
|
|
192
|
+
if (parsed === undefined)
|
|
193
|
+
throw new Error(`internal: ${forgeRel(ws.forge, abs)} was not parsed by the section pass`);
|
|
194
|
+
const expanded = parsed ? expandSections(parsed, sectionsFor(ing, resolution)) : toLf(stripBom(raw));
|
|
195
|
+
const out = substitute(expanded, params, missing);
|
|
196
|
+
if (parsed)
|
|
197
|
+
guardOutput(ing, file, out, parsed, resolution, params);
|
|
70
198
|
for (const key of missing)
|
|
71
199
|
missingParams.set(key, (missingParams.get(key) ?? new Set()).add(ing.ref));
|
|
72
200
|
return out;
|
|
@@ -98,7 +226,7 @@ export async function plan(ws) {
|
|
|
98
226
|
warnings.push(`two ingredients write ${f.path}: ${prev} and ${f.ingredient} (last wins)`);
|
|
99
227
|
seen.set(f.path, f.ingredient);
|
|
100
228
|
}
|
|
101
|
-
return { resolution, files: dedupeLastWins(files), warnings };
|
|
229
|
+
return { resolution, files: dedupeLastWins(files), warnings, sections: sections.byRef };
|
|
102
230
|
}
|
|
103
231
|
function dedupeLastWins(files) {
|
|
104
232
|
const m = new Map();
|
package/dist/core/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { placeholders, substitutedFile } from "./extract.js";
|
|
|
4
4
|
import { fingerprintOf } from "./fingerprint.js";
|
|
5
5
|
import { parseYaml } from "./forge.js";
|
|
6
6
|
import { substitute } from "./resolve.js";
|
|
7
|
+
import { checkDeclaredOnce, expandSections, parseSections, SectionMarkerError } from "./sections.js";
|
|
7
8
|
import { stripBom, toLf } from "./text.js";
|
|
8
9
|
/**
|
|
9
10
|
* Template-aware import (spec 10): compare a workspace source with the Forge base as sync would
|
|
@@ -24,23 +25,53 @@ export function renderMap(meta, profileParams, workspaceParams) {
|
|
|
24
25
|
out[k] = v;
|
|
25
26
|
return out;
|
|
26
27
|
}
|
|
27
|
-
/**
|
|
28
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Read a base. Every admitted text is parsed for section markers; a malformed one, or a name
|
|
30
|
+
* declared twice across the ingredient's files, is I12 (spec 11 §4.5). `forgeRoot`, when given,
|
|
31
|
+
* makes the file the error names Forge-relative.
|
|
32
|
+
*/
|
|
33
|
+
export async function readBase(dir, io, forgeRoot) {
|
|
29
34
|
const metaFile = path.join(dir, "ingredient.yaml");
|
|
30
35
|
const meta = parseYaml(metaFile, await io.readText(metaFile), IngredientSchema);
|
|
31
36
|
const texts = new Map();
|
|
32
37
|
const bytes = new Map();
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
const parsed = new Map();
|
|
39
|
+
const label = (rel) => (forgeRoot ? path.relative(forgeRoot, path.join(dir, rel)) : path.join(dir, rel)).split(path.sep).join("/");
|
|
40
|
+
try {
|
|
41
|
+
for (const rel of await io.list(dir)) {
|
|
42
|
+
if (rel === "ingredient.yaml")
|
|
43
|
+
continue;
|
|
44
|
+
if (substitutedFile(meta, rel)) {
|
|
45
|
+
const text = norm(await io.readText(path.join(dir, rel)));
|
|
46
|
+
texts.set(rel, text);
|
|
47
|
+
parsed.set(rel, parseSections(text, label(rel), `${meta.type}/${meta.name}`));
|
|
48
|
+
}
|
|
49
|
+
else
|
|
50
|
+
bytes.set(rel, await io.readBytes(path.join(dir, rel)));
|
|
51
|
+
}
|
|
52
|
+
checkDeclaredOnce(`${meta.type}/${meta.name}`, [...parsed.values()]);
|
|
40
53
|
}
|
|
41
|
-
|
|
54
|
+
catch (e) {
|
|
55
|
+
if (e instanceof SectionMarkerError)
|
|
56
|
+
throw new Error(`import: ${e.file}:${e.line}: ${e.problem} — fix the Forge and re-run`);
|
|
57
|
+
throw e;
|
|
58
|
+
}
|
|
59
|
+
return { meta, texts, bytes, metaFile, parsed };
|
|
60
|
+
}
|
|
61
|
+
/** The names of the sections a base declares, across its admitted files. */
|
|
62
|
+
export function sectionNames(base) {
|
|
63
|
+
return [...base.parsed.values()].flatMap((p) => p.sections.map((s) => s.name));
|
|
64
|
+
}
|
|
65
|
+
/** The base's admitted texts with their sections expanded by `values` (spec 11 §6.2) — what sync substitutes into. */
|
|
66
|
+
export function expandedTexts(base, values = {}) {
|
|
67
|
+
const out = new Map();
|
|
68
|
+
for (const [rel, text] of base.texts) {
|
|
69
|
+
const p = base.parsed.get(rel);
|
|
70
|
+
out.set(rel, p ? expandSections(p, values) : text);
|
|
71
|
+
}
|
|
72
|
+
return out;
|
|
42
73
|
}
|
|
43
|
-
/** The keys every admitted file of a base cites (`C(X)`). */
|
|
74
|
+
/** The keys every admitted file of a base cites (`C(X)`); pass `expandedTexts` for what the importing profile renders (spec 11 §6.7). */
|
|
44
75
|
export function citedKeys(texts) {
|
|
45
76
|
const out = new Set();
|
|
46
77
|
for (const t of texts.values())
|
|
@@ -50,14 +81,15 @@ export function citedKeys(texts) {
|
|
|
50
81
|
}
|
|
51
82
|
/**
|
|
52
83
|
* The fingerprint of a base rendered through `map` (spec 10 §6.2): its metadata without `params`
|
|
53
|
-
* (a workspace cannot express a declaration), admitted files
|
|
54
|
-
*
|
|
84
|
+
* (a workspace cannot express a declaration), admitted files expanded with the section values
|
|
85
|
+
* `sections` and then substituted, exactly as `ctx.text` does (spec 11 §6.4, §6.7), every other file
|
|
86
|
+
* as bytes. With no declaration, no marker and nothing set, this is `fingerprintDir`.
|
|
55
87
|
*/
|
|
56
|
-
export function renderedFingerprint(base, map) {
|
|
88
|
+
export function renderedFingerprint(base, map, sections = {}) {
|
|
57
89
|
const meta = { ...base.meta };
|
|
58
90
|
delete meta.params;
|
|
59
91
|
const files = {};
|
|
60
|
-
for (const [rel, text] of base
|
|
92
|
+
for (const [rel, text] of expandedTexts(base, sections))
|
|
61
93
|
files[rel] = substitute(text, map);
|
|
62
94
|
for (const [rel, b] of base.bytes)
|
|
63
95
|
files[rel] = b;
|