knitto 0.0.1

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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +869 -0
  3. package/dist/src/checks/run.d.ts +3 -0
  4. package/dist/src/checks/run.js +173 -0
  5. package/dist/src/checks/run.js.map +1 -0
  6. package/dist/src/cli.d.ts +2 -0
  7. package/dist/src/cli.js +406 -0
  8. package/dist/src/cli.js.map +1 -0
  9. package/dist/src/config.d.ts +11 -0
  10. package/dist/src/config.js +585 -0
  11. package/dist/src/config.js.map +1 -0
  12. package/dist/src/context/build.d.ts +2 -0
  13. package/dist/src/context/build.js +147 -0
  14. package/dist/src/context/build.js.map +1 -0
  15. package/dist/src/context/render.d.ts +7 -0
  16. package/dist/src/context/render.js +74 -0
  17. package/dist/src/context/render.js.map +1 -0
  18. package/dist/src/engine/apply.d.ts +2 -0
  19. package/dist/src/engine/apply.js +96 -0
  20. package/dist/src/engine/apply.js.map +1 -0
  21. package/dist/src/engine/diff.d.ts +2 -0
  22. package/dist/src/engine/diff.js +100 -0
  23. package/dist/src/engine/diff.js.map +1 -0
  24. package/dist/src/engine/plan.d.ts +2 -0
  25. package/dist/src/engine/plan.js +259 -0
  26. package/dist/src/engine/plan.js.map +1 -0
  27. package/dist/src/errors.d.ts +14 -0
  28. package/dist/src/errors.js +31 -0
  29. package/dist/src/errors.js.map +1 -0
  30. package/dist/src/filesystem/paths.d.ts +2 -0
  31. package/dist/src/filesystem/paths.js +47 -0
  32. package/dist/src/filesystem/paths.js.map +1 -0
  33. package/dist/src/hooks/run.d.ts +10 -0
  34. package/dist/src/hooks/run.js +105 -0
  35. package/dist/src/hooks/run.js.map +1 -0
  36. package/dist/src/index.d.ts +7 -0
  37. package/dist/src/index.js +7 -0
  38. package/dist/src/index.js.map +1 -0
  39. package/dist/src/lock.d.ts +2 -0
  40. package/dist/src/lock.js +16 -0
  41. package/dist/src/lock.js.map +1 -0
  42. package/dist/src/onboarding.d.ts +26 -0
  43. package/dist/src/onboarding.js +212 -0
  44. package/dist/src/onboarding.js.map +1 -0
  45. package/dist/src/parsers/index.d.ts +18 -0
  46. package/dist/src/parsers/index.js +194 -0
  47. package/dist/src/parsers/index.js.map +1 -0
  48. package/dist/src/parsers/json.d.ts +17 -0
  49. package/dist/src/parsers/json.js +214 -0
  50. package/dist/src/parsers/json.js.map +1 -0
  51. package/dist/src/parsers/merge.d.ts +1 -0
  52. package/dist/src/parsers/merge.js +17 -0
  53. package/dist/src/parsers/merge.js.map +1 -0
  54. package/dist/src/project/discover.d.ts +2 -0
  55. package/dist/src/project/discover.js +144 -0
  56. package/dist/src/project/discover.js.map +1 -0
  57. package/dist/src/rules/json-pointer.d.ts +3 -0
  58. package/dist/src/rules/json-pointer.js +114 -0
  59. package/dist/src/rules/json-pointer.js.map +1 -0
  60. package/dist/src/snapshots/canonical.d.ts +11 -0
  61. package/dist/src/snapshots/canonical.js +150 -0
  62. package/dist/src/snapshots/canonical.js.map +1 -0
  63. package/dist/src/sources/process.d.ts +3 -0
  64. package/dist/src/sources/process.js +28 -0
  65. package/dist/src/sources/process.js.map +1 -0
  66. package/dist/src/sources/resolve.d.ts +3 -0
  67. package/dist/src/sources/resolve.js +144 -0
  68. package/dist/src/sources/resolve.js.map +1 -0
  69. package/dist/src/template/init.d.ts +1 -0
  70. package/dist/src/template/init.js +62 -0
  71. package/dist/src/template/init.js.map +1 -0
  72. package/dist/src/template/manifest.d.ts +2 -0
  73. package/dist/src/template/manifest.js +80 -0
  74. package/dist/src/template/manifest.js.map +1 -0
  75. package/dist/src/template/release.d.ts +3 -0
  76. package/dist/src/template/release.js +8 -0
  77. package/dist/src/template/release.js.map +1 -0
  78. package/dist/src/template/validate.d.ts +2 -0
  79. package/dist/src/template/validate.js +62 -0
  80. package/dist/src/template/validate.js.map +1 -0
  81. package/dist/src/types.d.ts +242 -0
  82. package/dist/src/types.js +4 -0
  83. package/dist/src/types.js.map +1 -0
  84. package/dist/src/version.d.ts +2 -0
  85. package/dist/src/version.js +3 -0
  86. package/dist/src/version.js.map +1 -0
  87. package/package.json +51 -0
