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,212 @@
1
+ import path from "node:path";
2
+ import { stdin, stdout } from "node:process";
3
+ import { createInterface } from "node:readline/promises";
4
+ import { renderTemplate } from "./context/render.js";
5
+ import { KnittoError } from "./errors.js";
6
+ function parseBoolean(value, pathValue) {
7
+ const normalized = value.trim().toLowerCase();
8
+ if (["true", "yes", "y", "1"].includes(normalized))
9
+ return true;
10
+ if (["false", "no", "n", "0"].includes(normalized))
11
+ return false;
12
+ throw new KnittoError(`Template input ${pathValue} expects true or false`, "USAGE");
13
+ }
14
+ function parseValue(prompt, value) {
15
+ if (prompt.type === "number") {
16
+ const number = Number(value);
17
+ if (!Number.isFinite(number)) {
18
+ throw new KnittoError(`Template input ${prompt.path} expects a number`, "USAGE");
19
+ }
20
+ return number;
21
+ }
22
+ if (prompt.type === "confirm")
23
+ return parseBoolean(value, prompt.path);
24
+ if (prompt.type === "select" &&
25
+ !prompt.choices.some((choice) => choice.value === value)) {
26
+ throw new KnittoError(`Template input ${prompt.path} must be one of: ${prompt.choices
27
+ .map((choice) => choice.value)
28
+ .join(", ")}`, "USAGE");
29
+ }
30
+ return value;
31
+ }
32
+ function configValue(config, pathValue) {
33
+ const [section, name] = pathValue.split(".", 2);
34
+ if (!name)
35
+ return undefined;
36
+ if (section === "metadata")
37
+ return config.metadata?.[name];
38
+ if (section === "variables")
39
+ return config.variables?.[name];
40
+ return undefined;
41
+ }
42
+ function setConfigValue(config, pathValue, value) {
43
+ const [section, name] = pathValue.split(".", 2);
44
+ if (!name) {
45
+ throw new KnittoError(`Template input path is missing a field name: ${pathValue}`, "TEMPLATE");
46
+ }
47
+ if (section === "metadata") {
48
+ config.metadata = { ...(config.metadata ?? {}), [name]: value };
49
+ return;
50
+ }
51
+ if (section === "variables") {
52
+ config.variables = { ...(config.variables ?? {}), [name]: value };
53
+ return;
54
+ }
55
+ throw new KnittoError(`Template input path must begin with metadata. or variables.: ${pathValue}`, "TEMPLATE");
56
+ }
57
+ function renderDefault(prompt, context) {
58
+ if (prompt.default === undefined)
59
+ return undefined;
60
+ if (typeof prompt.default !== "string")
61
+ return String(prompt.default);
62
+ return renderTemplate(prompt.default, context, `${prompt.path}.default`);
63
+ }
64
+ function inputContext(root, config, manifest) {
65
+ return {
66
+ project: {
67
+ path: root,
68
+ name: path.basename(root),
69
+ },
70
+ files: {},
71
+ metadata: config.metadata ?? {},
72
+ variables: {
73
+ ...(manifest.variables ?? {}),
74
+ ...(config.variables ?? {}),
75
+ },
76
+ pkg: {},
77
+ derived: {},
78
+ };
79
+ }
80
+ function promptEnabled(prompt, context) {
81
+ if (!prompt.when)
82
+ return true;
83
+ const result = renderTemplate(prompt.when, context, `${prompt.path}.when`)
84
+ .trim()
85
+ .toLowerCase();
86
+ return result !== "" && result !== "false" && result !== "0";
87
+ }
88
+ function promptLabel(prompt, defaultValue) {
89
+ const choices = prompt.type === "select"
90
+ ? ` (${prompt.choices
91
+ .map((choice) => choice.label ? `${choice.label}=${choice.value}` : choice.value)
92
+ .join(", ")})`
93
+ : "";
94
+ const suffix = defaultValue === undefined || defaultValue === ""
95
+ ? ""
96
+ : ` [${defaultValue}]`;
97
+ return `${prompt.message}${choices}${suffix}: `;
98
+ }
99
+ export function parsePromptAssignments(values) {
100
+ const assignments = {};
101
+ for (const value of values) {
102
+ const separator = value.indexOf("=");
103
+ if (separator <= 0) {
104
+ throw new KnittoError(`Invalid --set value; expected path=value: ${value}`, "USAGE");
105
+ }
106
+ assignments[value.slice(0, separator)] = value.slice(separator + 1);
107
+ }
108
+ return assignments;
109
+ }
110
+ export function describeTemplateInputs(root, config, manifest) {
111
+ const context = inputContext(root, config, manifest);
112
+ const inputs = (manifest.prompts ?? [])
113
+ .filter((prompt) => promptEnabled(prompt, context))
114
+ .map((prompt) => {
115
+ const value = configValue(config, prompt.path);
116
+ const configured = value !== undefined;
117
+ const defaultValue = renderDefault(prompt, context);
118
+ return {
119
+ path: prompt.path,
120
+ type: prompt.type,
121
+ message: prompt.message,
122
+ ...(prompt.description ? { description: prompt.description } : {}),
123
+ required: prompt.required ?? false,
124
+ configured,
125
+ willPrompt: !configured,
126
+ ...(configured ? { value } : {}),
127
+ ...(defaultValue !== undefined ? { default: defaultValue } : {}),
128
+ ...(prompt.type === "select" ? { choices: prompt.choices } : {}),
129
+ };
130
+ });
131
+ return {
132
+ inputs,
133
+ willPrompt: inputs.some((input) => input.willPrompt),
134
+ missingRequired: inputs
135
+ .filter((input) => input.required && !input.configured && input.default === undefined)
136
+ .map((input) => input.path),
137
+ };
138
+ }
139
+ export function assertCiTemplateInputsConfigured(root, config, manifest, supplied, ci) {
140
+ if (!ci)
141
+ return;
142
+ const pending = describeTemplateInputs(root, config, manifest).inputs
143
+ .filter((input) => !input.configured && !(input.path in supplied))
144
+ .map((input) => input.path);
145
+ if (pending.length === 0)
146
+ return;
147
+ const manualFlags = pending
148
+ .map((inputPath) => `--set '${inputPath}=<value>'`)
149
+ .join(" ");
150
+ throw new KnittoError([
151
+ `CI cannot collect template inputs that require a human decision: ${pending.join(", ")}`,
152
+ "Create a pull request that populates these fields in .knitto.json before automated reconciliation continues.",
153
+ "",
154
+ "From the repository root, collect and save them interactively:",
155
+ " knitto plan --update",
156
+ "",
157
+ "Or provide every value explicitly without prompting:",
158
+ ` knitto plan --update ${manualFlags}`,
159
+ "",
160
+ "Commit the resulting .knitto.json change in that pull request, then rerun CI.",
161
+ "Use knitto inputs --update --json to inspect the required values programmatically.",
162
+ ].join("\n"), "CONFIG");
163
+ }
164
+ export async function resolveTemplateInputs(root, originalConfig, manifest, supplied) {
165
+ const prompts = manifest.prompts ?? [];
166
+ const known = new Set(prompts.map((prompt) => prompt.path));
167
+ for (const pathValue of Object.keys(supplied)) {
168
+ if (!known.has(pathValue)) {
169
+ throw new KnittoError(`Unknown template input supplied with --set: ${pathValue}`, "USAGE");
170
+ }
171
+ }
172
+ const config = structuredClone(originalConfig);
173
+ const context = () => inputContext(root, config, manifest);
174
+ const terminal = stdin.isTTY
175
+ ? createInterface({ input: stdin, output: stdout })
176
+ : null;
177
+ let changed = false;
178
+ try {
179
+ for (const prompt of prompts) {
180
+ if (!promptEnabled(prompt, context()))
181
+ continue;
182
+ const existing = configValue(config, prompt.path);
183
+ if (existing !== undefined && !(prompt.path in supplied))
184
+ continue;
185
+ const defaultValue = renderDefault(prompt, context());
186
+ let raw = supplied[prompt.path];
187
+ if (raw === undefined && terminal) {
188
+ if (prompt.description)
189
+ stdout.write(`${prompt.description}\n`);
190
+ raw = (await terminal.question(promptLabel(prompt, defaultValue))).trim();
191
+ }
192
+ if (raw === undefined || raw === "")
193
+ raw = defaultValue;
194
+ if (raw === undefined || raw === "") {
195
+ if (prompt.required) {
196
+ throw new KnittoError(`Template input ${prompt.path} is required; run interactively or pass --set ${prompt.path}=value`, "USAGE");
197
+ }
198
+ continue;
199
+ }
200
+ const parsed = parseValue(prompt, raw);
201
+ if (!Object.is(existing, parsed)) {
202
+ setConfigValue(config, prompt.path, parsed);
203
+ changed = true;
204
+ }
205
+ }
206
+ }
207
+ finally {
208
+ terminal?.close();
209
+ }
210
+ return { config, changed };
211
+ }
212
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/onboarding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { JsonPatchOperation, ParserName } from "../types.js";
2
+ interface PrepareOptions {
3
+ parser: ParserName;
4
+ rendered: string;
5
+ current: string | null;
6
+ pointers?: string[];
7
+ excludedPointers?: string[];
8
+ overrides?: Record<string, unknown>;
9
+ indent?: number;
10
+ schema?: unknown;
11
+ exactPointers?: string[];
12
+ }
13
+ export interface PreparedContent {
14
+ contents: string;
15
+ jsonPatch?: JsonPatchOperation[];
16
+ }
17
+ export declare function prepareContent(options: PrepareOptions): PreparedContent;
18
+ export {};
@@ -0,0 +1,194 @@
1
+ import { parse as parseIni, stringify as stringifyIni } from "ini";
2
+ import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
3
+ import { KnittoError } from "../errors.js";
4
+ import { prepareJson } from "./json.js";
5
+ import { DELETE_SENTINEL } from "../context/render.js";
6
+ import { deletePointer, getPointer, setPointer } from "../rules/json-pointer.js";
7
+ import { mergeDocuments } from "./merge.js";
8
+ function parseJson(value, label) {
9
+ try {
10
+ return JSON.parse(value);
11
+ }
12
+ catch (error) {
13
+ throw new KnittoError(`${label} is not valid JSON`, "TEMPLATE", {
14
+ cause: error,
15
+ });
16
+ }
17
+ }
18
+ function restoreExcluded(prepared, target, pointers) {
19
+ let result = prepared;
20
+ for (const pointer of pointers) {
21
+ const existing = getPointer(target, pointer);
22
+ result =
23
+ existing === undefined
24
+ ? deletePointer(result, pointer)
25
+ : setPointer(result, pointer, existing);
26
+ }
27
+ return result;
28
+ }
29
+ function applyOverrides(prepared, overrides) {
30
+ let result = prepared;
31
+ for (const [pointer, value] of Object.entries(overrides)) {
32
+ result = setPointer(result, pointer, value);
33
+ }
34
+ return result;
35
+ }
36
+ function prepareStructured(source, target, merge, pointers, excludedPointers, overrides) {
37
+ let prepared;
38
+ if (pointers) {
39
+ prepared = target;
40
+ for (const pointer of pointers) {
41
+ if (excludedPointers.includes(pointer))
42
+ continue;
43
+ const value = pointer in overrides ? overrides[pointer] : getPointer(source, pointer);
44
+ if (value === undefined) {
45
+ throw new KnittoError(`Rendered template does not define managed pointer ${pointer}`, "TEMPLATE");
46
+ }
47
+ prepared =
48
+ value === DELETE_SENTINEL
49
+ ? deletePointer(prepared, pointer)
50
+ : setPointer(prepared, pointer, value);
51
+ }
52
+ return prepared;
53
+ }
54
+ prepared = merge ? mergeDocuments(target, source) : source;
55
+ prepared = restoreExcluded(prepared, target, excludedPointers);
56
+ return applyOverrides(prepared, overrides);
57
+ }
58
+ function packageKeyOrder(value) {
59
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
60
+ return value;
61
+ }
62
+ const packageJson = value;
63
+ const preferred = [
64
+ "name",
65
+ "version",
66
+ "private",
67
+ "description",
68
+ "keywords",
69
+ "homepage",
70
+ "bugs",
71
+ "repository",
72
+ "funding",
73
+ "license",
74
+ "author",
75
+ "contributors",
76
+ "files",
77
+ "type",
78
+ "main",
79
+ "module",
80
+ "types",
81
+ "exports",
82
+ "bin",
83
+ "scripts",
84
+ "prettier",
85
+ "dependencies",
86
+ "devDependencies",
87
+ "peerDependencies",
88
+ "peerDependenciesMeta",
89
+ "optionalDependencies",
90
+ "engines",
91
+ "os",
92
+ "cpu",
93
+ "publishConfig",
94
+ "workspaces",
95
+ ];
96
+ const ordered = {};
97
+ for (const key of preferred) {
98
+ if (key in packageJson)
99
+ ordered[key] = packageJson[key];
100
+ }
101
+ for (const key of Object.keys(packageJson).sort()) {
102
+ if (!(key in ordered))
103
+ ordered[key] = packageJson[key];
104
+ }
105
+ return ordered;
106
+ }
107
+ export function prepareContent(options) {
108
+ if (options.parser === "text")
109
+ return { contents: options.rendered };
110
+ const excludedPointers = options.excludedPointers ?? [];
111
+ const overrides = options.overrides ?? {};
112
+ let source;
113
+ let target = {};
114
+ let prepared;
115
+ if (options.parser === "json" ||
116
+ options.parser === "json-merge" ||
117
+ options.parser === "package-json") {
118
+ source = parseJson(options.rendered, "Rendered template");
119
+ if (options.current !== null) {
120
+ target = parseJson(options.current, "Destination file");
121
+ }
122
+ let jsonPatch;
123
+ if (!options.pointers) {
124
+ const reconciliation = prepareJson({
125
+ current: target,
126
+ desired: source,
127
+ ...(options.schema !== undefined ? { schema: options.schema } : {}),
128
+ excludedPointers,
129
+ overrides,
130
+ exactPointers: [
131
+ ...(options.parser === "json" ? [""] : []),
132
+ ...(options.exactPointers ?? []),
133
+ ],
134
+ });
135
+ if (reconciliation.unfixable.length > 0) {
136
+ throw new KnittoError(`JSON Schema violations cannot be reconciled automatically: ${reconciliation.unfixable
137
+ .map((error) => `${error.instancePath || "/"} ${error.message ?? ""}`)
138
+ .join("; ")}`, "TEMPLATE");
139
+ }
140
+ prepared = reconciliation.value;
141
+ jsonPatch = reconciliation.patch;
142
+ }
143
+ else {
144
+ prepared = prepareStructured(source, target, options.parser !== "json", options.pointers, excludedPointers, overrides);
145
+ }
146
+ if (options.parser === "package-json")
147
+ prepared = packageKeyOrder(prepared);
148
+ const trailingNewline = options.current === null || options.current.endsWith("\n") ? "\n" : "";
149
+ return {
150
+ contents: `${JSON.stringify(prepared, null, options.indent ?? 2)}${trailingNewline}`,
151
+ ...(jsonPatch ? { jsonPatch } : {}),
152
+ };
153
+ }
154
+ if (options.parser === "yaml" || options.parser === "yaml-merge") {
155
+ source = parseYaml(options.rendered);
156
+ target = options.current === null ? {} : parseYaml(options.current);
157
+ let jsonPatch;
158
+ if (!options.pointers) {
159
+ const reconciliation = prepareJson({
160
+ current: target,
161
+ desired: source,
162
+ ...(options.schema !== undefined ? { schema: options.schema } : {}),
163
+ excludedPointers,
164
+ overrides,
165
+ exactPointers: [
166
+ ...(options.parser === "yaml" ? [""] : []),
167
+ ...(options.exactPointers ?? []),
168
+ ],
169
+ });
170
+ if (reconciliation.unfixable.length > 0) {
171
+ throw new KnittoError(`JSON Schema violations cannot be reconciled automatically: ${reconciliation.unfixable
172
+ .map((error) => `${error.instancePath || "/"} ${error.message ?? ""}`)
173
+ .join("; ")}`, "TEMPLATE");
174
+ }
175
+ prepared = reconciliation.value;
176
+ jsonPatch = reconciliation.patch;
177
+ }
178
+ else {
179
+ prepared = prepareStructured(source, target, options.parser === "yaml-merge", options.pointers, excludedPointers, overrides);
180
+ }
181
+ return {
182
+ contents: stringifyYaml(prepared, {
183
+ indent: options.indent ?? 2,
184
+ lineWidth: 0,
185
+ }),
186
+ ...(jsonPatch ? { jsonPatch } : {}),
187
+ };
188
+ }
189
+ source = parseIni(options.rendered);
190
+ target = options.current === null ? {} : parseIni(options.current);
191
+ prepared = prepareStructured(source, target, options.parser === "ini-merge", options.pointers, excludedPointers, overrides);
192
+ return { contents: stringifyIni(prepared) };
193
+ }
194
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/parsers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type ErrorObject } from "ajv/dist/2020.js";
2
+ import type { JsonPatchOperation } from "../types.js";
3
+ export interface JsonPrepareOptions {
4
+ current: unknown;
5
+ desired: unknown;
6
+ schema?: unknown;
7
+ excludedPointers?: string[];
8
+ overrides?: Record<string, unknown>;
9
+ exactPointers?: string[];
10
+ }
11
+ export interface JsonPrepareResult {
12
+ value: unknown;
13
+ patch: JsonPatchOperation[];
14
+ violations: ErrorObject[];
15
+ unfixable: ErrorObject[];
16
+ }
17
+ export declare function prepareJson(options: JsonPrepareOptions): JsonPrepareResult;