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.
- package/LICENSE +21 -0
- package/README.md +869 -0
- package/dist/src/checks/run.d.ts +3 -0
- package/dist/src/checks/run.js +173 -0
- package/dist/src/checks/run.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +406 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config.d.ts +11 -0
- package/dist/src/config.js +585 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/context/build.d.ts +2 -0
- package/dist/src/context/build.js +147 -0
- package/dist/src/context/build.js.map +1 -0
- package/dist/src/context/render.d.ts +7 -0
- package/dist/src/context/render.js +74 -0
- package/dist/src/context/render.js.map +1 -0
- package/dist/src/engine/apply.d.ts +2 -0
- package/dist/src/engine/apply.js +96 -0
- package/dist/src/engine/apply.js.map +1 -0
- package/dist/src/engine/diff.d.ts +2 -0
- package/dist/src/engine/diff.js +100 -0
- package/dist/src/engine/diff.js.map +1 -0
- package/dist/src/engine/plan.d.ts +2 -0
- package/dist/src/engine/plan.js +259 -0
- package/dist/src/engine/plan.js.map +1 -0
- package/dist/src/errors.d.ts +14 -0
- package/dist/src/errors.js +31 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/filesystem/paths.d.ts +2 -0
- package/dist/src/filesystem/paths.js +47 -0
- package/dist/src/filesystem/paths.js.map +1 -0
- package/dist/src/hooks/run.d.ts +10 -0
- package/dist/src/hooks/run.js +105 -0
- package/dist/src/hooks/run.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lock.d.ts +2 -0
- package/dist/src/lock.js +16 -0
- package/dist/src/lock.js.map +1 -0
- package/dist/src/onboarding.d.ts +26 -0
- package/dist/src/onboarding.js +212 -0
- package/dist/src/onboarding.js.map +1 -0
- package/dist/src/parsers/index.d.ts +18 -0
- package/dist/src/parsers/index.js +194 -0
- package/dist/src/parsers/index.js.map +1 -0
- package/dist/src/parsers/json.d.ts +17 -0
- package/dist/src/parsers/json.js +214 -0
- package/dist/src/parsers/json.js.map +1 -0
- package/dist/src/parsers/merge.d.ts +1 -0
- package/dist/src/parsers/merge.js +17 -0
- package/dist/src/parsers/merge.js.map +1 -0
- package/dist/src/project/discover.d.ts +2 -0
- package/dist/src/project/discover.js +144 -0
- package/dist/src/project/discover.js.map +1 -0
- package/dist/src/rules/json-pointer.d.ts +3 -0
- package/dist/src/rules/json-pointer.js +114 -0
- package/dist/src/rules/json-pointer.js.map +1 -0
- package/dist/src/snapshots/canonical.d.ts +11 -0
- package/dist/src/snapshots/canonical.js +150 -0
- package/dist/src/snapshots/canonical.js.map +1 -0
- package/dist/src/sources/process.d.ts +3 -0
- package/dist/src/sources/process.js +28 -0
- package/dist/src/sources/process.js.map +1 -0
- package/dist/src/sources/resolve.d.ts +3 -0
- package/dist/src/sources/resolve.js +144 -0
- package/dist/src/sources/resolve.js.map +1 -0
- package/dist/src/template/init.d.ts +1 -0
- package/dist/src/template/init.js +62 -0
- package/dist/src/template/init.js.map +1 -0
- package/dist/src/template/manifest.d.ts +2 -0
- package/dist/src/template/manifest.js +80 -0
- package/dist/src/template/manifest.js.map +1 -0
- package/dist/src/template/release.d.ts +3 -0
- package/dist/src/template/release.js +8 -0
- package/dist/src/template/release.js.map +1 -0
- package/dist/src/template/validate.d.ts +2 -0
- package/dist/src/template/validate.js +62 -0
- package/dist/src/template/validate.js.map +1 -0
- package/dist/src/types.d.ts +242 -0
- package/dist/src/types.js +4 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/version.d.ts +2 -0
- package/dist/src/version.js +3 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
export declare const CONFIG_FILE = ".knitto.json";
|
|
2
|
+
export declare const LOCK_FILE = ".knitto.lock";
|
|
3
|
+
export declare const TEMPLATE_MANIFEST = "template.json";
|
|
4
|
+
export type SourceConfig = {
|
|
5
|
+
type: "local";
|
|
6
|
+
path: string;
|
|
7
|
+
} | {
|
|
8
|
+
type: "http";
|
|
9
|
+
url: string;
|
|
10
|
+
path?: string;
|
|
11
|
+
} | {
|
|
12
|
+
type: "git";
|
|
13
|
+
url: string;
|
|
14
|
+
path?: string;
|
|
15
|
+
ref?: string;
|
|
16
|
+
};
|
|
17
|
+
export interface ProjectConfig {
|
|
18
|
+
source: SourceConfig;
|
|
19
|
+
engine?: {
|
|
20
|
+
package: "knitto";
|
|
21
|
+
version: string;
|
|
22
|
+
};
|
|
23
|
+
metadata?: Record<string, unknown>;
|
|
24
|
+
variables?: Record<string, unknown>;
|
|
25
|
+
exclude?: {
|
|
26
|
+
rules?: string[];
|
|
27
|
+
checks?: string[];
|
|
28
|
+
pointers?: Record<string, string[]>;
|
|
29
|
+
};
|
|
30
|
+
overrides?: Record<string, Record<string, unknown>>;
|
|
31
|
+
trust?: {
|
|
32
|
+
hooks?: string[];
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
interface BaseCheck {
|
|
36
|
+
id: string;
|
|
37
|
+
scope?: "root" | "workspace" | "all";
|
|
38
|
+
when?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface RequiredPackagesCheck extends BaseCheck {
|
|
41
|
+
type: "required-packages";
|
|
42
|
+
packages: Record<string, string[]>;
|
|
43
|
+
}
|
|
44
|
+
export interface UnwantedPackagesCheck extends BaseCheck {
|
|
45
|
+
type: "unwanted-packages";
|
|
46
|
+
packages: string[];
|
|
47
|
+
allowed?: string[];
|
|
48
|
+
}
|
|
49
|
+
export interface FileRegexCheck extends BaseCheck {
|
|
50
|
+
type: "file-regex";
|
|
51
|
+
path: string;
|
|
52
|
+
pattern: string;
|
|
53
|
+
flags?: string;
|
|
54
|
+
mustMatch?: boolean;
|
|
55
|
+
message?: string;
|
|
56
|
+
solution?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface EnginesCheck extends BaseCheck {
|
|
59
|
+
type: "engines";
|
|
60
|
+
omit?: string[];
|
|
61
|
+
}
|
|
62
|
+
export type TemplateCheck = RequiredPackagesCheck | UnwantedPackagesCheck | FileRegexCheck | EnginesCheck;
|
|
63
|
+
interface BaseRule {
|
|
64
|
+
id: string;
|
|
65
|
+
destination: string;
|
|
66
|
+
when?: string;
|
|
67
|
+
scope?: "root" | "workspace" | "all";
|
|
68
|
+
target?: "project" | "root";
|
|
69
|
+
}
|
|
70
|
+
export interface FileRule extends BaseRule {
|
|
71
|
+
type: "file";
|
|
72
|
+
template: string;
|
|
73
|
+
mode?: number;
|
|
74
|
+
}
|
|
75
|
+
export interface JsonRule extends BaseRule {
|
|
76
|
+
type: "json";
|
|
77
|
+
template: string;
|
|
78
|
+
schema?: string;
|
|
79
|
+
pointers?: string[];
|
|
80
|
+
exact?: string[];
|
|
81
|
+
indent?: number;
|
|
82
|
+
}
|
|
83
|
+
export interface DeleteRule extends BaseRule {
|
|
84
|
+
type: "delete";
|
|
85
|
+
glob?: boolean;
|
|
86
|
+
}
|
|
87
|
+
export type ParserName = "text" | "json" | "json-merge" | "package-json" | "yaml" | "yaml-merge" | "ini" | "ini-merge" | "hook";
|
|
88
|
+
export interface ContentRule extends BaseRule {
|
|
89
|
+
type: "content";
|
|
90
|
+
template: string;
|
|
91
|
+
parser: ParserName;
|
|
92
|
+
hook?: string;
|
|
93
|
+
schema?: string;
|
|
94
|
+
pointers?: string[];
|
|
95
|
+
exact?: string[];
|
|
96
|
+
indent?: number;
|
|
97
|
+
mode?: number;
|
|
98
|
+
}
|
|
99
|
+
export type TemplateRule = FileRule | JsonRule | ContentRule | DeleteRule;
|
|
100
|
+
export interface TemplateManifest {
|
|
101
|
+
schemaVersion: 1;
|
|
102
|
+
name: string;
|
|
103
|
+
engine?: {
|
|
104
|
+
package: "knitto";
|
|
105
|
+
version: string;
|
|
106
|
+
};
|
|
107
|
+
release?: {
|
|
108
|
+
provider: "release-please";
|
|
109
|
+
version: string;
|
|
110
|
+
tagFormat: string;
|
|
111
|
+
};
|
|
112
|
+
extends?: string[];
|
|
113
|
+
inputs?: string[];
|
|
114
|
+
partials?: Record<string, string>;
|
|
115
|
+
variables?: Record<string, unknown>;
|
|
116
|
+
prompts?: TemplatePrompt[];
|
|
117
|
+
rules: TemplateRule[];
|
|
118
|
+
checks?: TemplateCheck[];
|
|
119
|
+
hooks?: TemplateHook[];
|
|
120
|
+
}
|
|
121
|
+
interface BaseTemplatePrompt {
|
|
122
|
+
path: `metadata.${string}` | `variables.${string}`;
|
|
123
|
+
message: string;
|
|
124
|
+
description?: string;
|
|
125
|
+
required?: boolean;
|
|
126
|
+
default?: string | number | boolean;
|
|
127
|
+
when?: string;
|
|
128
|
+
}
|
|
129
|
+
export type TemplatePrompt = (BaseTemplatePrompt & {
|
|
130
|
+
type: "text" | "number" | "confirm";
|
|
131
|
+
}) | (BaseTemplatePrompt & {
|
|
132
|
+
type: "select";
|
|
133
|
+
choices: Array<{
|
|
134
|
+
value: string;
|
|
135
|
+
label?: string;
|
|
136
|
+
}>;
|
|
137
|
+
});
|
|
138
|
+
export interface TemplateHook {
|
|
139
|
+
id: string;
|
|
140
|
+
kind: "context" | "parser" | "check";
|
|
141
|
+
command: string;
|
|
142
|
+
args?: string[];
|
|
143
|
+
}
|
|
144
|
+
export interface SnapshotProvenance {
|
|
145
|
+
sourceType: SourceConfig["type"];
|
|
146
|
+
locator: string;
|
|
147
|
+
templatePath?: string;
|
|
148
|
+
revision?: string;
|
|
149
|
+
etag?: string;
|
|
150
|
+
lastModified?: string;
|
|
151
|
+
}
|
|
152
|
+
export interface Snapshot {
|
|
153
|
+
digest: string;
|
|
154
|
+
directory: string;
|
|
155
|
+
manifest: TemplateManifest;
|
|
156
|
+
provenance: SnapshotProvenance;
|
|
157
|
+
}
|
|
158
|
+
export interface ProjectLock {
|
|
159
|
+
schemaVersion: 1;
|
|
160
|
+
digest: string;
|
|
161
|
+
source: SourceConfig;
|
|
162
|
+
engine?: {
|
|
163
|
+
package: "knitto";
|
|
164
|
+
version: string;
|
|
165
|
+
};
|
|
166
|
+
provenance: SnapshotProvenance;
|
|
167
|
+
templateSchemaVersion: 1;
|
|
168
|
+
resolvedAt: string;
|
|
169
|
+
}
|
|
170
|
+
export type PlanOperation = {
|
|
171
|
+
type: "write";
|
|
172
|
+
ruleId: string;
|
|
173
|
+
path: string;
|
|
174
|
+
before: string | null;
|
|
175
|
+
after: string;
|
|
176
|
+
beforeDigest: string | null;
|
|
177
|
+
mode?: number;
|
|
178
|
+
jsonPatch?: JsonPatchOperation[];
|
|
179
|
+
} | {
|
|
180
|
+
type: "delete";
|
|
181
|
+
ruleId: string;
|
|
182
|
+
path: string;
|
|
183
|
+
before: string;
|
|
184
|
+
beforeDigest: string;
|
|
185
|
+
};
|
|
186
|
+
export interface ReconciliationPlan {
|
|
187
|
+
projectRoot: string;
|
|
188
|
+
templateDigest: string;
|
|
189
|
+
operations: PlanOperation[];
|
|
190
|
+
checks: CheckResult[];
|
|
191
|
+
excludedRules: string[];
|
|
192
|
+
excludedPointers: Record<string, string[]>;
|
|
193
|
+
}
|
|
194
|
+
export interface CheckResult {
|
|
195
|
+
id: string;
|
|
196
|
+
project: string;
|
|
197
|
+
title: string;
|
|
198
|
+
body: string[];
|
|
199
|
+
solution?: string;
|
|
200
|
+
}
|
|
201
|
+
export interface JsonPatchOperation {
|
|
202
|
+
op: "add" | "remove" | "replace" | "move" | "copy" | "test";
|
|
203
|
+
path: string;
|
|
204
|
+
from?: string;
|
|
205
|
+
value?: unknown;
|
|
206
|
+
}
|
|
207
|
+
export interface RenderContext {
|
|
208
|
+
template?: {
|
|
209
|
+
name: string;
|
|
210
|
+
engine?: {
|
|
211
|
+
package: "knitto";
|
|
212
|
+
version: string;
|
|
213
|
+
};
|
|
214
|
+
release?: {
|
|
215
|
+
provider: "release-please";
|
|
216
|
+
version: string;
|
|
217
|
+
tag?: string;
|
|
218
|
+
};
|
|
219
|
+
};
|
|
220
|
+
project: {
|
|
221
|
+
path: string;
|
|
222
|
+
name: string;
|
|
223
|
+
};
|
|
224
|
+
files: Record<string, {
|
|
225
|
+
text: string;
|
|
226
|
+
json?: unknown;
|
|
227
|
+
}>;
|
|
228
|
+
metadata: Record<string, unknown>;
|
|
229
|
+
variables: Record<string, unknown>;
|
|
230
|
+
pkg: Record<string, unknown>;
|
|
231
|
+
derived: Record<string, unknown>;
|
|
232
|
+
}
|
|
233
|
+
export interface ProjectUnit {
|
|
234
|
+
repositoryRoot: string;
|
|
235
|
+
path: string;
|
|
236
|
+
relativePath: string;
|
|
237
|
+
packageJson: Record<string, unknown>;
|
|
238
|
+
config: ProjectConfig;
|
|
239
|
+
isRoot: boolean;
|
|
240
|
+
workspacePaths: string[];
|
|
241
|
+
}
|
|
242
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC;AAC1C,MAAM,CAAC,MAAM,SAAS,GAAG,cAAc,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,2BAA2B"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "knitto",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Unix-first, template-aware filesystem reconciler",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/reggi/knitto.git"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"packageManager": "npm@12.0.2",
|
|
11
|
+
"bin": {
|
|
12
|
+
"knitto": "dist/src/cli.js"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc -p tsconfig.json",
|
|
22
|
+
"check": "tsc -p tsconfig.json --noEmit",
|
|
23
|
+
"test": "node --test --import tsx \"test/**/*.test.ts\"",
|
|
24
|
+
"test:integration": "node --test --import tsx test/cli-usage.test.ts",
|
|
25
|
+
"test:integration:dist": "KNITTO_CLI_ENTRY=dist/src/cli.js node --test --import tsx test/cli-usage.test.ts"
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=22"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"ajv": "^8.17.1",
|
|
32
|
+
"commander": "^14.0.0",
|
|
33
|
+
"diff": "^8.0.2",
|
|
34
|
+
"fast-json-patch": "^3.1.1",
|
|
35
|
+
"glob": "^13.0.0",
|
|
36
|
+
"handlebars": "^4.7.8",
|
|
37
|
+
"ini": "^6.0.0",
|
|
38
|
+
"minimatch": "^10.0.3",
|
|
39
|
+
"semver": "^7.7.2",
|
|
40
|
+
"yaml": "^2.8.1",
|
|
41
|
+
"tar": "^7.5.1"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/ini": "^4.1.1",
|
|
45
|
+
"@types/node": "^24.3.0",
|
|
46
|
+
"@types/semver": "^7.7.0",
|
|
47
|
+
"tsx": "^4.20.5",
|
|
48
|
+
"typescript": "^5.9.2"
|
|
49
|
+
},
|
|
50
|
+
"license": "MIT"
|
|
51
|
+
}
|