@@ -0,0 +1,585 @@
1
+ import path from "node:path";
2
+ import { readFile, rename, rm, writeFile } from "node:fs/promises";
3
+ import { CONFIG_FILE, LOCK_FILE, } from "./types.js";
4
+ import { KnittoError } from "./errors.js";
5
+ import { KNITTO_PACKAGE, KNITTO_VERSION } from "./version.js";
6
+ import { valid } from "semver";
7
+ async function readJson(file, kind) {
8
+ let contents;
9
+ try {
10
+ contents = await readFile(file, "utf8");
11
+ }
12
+ catch (error) {
13
+ throw new KnittoError(`Unable to read ${kind}: ${file}`, "CONFIG", {
14
+ cause: error,
15
+ });
16
+ }
17
+ try {
18
+ return JSON.parse(contents);
19
+ }
20
+ catch (error) {
21
+ throw new KnittoError(`Invalid JSON in ${kind}: ${file}`, "CONFIG", {
22
+ cause: error,
23
+ });
24
+ }
25
+ }
26
+ function isRecord(value) {
27
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28
+ }
29
+ function isParserName(value) {
30
+ return (value === "text" ||
31
+ value === "json" ||
32
+ value === "json-merge" ||
33
+ value === "package-json" ||
34
+ value === "yaml" ||
35
+ value === "yaml-merge" ||
36
+ value === "ini" ||
37
+ value === "ini-merge" ||
38
+ value === "hook");
39
+ }
40
+ function stringArray(value) {
41
+ return Array.isArray(value) &&
42
+ value.every((item) => typeof item === "string")
43
+ ? value
44
+ : undefined;
45
+ }
46
+ function validateCheck(value) {
47
+ if (!isRecord(value) || typeof value.id !== "string") {
48
+ throw new KnittoError("Template contains an invalid check", "TEMPLATE");
49
+ }
50
+ const common = {
51
+ id: value.id,
52
+ ...(typeof value.when === "string" ? { when: value.when } : {}),
53
+ ...(value.scope === "root" ||
54
+ value.scope === "workspace" ||
55
+ value.scope === "all"
56
+ ? { scope: value.scope }
57
+ : {}),
58
+ };
59
+ if (value.type === "required-packages" && isRecord(value.packages)) {
60
+ const packages = {};
61
+ for (const [location, specs] of Object.entries(value.packages)) {
62
+ const parsed = stringArray(specs);
63
+ if (!parsed) {
64
+ throw new KnittoError(`Required package specs for ${location} must be strings`, "TEMPLATE");
65
+ }
66
+ packages[location] = parsed;
67
+ }
68
+ return { ...common, type: "required-packages", packages };
69
+ }
70
+ if (value.type === "unwanted-packages") {
71
+ const packages = stringArray(value.packages);
72
+ const allowed = value.allowed === undefined ? undefined : stringArray(value.allowed);
73
+ if (!packages || (value.allowed !== undefined && !allowed)) {
74
+ throw new KnittoError("Unwanted package checks require string arrays", "TEMPLATE");
75
+ }
76
+ return {
77
+ ...common,
78
+ type: "unwanted-packages",
79
+ packages,
80
+ ...(allowed ? { allowed } : {}),
81
+ };
82
+ }
83
+ if (value.type === "file-regex" &&
84
+ typeof value.path === "string" &&
85
+ typeof value.pattern === "string") {
86
+ return {
87
+ ...common,
88
+ type: "file-regex",
89
+ path: value.path,
90
+ pattern: value.pattern,
91
+ ...(typeof value.flags === "string" ? { flags: value.flags } : {}),
92
+ ...(typeof value.mustMatch === "boolean"
93
+ ? { mustMatch: value.mustMatch }
94
+ : {}),
95
+ ...(typeof value.message === "string" ? { message: value.message } : {}),
96
+ ...(typeof value.solution === "string"
97
+ ? { solution: value.solution }
98
+ : {}),
99
+ };
100
+ }
101
+ if (value.type === "engines") {
102
+ const omit = value.omit === undefined ? undefined : stringArray(value.omit);
103
+ if (value.omit !== undefined && !omit) {
104
+ throw new KnittoError("Engine omissions must be strings", "TEMPLATE");
105
+ }
106
+ return {
107
+ ...common,
108
+ type: "engines",
109
+ ...(omit ? { omit } : {}),
110
+ };
111
+ }
112
+ throw new KnittoError(`Invalid template check: ${value.id}`, "TEMPLATE");
113
+ }
114
+ function validateHook(value) {
115
+ if (!isRecord(value) ||
116
+ typeof value.id !== "string" ||
117
+ (value.kind !== "context" &&
118
+ value.kind !== "parser" &&
119
+ value.kind !== "check") ||
120
+ typeof value.command !== "string") {
121
+ throw new KnittoError("Template contains an invalid hook", "TEMPLATE");
122
+ }
123
+ const args = value.args === undefined ? undefined : stringArray(value.args);
124
+ if (value.args !== undefined && !args) {
125
+ throw new KnittoError(`Hook arguments must be strings: ${value.id}`, "TEMPLATE");
126
+ }
127
+ return {
128
+ id: value.id,
129
+ kind: value.kind,
130
+ command: value.command,
131
+ ...(args ? { args } : {}),
132
+ };
133
+ }
134
+ export function validateSource(value) {
135
+ if (!isRecord(value) || typeof value.type !== "string") {
136
+ throw new KnittoError("Project source is missing or invalid", "CONFIG");
137
+ }
138
+ if (value.type === "local" && typeof value.path === "string") {
139
+ return { type: "local", path: value.path };
140
+ }
141
+ if (value.type === "http" && typeof value.url === "string") {
142
+ return {
143
+ type: "http",
144
+ url: value.url,
145
+ ...(typeof value.path === "string" ? { path: value.path } : {}),
146
+ };
147
+ }
148
+ if (value.type === "git" && typeof value.url === "string") {
149
+ return {
150
+ type: "git",
151
+ url: value.url,
152
+ ...(typeof value.path === "string" ? { path: value.path } : {}),
153
+ ...(typeof value.ref === "string" ? { ref: value.ref } : {}),
154
+ };
155
+ }
156
+ throw new KnittoError(`Unsupported source type: ${value.type}`, "CONFIG");
157
+ }
158
+ export function validateProjectConfig(value) {
159
+ if (!isRecord(value)) {
160
+ throw new KnittoError("Project configuration must be an object", "CONFIG");
161
+ }
162
+ const source = validateSource(value.source);
163
+ const config = { source };
164
+ if (value.engine !== undefined) {
165
+ if (!isRecord(value.engine) ||
166
+ value.engine.package !== KNITTO_PACKAGE ||
167
+ typeof value.engine.version !== "string" ||
168
+ valid(value.engine.version) === null) {
169
+ throw new KnittoError("Project engine must specify an exact knitto semantic version", "CONFIG");
170
+ }
171
+ if (value.engine.version !== KNITTO_VERSION) {
172
+ throw new KnittoError(`Project requires ${KNITTO_PACKAGE}@${value.engine.version}, but this is ${KNITTO_PACKAGE}@${KNITTO_VERSION}; run with npx ${KNITTO_PACKAGE}@${value.engine.version}`, "CONFIG");
173
+ }
174
+ config.engine = {
175
+ package: KNITTO_PACKAGE,
176
+ version: value.engine.version,
177
+ };
178
+ }
179
+ if (isRecord(value.metadata))
180
+ config.metadata = value.metadata;
181
+ if (isRecord(value.variables))
182
+ config.variables = value.variables;
183
+ if (value.trust !== undefined) {
184
+ if (!isRecord(value.trust)) {
185
+ throw new KnittoError("Project trust configuration must be an object", "CONFIG");
186
+ }
187
+ const hooks = value.trust.hooks === undefined ? undefined : stringArray(value.trust.hooks);
188
+ if (value.trust.hooks !== undefined && !hooks) {
189
+ throw new KnittoError("Trusted hook digests must be strings", "CONFIG");
190
+ }
191
+ config.trust = {
192
+ ...(hooks ? { hooks } : {}),
193
+ };
194
+ }
195
+ if (isRecord(value.overrides)) {
196
+ const overrides = {};
197
+ for (const [ruleId, ruleOverrides] of Object.entries(value.overrides)) {
198
+ if (!isRecord(ruleOverrides)) {
199
+ throw new KnittoError(`Overrides for ${ruleId} must be an object`, "CONFIG");
200
+ }
201
+ overrides[ruleId] = ruleOverrides;
202
+ }
203
+ config.overrides = overrides;
204
+ }
205
+ if (isRecord(value.exclude)) {
206
+ let rules;
207
+ if (value.exclude.rules !== undefined) {
208
+ if (!Array.isArray(value.exclude.rules) ||
209
+ !value.exclude.rules.every((item) => typeof item === "string")) {
210
+ throw new KnittoError("Excluded rules must be strings", "CONFIG");
211
+ }
212
+ rules = value.exclude.rules;
213
+ }
214
+ let pointers;
215
+ if (value.exclude.pointers !== undefined) {
216
+ if (!isRecord(value.exclude.pointers)) {
217
+ throw new KnittoError("Excluded pointers must be grouped by rule ID", "CONFIG");
218
+ }
219
+ pointers = {};
220
+ for (const [ruleId, rulePointers] of Object.entries(value.exclude.pointers)) {
221
+ if (!Array.isArray(rulePointers) ||
222
+ !rulePointers.every((item) => typeof item === "string")) {
223
+ throw new KnittoError(`Excluded pointers for ${ruleId} must be strings`, "CONFIG");
224
+ }
225
+ pointers[ruleId] = rulePointers;
226
+ }
227
+ }
228
+ const checks = value.exclude.checks === undefined
229
+ ? undefined
230
+ : stringArray(value.exclude.checks);
231
+ if (value.exclude.checks !== undefined && !checks) {
232
+ throw new KnittoError("Excluded checks must be strings", "CONFIG");
233
+ }
234
+ config.exclude = {
235
+ ...(rules ? { rules } : {}),
236
+ ...(checks ? { checks } : {}),
237
+ ...(pointers ? { pointers } : {}),
238
+ };
239
+ }
240
+ return config;
241
+ }
242
+ function validateRule(value) {
243
+ if (!isRecord(value) ||
244
+ typeof value.id !== "string" ||
245
+ typeof value.type !== "string" ||
246
+ typeof value.destination !== "string") {
247
+ throw new KnittoError("Template contains an invalid rule", "TEMPLATE");
248
+ }
249
+ if (value.type === "delete") {
250
+ return {
251
+ id: value.id,
252
+ type: "delete",
253
+ destination: value.destination,
254
+ ...(typeof value.glob === "boolean" ? { glob: value.glob } : {}),
255
+ ...(typeof value.when === "string" ? { when: value.when } : {}),
256
+ ...(value.scope === "root" ||
257
+ value.scope === "workspace" ||
258
+ value.scope === "all"
259
+ ? { scope: value.scope }
260
+ : {}),
261
+ ...(value.target === "project" || value.target === "root"
262
+ ? { target: value.target }
263
+ : {}),
264
+ };
265
+ }
266
+ if (value.type === "file" && typeof value.template === "string") {
267
+ return {
268
+ id: value.id,
269
+ type: "file",
270
+ destination: value.destination,
271
+ template: value.template,
272
+ ...(typeof value.mode === "number" ? { mode: value.mode } : {}),
273
+ ...(typeof value.when === "string" ? { when: value.when } : {}),
274
+ ...(value.scope === "root" ||
275
+ value.scope === "workspace" ||
276
+ value.scope === "all"
277
+ ? { scope: value.scope }
278
+ : {}),
279
+ ...(value.target === "project" || value.target === "root"
280
+ ? { target: value.target }
281
+ : {}),
282
+ };
283
+ }
284
+ if (value.type === "json" &&
285
+ typeof value.template === "string" &&
286
+ (value.pointers === undefined || stringArray(value.pointers))) {
287
+ const pointers = stringArray(value.pointers);
288
+ const exact = stringArray(value.exact);
289
+ if (value.exact !== undefined && !exact) {
290
+ throw new KnittoError("Exact structured pointers must be strings", "TEMPLATE");
291
+ }
292
+ return {
293
+ id: value.id,
294
+ type: "json",
295
+ destination: value.destination,
296
+ template: value.template,
297
+ ...(pointers ? { pointers } : {}),
298
+ ...(exact ? { exact } : {}),
299
+ ...(typeof value.indent === "number" ? { indent: value.indent } : {}),
300
+ ...(typeof value.schema === "string" ? { schema: value.schema } : {}),
301
+ ...(typeof value.when === "string" ? { when: value.when } : {}),
302
+ ...(value.scope === "root" ||
303
+ value.scope === "workspace" ||
304
+ value.scope === "all"
305
+ ? { scope: value.scope }
306
+ : {}),
307
+ ...(value.target === "project" || value.target === "root"
308
+ ? { target: value.target }
309
+ : {}),
310
+ };
311
+ }
312
+ if (value.type === "content" &&
313
+ typeof value.template === "string" &&
314
+ isParserName(value.parser) &&
315
+ (value.parser !== "hook" || typeof value.hook === "string") &&
316
+ (value.pointers === undefined || stringArray(value.pointers))) {
317
+ const pointers = stringArray(value.pointers);
318
+ const exact = stringArray(value.exact);
319
+ if (value.exact !== undefined && !exact) {
320
+ throw new KnittoError("Exact structured pointers must be strings", "TEMPLATE");
321
+ }
322
+ return {
323
+ id: value.id,
324
+ type: "content",
325
+ destination: value.destination,
326
+ template: value.template,
327
+ parser: value.parser,
328
+ ...(typeof value.hook === "string" ? { hook: value.hook } : {}),
329
+ ...(typeof value.schema === "string" ? { schema: value.schema } : {}),
330
+ ...(pointers ? { pointers } : {}),
331
+ ...(exact ? { exact } : {}),
332
+ ...(typeof value.indent === "number" ? { indent: value.indent } : {}),
333
+ ...(typeof value.mode === "number" ? { mode: value.mode } : {}),
334
+ ...(typeof value.when === "string" ? { when: value.when } : {}),
335
+ ...(value.scope === "root" ||
336
+ value.scope === "workspace" ||
337
+ value.scope === "all"
338
+ ? { scope: value.scope }
339
+ : {}),
340
+ ...(value.target === "project" || value.target === "root"
341
+ ? { target: value.target }
342
+ : {}),
343
+ };
344
+ }
345
+ throw new KnittoError(`Invalid template rule: ${value.id}`, "TEMPLATE");
346
+ }
347
+ export function validateTemplateManifest(value) {
348
+ if (!isRecord(value) ||
349
+ value.schemaVersion !== 1 ||
350
+ typeof value.name !== "string" ||
351
+ !Array.isArray(value.rules)) {
352
+ throw new KnittoError("Invalid template manifest", "TEMPLATE");
353
+ }
354
+ const rules = value.rules.map(validateRule);
355
+ const checks = Array.isArray(value.checks)
356
+ ? value.checks.map(validateCheck)
357
+ : undefined;
358
+ const hooks = Array.isArray(value.hooks)
359
+ ? value.hooks.map(validateHook)
360
+ : undefined;
361
+ let engine;
362
+ if (value.engine !== undefined) {
363
+ if (!isRecord(value.engine) ||
364
+ value.engine.package !== KNITTO_PACKAGE ||
365
+ typeof value.engine.version !== "string" ||
366
+ valid(value.engine.version) === null) {
367
+ throw new KnittoError("Template engine must specify an exact knitto semantic version", "TEMPLATE");
368
+ }
369
+ engine = {
370
+ package: KNITTO_PACKAGE,
371
+ version: value.engine.version,
372
+ };
373
+ }
374
+ let release;
375
+ if (value.release !== undefined) {
376
+ if (!isRecord(value.release) ||
377
+ value.release.provider !== "release-please" ||
378
+ typeof value.release.version !== "string" ||
379
+ valid(value.release.version) === null ||
380
+ typeof value.release.tagFormat !== "string" ||
381
+ !value.release.tagFormat.includes("{version}")) {
382
+ throw new KnittoError("Template release must specify a semantic version and tagFormat containing {version}", "TEMPLATE");
383
+ }
384
+ release = {
385
+ provider: "release-please",
386
+ version: value.release.version,
387
+ tagFormat: value.release.tagFormat,
388
+ };
389
+ }
390
+ const prompts = Array.isArray(value.prompts)
391
+ ? value.prompts.map((prompt) => {
392
+ if (!isRecord(prompt) ||
393
+ typeof prompt.path !== "string" ||
394
+ !/^(metadata|variables)\.[^.]+$/.test(prompt.path) ||
395
+ typeof prompt.message !== "string" ||
396
+ (prompt.when !== undefined && typeof prompt.when !== "string") ||
397
+ !["text", "number", "confirm", "select"].includes(String(prompt.type))) {
398
+ throw new KnittoError("Template contains an invalid onboarding prompt", "TEMPLATE");
399
+ }
400
+ const defaultValue = typeof prompt.default === "string" ||
401
+ typeof prompt.default === "number" ||
402
+ typeof prompt.default === "boolean"
403
+ ? prompt.default
404
+ : undefined;
405
+ if (prompt.type === "select") {
406
+ if (!Array.isArray(prompt.choices) ||
407
+ !prompt.choices.every((choice) => isRecord(choice) &&
408
+ typeof choice.value === "string" &&
409
+ (choice.label === undefined ||
410
+ typeof choice.label === "string"))) {
411
+ throw new KnittoError(`Select prompt ${prompt.path} must define string choices`, "TEMPLATE");
412
+ }
413
+ return {
414
+ path: prompt.path,
415
+ message: prompt.message,
416
+ type: "select",
417
+ choices: prompt.choices.map((choice) => ({
418
+ value: String(choice.value),
419
+ ...(typeof choice.label === "string"
420
+ ? { label: String(choice.label) }
421
+ : {}),
422
+ })),
423
+ ...(typeof prompt.description === "string"
424
+ ? { description: prompt.description }
425
+ : {}),
426
+ ...(typeof prompt.required === "boolean"
427
+ ? { required: prompt.required }
428
+ : {}),
429
+ ...(defaultValue !== undefined ? { default: defaultValue } : {}),
430
+ ...(typeof prompt.when === "string" ? { when: prompt.when } : {}),
431
+ };
432
+ }
433
+ return {
434
+ path: prompt.path,
435
+ message: prompt.message,
436
+ type: prompt.type,
437
+ ...(typeof prompt.description === "string"
438
+ ? { description: prompt.description }
439
+ : {}),
440
+ ...(typeof prompt.required === "boolean"
441
+ ? { required: prompt.required }
442
+ : {}),
443
+ ...(defaultValue !== undefined ? { default: defaultValue } : {}),
444
+ ...(typeof prompt.when === "string" ? { when: prompt.when } : {}),
445
+ };
446
+ })
447
+ : undefined;
448
+ let partials;
449
+ if (value.partials !== undefined) {
450
+ if (!isRecord(value.partials)) {
451
+ throw new KnittoError("Template partials must map names to files", "TEMPLATE");
452
+ }
453
+ partials = {};
454
+ for (const [name, file] of Object.entries(value.partials)) {
455
+ if (typeof file !== "string") {
456
+ throw new KnittoError(`Template partial ${name} must reference a file`, "TEMPLATE");
457
+ }
458
+ partials[name] = file;
459
+ }
460
+ }
461
+ const ids = new Set();
462
+ for (const rule of rules) {
463
+ if (ids.has(rule.id)) {
464
+ throw new KnittoError(`Duplicate template rule ID: ${rule.id}`, "TEMPLATE");
465
+ }
466
+ ids.add(rule.id);
467
+ }
468
+ const promptPaths = new Set();
469
+ for (const prompt of prompts ?? []) {
470
+ if (promptPaths.has(prompt.path)) {
471
+ throw new KnittoError(`Duplicate template prompt path: ${prompt.path}`, "TEMPLATE");
472
+ }
473
+ promptPaths.add(prompt.path);
474
+ }
475
+ return {
476
+ schemaVersion: 1,
477
+ name: value.name,
478
+ ...(engine ? { engine } : {}),
479
+ ...(release ? { release } : {}),
480
+ rules,
481
+ ...(checks ? { checks } : {}),
482
+ ...(hooks ? { hooks } : {}),
483
+ ...(Array.isArray(value.extends) &&
484
+ value.extends.every((entry) => typeof entry === "string")
485
+ ? { extends: value.extends }
486
+ : {}),
487
+ ...(Array.isArray(value.inputs) &&
488
+ value.inputs.every((input) => typeof input === "string")
489
+ ? { inputs: value.inputs }
490
+ : {}),
491
+ ...(partials ? { partials } : {}),
492
+ ...(isRecord(value.variables) ? { variables: value.variables } : {}),
493
+ ...(prompts ? { prompts } : {}),
494
+ };
495
+ }
496
+ export async function loadProjectConfig(projectRoot) {
497
+ return validateProjectConfig(await readJson(path.join(projectRoot, CONFIG_FILE), "project configuration"));
498
+ }
499
+ export async function loadProjectLock(projectRoot) {
500
+ const value = await readJson(path.join(projectRoot, LOCK_FILE), "project lock");
501
+ if (!isRecord(value) ||
502
+ value.schemaVersion !== 1 ||
503
+ typeof value.digest !== "string" ||
504
+ !/^sha256:[a-f0-9]{64}$/.test(value.digest) ||
505
+ !("source" in value) ||
506
+ !isRecord(value.provenance) ||
507
+ (value.provenance.sourceType !== "local" &&
508
+ value.provenance.sourceType !== "http" &&
509
+ value.provenance.sourceType !== "git") ||
510
+ typeof value.provenance.locator !== "string" ||
511
+ value.templateSchemaVersion !== 1 ||
512
+ typeof value.resolvedAt !== "string") {
513
+ throw new KnittoError("Invalid project lock", "CONFIG");
514
+ }
515
+ const source = validateSource(value.source);
516
+ let engine;
517
+ if (value.engine !== undefined) {
518
+ if (!isRecord(value.engine) ||
519
+ value.engine.package !== KNITTO_PACKAGE ||
520
+ typeof value.engine.version !== "string" ||
521
+ valid(value.engine.version) === null) {
522
+ throw new KnittoError("Invalid project lock engine", "CONFIG");
523
+ }
524
+ engine = {
525
+ package: KNITTO_PACKAGE,
526
+ version: value.engine.version,
527
+ };
528
+ }
529
+ return {
530
+ schemaVersion: 1,
531
+ digest: value.digest,
532
+ source,
533
+ ...(engine ? { engine } : {}),
534
+ provenance: {
535
+ sourceType: value.provenance.sourceType,
536
+ locator: value.provenance.locator,
537
+ ...(typeof value.provenance.templatePath === "string"
538
+ ? { templatePath: value.provenance.templatePath }
539
+ : {}),
540
+ ...(typeof value.provenance.revision === "string"
541
+ ? { revision: value.provenance.revision }
542
+ : {}),
543
+ ...(typeof value.provenance.etag === "string"
544
+ ? { etag: value.provenance.etag }
545
+ : {}),
546
+ ...(typeof value.provenance.lastModified === "string"
547
+ ? { lastModified: value.provenance.lastModified }
548
+ : {}),
549
+ },
550
+ templateSchemaVersion: 1,
551
+ resolvedAt: value.resolvedAt,
552
+ };
553
+ }
554
+ export async function writeProjectConfig(projectRoot, config) {
555
+ await writeFile(path.join(projectRoot, CONFIG_FILE), `${JSON.stringify(config, null, 2)}\n`, { flag: "wx" });
556
+ }
557
+ export async function saveProjectConfig(projectRoot, config) {
558
+ const destination = path.join(projectRoot, CONFIG_FILE);
559
+ const temporary = `${destination}.tmp-${process.pid}-${Date.now()}`;
560
+ try {
561
+ await writeFile(temporary, `${JSON.stringify(config, null, 2)}\n`);
562
+ await rename(temporary, destination);
563
+ }
564
+ finally {
565
+ await rm(temporary, { force: true });
566
+ }
567
+ }
568
+ export async function writeProjectLock(projectRoot, lock, options = {}) {
569
+ const destination = path.join(projectRoot, LOCK_FILE);
570
+ if (options.exclusive) {
571
+ await writeFile(destination, `${JSON.stringify(lock, null, 2)}\n`, {
572
+ flag: "wx",
573
+ });
574
+ return;
575
+ }
576
+ const temporary = `${destination}.tmp-${process.pid}-${Date.now()}`;
577
+ try {
578
+ await writeFile(temporary, `${JSON.stringify(lock, null, 2)}\n`);
579
+ await rename(temporary, destination);
580
+ }
581
+ finally {
582
+ await rm(temporary, { force: true });
583
+ }
584
+ }
585
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ProjectUnit, RenderContext, TemplateManifest } from "../types.js";
2
+ export declare function buildContext(unit: ProjectUnit, manifest: TemplateManifest): Promise<RenderContext>;