@aotter/mantle 0.0.11-alpha.63 → 0.0.11-alpha.64
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 +87 -12
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +52 -0
- package/dist/cli.js.map +1 -0
- package/dist/generate.d.ts +2 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +181 -0
- package/dist/generate.js.map +1 -0
- package/dist/skills.d.ts +2 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +80 -0
- package/dist/skills.js.map +1 -0
- package/dist/update.d.ts +2 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +387 -0
- package/dist/update.js.map +1 -0
- package/docs/adr/0001-four-atom-manifest-model.md +6 -7
- package/docs/adr/0007-ai-as-primary-author.md +100 -138
- package/docs/adr/0008-structured-diagnostic-shape.md +79 -99
- package/docs/adr/0009-consumer-supplied-manifests.md +101 -228
- package/docs/adr/0012-views-as-public-rest.md +43 -15
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +43 -17
- package/docs/adr/0018-core-starters-repository-boundary.md +155 -0
- package/docs/adr/README.md +8 -6
- package/docs/cloudflare-low-level-composition.md +94 -0
- package/docs/design-atoms.md +59 -57
- package/docs/design-references/editorial-blog-2026-05-05.md +7 -7
- package/docs/labels.md +1 -1
- package/docs/media-uploads.md +1 -1
- package/docs/release-process.md +156 -523
- package/package.json +9 -6
- package/skills/README.md +20 -16
- package/skills/develop/SKILL.md +4 -4
- package/skills/install/SKILL.md +16 -2
- package/skills/plugin/SKILL.md +1 -1
- package/skills/provision/SKILL.md +1 -1
- package/skills/theme/SKILL.md +12 -10
- package/skills/update/SKILL.md +31 -19
- package/skills/customize-design/SKILL.md +0 -215
- package/skills/extend/SKILL.md +0 -257
package/dist/update.js
ADDED
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, lstatSync, readFileSync, readdirSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { join, posix } from "node:path";
|
|
4
|
+
import { cwd, stderr, stdout } from "node:process";
|
|
5
|
+
import { parseArgs } from "node:util";
|
|
6
|
+
const REPORT_PATH = ".mantle/update-report.json";
|
|
7
|
+
const IGNORE_DIRS = new Set([".git", "node_modules", ".wrangler", ".wrangler-test", "dist"]);
|
|
8
|
+
const IGNORE_FILES = new Set([".mantle/features.json", ".mantle/launch-state.json", REPORT_PATH]);
|
|
9
|
+
export async function runUpdate(rawArgs) {
|
|
10
|
+
let values;
|
|
11
|
+
try {
|
|
12
|
+
({ values } = parseArgs({
|
|
13
|
+
args: [...rawArgs],
|
|
14
|
+
options: {
|
|
15
|
+
ref: { type: "string" },
|
|
16
|
+
"bundle-base-url": { type: "string" },
|
|
17
|
+
help: { type: "boolean", short: "h" },
|
|
18
|
+
},
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
stderr.write(`${message(error)}\n`);
|
|
23
|
+
return 2;
|
|
24
|
+
}
|
|
25
|
+
if (values.help) {
|
|
26
|
+
printHelp();
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
const root = cwd();
|
|
30
|
+
try {
|
|
31
|
+
const launchState = readJson(join(root, ".mantle", "launch-state.json"));
|
|
32
|
+
const features = readJson(join(root, ".mantle", "features.json"));
|
|
33
|
+
const registry = recordField(features, "registry");
|
|
34
|
+
const sourceRef = stringField(launchState, "starter_ref");
|
|
35
|
+
const targetRef = values.ref ?? stringField(registry, "version");
|
|
36
|
+
const bundleBaseUrl = values["bundle-base-url"] ?? stringField(registry, "bundleBaseUrl");
|
|
37
|
+
if (!sourceRef)
|
|
38
|
+
throw new UsageError(".mantle/launch-state.json is missing starter_ref");
|
|
39
|
+
if (!targetRef)
|
|
40
|
+
throw new UsageError("pass --ref or configure registry.version");
|
|
41
|
+
if (!bundleBaseUrl) {
|
|
42
|
+
throw new UsageError("pass --bundle-base-url or configure registry.bundleBaseUrl");
|
|
43
|
+
}
|
|
44
|
+
if (!bundleBaseUrl.includes("{ref}")) {
|
|
45
|
+
throw new UsageError("bundle base URL must contain {ref}");
|
|
46
|
+
}
|
|
47
|
+
const archetype = launchArchetype(launchState, features);
|
|
48
|
+
const sourceBundle = await fetchBundle(bundleBaseUrl, sourceRef, archetype);
|
|
49
|
+
const targetBundle = sourceRef === targetRef
|
|
50
|
+
? sourceBundle
|
|
51
|
+
: await fetchBundle(bundleBaseUrl, targetRef, archetype);
|
|
52
|
+
const timestamp = new Date().toISOString();
|
|
53
|
+
const turnstileSiteKey = optionalStringField(launchState, "turnstile_site_key")
|
|
54
|
+
?? readWranglerStringVar(root, "TURNSTILE_SITE_KEY")
|
|
55
|
+
?? "";
|
|
56
|
+
const source = materializeBundle(sourceBundle, placeholders(launchState, archetype, sourceRef, timestamp, turnstileSiteKey));
|
|
57
|
+
const target = materializeBundle(targetBundle, placeholders(launchState, archetype, targetRef, timestamp, turnstileSiteKey));
|
|
58
|
+
const upstream = compareSnapshots(source, target);
|
|
59
|
+
const local = compareProject(root, source);
|
|
60
|
+
const report = {
|
|
61
|
+
schema_version: 3,
|
|
62
|
+
generated_at: timestamp,
|
|
63
|
+
source_ref: sourceRef,
|
|
64
|
+
target_ref: targetRef,
|
|
65
|
+
bundle_base_url: bundleBaseUrl,
|
|
66
|
+
bundle_version: targetBundle.version ?? null,
|
|
67
|
+
upstream,
|
|
68
|
+
local,
|
|
69
|
+
metadata_migration: metadataMigration(sourceRef, targetRef, bundleBaseUrl, registry),
|
|
70
|
+
next_step: "Port reviewed upstream changes only, then apply the reported metadata migration while preserving all other instance state.",
|
|
71
|
+
};
|
|
72
|
+
writeReport(root, `${JSON.stringify(report, null, 2)}\n`);
|
|
73
|
+
stdout.write(`mantle update report: ${REPORT_PATH}\n`);
|
|
74
|
+
stdout.write(`${sourceRef} → ${targetRef}: ${upstream.counts.differing} changed, `
|
|
75
|
+
+ `${upstream.counts.missing_current} added, ${upstream.counts.removed_upstream} removed; `
|
|
76
|
+
+ `local: ${local.counts.differing} modified, ${local.counts.missing_current} missing, `
|
|
77
|
+
+ `${local.counts.removed_upstream} project-only\n`);
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
stderr.write(`mantle update: ${message(error)}\n`);
|
|
82
|
+
return error instanceof UsageError ? 2 : 1;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function printHelp() {
|
|
86
|
+
stdout.write(`mantle update — compare this site with another provision bundle
|
|
87
|
+
|
|
88
|
+
Usage: mantle update [options]
|
|
89
|
+
|
|
90
|
+
Options:
|
|
91
|
+
--ref <ref> Target immutable starter ref; defaults to registry.version
|
|
92
|
+
--bundle-base-url <url> Bundle root containing {ref}; defaults to registry.bundleBaseUrl
|
|
93
|
+
-h, --help This help
|
|
94
|
+
`);
|
|
95
|
+
}
|
|
96
|
+
async function fetchBundle(baseTemplate, ref, archetype) {
|
|
97
|
+
let lastUrl = "";
|
|
98
|
+
let lastStatus = 404;
|
|
99
|
+
for (const candidate of bundleRefCandidates(ref)) {
|
|
100
|
+
const base = baseTemplate.replaceAll("{ref}", encodeURIComponent(candidate)).replace(/\/+$/, "");
|
|
101
|
+
const url = new URL(`${base}/${encodeURIComponent(archetype)}.json`);
|
|
102
|
+
if (url.protocol !== "https:" && url.protocol !== "http:") {
|
|
103
|
+
throw new Error("bundle base URL must use http or https");
|
|
104
|
+
}
|
|
105
|
+
lastUrl = url.toString();
|
|
106
|
+
const response = await fetch(url, { headers: { accept: "application/json" } });
|
|
107
|
+
lastStatus = response.status;
|
|
108
|
+
if (!response.ok && response.status === 404)
|
|
109
|
+
continue;
|
|
110
|
+
if (!response.ok)
|
|
111
|
+
throw new Error(`failed to fetch ${url}: HTTP ${response.status}`);
|
|
112
|
+
const value = await response.json();
|
|
113
|
+
if (!isRecord(value) || !isStringRecord(value.files)) {
|
|
114
|
+
throw new Error(`invalid provision bundle at ${url}`);
|
|
115
|
+
}
|
|
116
|
+
if (typeof value.archetype === "string" && value.archetype !== archetype) {
|
|
117
|
+
throw new Error(`provision bundle at ${url} is ${value.archetype}, expected ${archetype}`);
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
version: typeof value.version === "string" ? value.version : undefined,
|
|
121
|
+
files: value.files,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
throw new Error(`failed to fetch ${lastUrl}: HTTP ${lastStatus}`);
|
|
125
|
+
}
|
|
126
|
+
function bundleRefCandidates(ref) {
|
|
127
|
+
return /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(ref) ? [ref, `v${ref}`] : [ref];
|
|
128
|
+
}
|
|
129
|
+
function materializeBundle(bundle, values) {
|
|
130
|
+
const files = new Map();
|
|
131
|
+
for (const [sourcePath, source] of Object.entries(bundle.files).sort(([a], [b]) => a.localeCompare(b))) {
|
|
132
|
+
const path = safeBundlePath(sourcePath);
|
|
133
|
+
if (files.has(path))
|
|
134
|
+
throw new Error(`duplicate provision bundle path: ${path}`);
|
|
135
|
+
let text = substitute(source, values);
|
|
136
|
+
if (path === "wrangler.toml")
|
|
137
|
+
text = materializeLegacyWranglerToml(text, values);
|
|
138
|
+
files.set(path, text);
|
|
139
|
+
}
|
|
140
|
+
return files;
|
|
141
|
+
}
|
|
142
|
+
function safeBundlePath(source) {
|
|
143
|
+
const slashPath = source.replaceAll("\\", "/");
|
|
144
|
+
if (/^(?:\/|[A-Za-z]:\/)/.test(slashPath) || slashPath.split("/").includes("..")) {
|
|
145
|
+
throw new Error(`bundle path escapes project root: ${source}`);
|
|
146
|
+
}
|
|
147
|
+
const path = posix.normalize(slashPath.replace(/\.template$/, ""));
|
|
148
|
+
if (path === "." || path.startsWith("../")) {
|
|
149
|
+
throw new Error(`bundle path escapes project root: ${source}`);
|
|
150
|
+
}
|
|
151
|
+
return path;
|
|
152
|
+
}
|
|
153
|
+
function substitute(source, values) {
|
|
154
|
+
return source.replace(/\{\{([A-Z_][A-Z0-9_]*)\}\}/g, (token, key) => {
|
|
155
|
+
const value = values[key];
|
|
156
|
+
if (value === undefined)
|
|
157
|
+
throw new Error(`unknown provision placeholder ${token}`);
|
|
158
|
+
return value;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function materializeLegacyWranglerToml(text, values) {
|
|
162
|
+
const envStart = text.search(/\n\[env\./);
|
|
163
|
+
const tail = envStart === -1 ? "" : text.slice(envStart);
|
|
164
|
+
let head = envStart === -1 ? text : text.slice(0, envStart);
|
|
165
|
+
head = head.replace(/^name = ".*"$/m, `name = ${JSON.stringify(values.PROJECT_NAME)}`);
|
|
166
|
+
head = head.replace(/^database_name = ".*"$/m, `database_name = ${JSON.stringify(`${values.PROJECT_NAME}-db`)}`);
|
|
167
|
+
head = upsertWranglerStringVar(head, "PUBLIC_ORIGIN", values.SITE_URL ?? "");
|
|
168
|
+
if (values.TURNSTILE_SITE_KEY?.trim()) {
|
|
169
|
+
head = upsertWranglerStringVar(head, "TURNSTILE_SITE_KEY", values.TURNSTILE_SITE_KEY.trim());
|
|
170
|
+
}
|
|
171
|
+
return `${head}${tail}`;
|
|
172
|
+
}
|
|
173
|
+
function upsertWranglerStringVar(text, name, value) {
|
|
174
|
+
const line = `${name} = ${JSON.stringify(value)}`;
|
|
175
|
+
const existing = new RegExp(`^\\s*#?\\s*${escapeRegExp(name)}\\s*=.*$`, "m");
|
|
176
|
+
if (existing.test(text))
|
|
177
|
+
return text.replace(existing, line);
|
|
178
|
+
const vars = text.match(/^\[vars\]\s*$/m);
|
|
179
|
+
if (!vars || vars.index === undefined)
|
|
180
|
+
return `${text.trimEnd()}\n\n[vars]\n${line}\n`;
|
|
181
|
+
const index = vars.index + vars[0].length;
|
|
182
|
+
return `${text.slice(0, index)}\n${line}${text.slice(index)}`;
|
|
183
|
+
}
|
|
184
|
+
function readWranglerStringVar(root, name) {
|
|
185
|
+
const path = join(root, "wrangler.toml");
|
|
186
|
+
if (!existsSync(path) || !lstatSync(path).isFile())
|
|
187
|
+
return null;
|
|
188
|
+
const source = readFileSync(path, "utf8");
|
|
189
|
+
const match = source.match(new RegExp(`^\\s*${escapeRegExp(name)}\\s*=\\s*("(?:[^"\\\\]|\\\\.)*")\\s*$`, "m"));
|
|
190
|
+
if (!match?.[1])
|
|
191
|
+
return null;
|
|
192
|
+
try {
|
|
193
|
+
const value = JSON.parse(match[1]);
|
|
194
|
+
return typeof value === "string" ? value.trim() : null;
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function escapeRegExp(value) {
|
|
201
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
202
|
+
}
|
|
203
|
+
function placeholders(launchState, archetype, targetRef, timestamp, turnstileSiteKey) {
|
|
204
|
+
const github = recordField(launchState, "github");
|
|
205
|
+
const repo = recordField(launchState, "repo");
|
|
206
|
+
const siteOwner = recordField(launchState, "site_owner");
|
|
207
|
+
const locales = arrayField(launchState, "locales");
|
|
208
|
+
const owner = optionalStringField(repo, "owner")
|
|
209
|
+
?? optionalStringField(github, "owner")
|
|
210
|
+
?? "unknown-owner";
|
|
211
|
+
const projectName = stringField(launchState, "project_name")
|
|
212
|
+
?? stringField(repo, "name")
|
|
213
|
+
?? "mantle-site";
|
|
214
|
+
const siteUrl = stringField(launchState, "site_url") ?? "https://example.com";
|
|
215
|
+
const locale = stringField(launchState, "canonical_locale") ?? locales[0] ?? "en";
|
|
216
|
+
const description = stringField(launchState, "description")
|
|
217
|
+
?? stringField(launchState, "purpose")
|
|
218
|
+
?? `${projectName} site.`;
|
|
219
|
+
return {
|
|
220
|
+
PROJECT_NAME: projectName,
|
|
221
|
+
ARCHETYPE: archetype,
|
|
222
|
+
BRAND: stringField(launchState, "brand") ?? projectName,
|
|
223
|
+
DESCRIPTION: description,
|
|
224
|
+
INSTALL_SUMMARY: stringField(launchState, "summary") ?? description,
|
|
225
|
+
LOCALES: JSON.stringify(locales.length ? locales : ["en"]),
|
|
226
|
+
CANONICAL_LOCALE: locale,
|
|
227
|
+
STARTER_REF: targetRef,
|
|
228
|
+
GITHUB_OWNER: owner,
|
|
229
|
+
ADMIN_GITHUB_LOGIN: optionalStringField(github, "admin_login")
|
|
230
|
+
?? optionalStringField(siteOwner, "github_login")
|
|
231
|
+
?? owner,
|
|
232
|
+
SITE_OWNER_EMAIL: optionalStringField(siteOwner, "email") ?? "",
|
|
233
|
+
AUTH_MODE: stringField(launchState, "authMode") ?? "self-managed",
|
|
234
|
+
SITE_URL: siteUrl,
|
|
235
|
+
TURNSTILE_SITE_KEY: turnstileSiteKey,
|
|
236
|
+
AFTER_LAUNCH_SKILL_URL: stringField(launchState, "after_launch_skill_url") ?? "",
|
|
237
|
+
INSTALL_TIMESTAMP: timestamp,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function compareSnapshots(current, upstream) {
|
|
241
|
+
const differing = [];
|
|
242
|
+
const missingCurrent = [];
|
|
243
|
+
for (const [path, source] of [...upstream].sort(([a], [b]) => a.localeCompare(b))) {
|
|
244
|
+
if (IGNORE_FILES.has(path))
|
|
245
|
+
continue;
|
|
246
|
+
const existing = current.get(path);
|
|
247
|
+
if (existing === undefined)
|
|
248
|
+
missingCurrent.push({ path, upstream_sha256: sha256(source) });
|
|
249
|
+
else if (existing !== source) {
|
|
250
|
+
differing.push({ path, current_sha256: sha256(existing), upstream_sha256: sha256(source) });
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
const removedUpstream = [...current]
|
|
254
|
+
.filter(([path]) => !IGNORE_FILES.has(path) && !upstream.has(path))
|
|
255
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
256
|
+
.map(([path, source]) => ({ path, current_sha256: sha256(source) }));
|
|
257
|
+
return diffReport(differing, missingCurrent, removedUpstream);
|
|
258
|
+
}
|
|
259
|
+
function compareProject(root, upstream) {
|
|
260
|
+
const differing = [];
|
|
261
|
+
const missingCurrent = [];
|
|
262
|
+
for (const [path, source] of [...upstream].sort(([a], [b]) => a.localeCompare(b))) {
|
|
263
|
+
if (IGNORE_FILES.has(path))
|
|
264
|
+
continue;
|
|
265
|
+
const currentPath = join(root, path);
|
|
266
|
+
if (!existsSync(currentPath) || !lstatSync(currentPath).isFile()) {
|
|
267
|
+
missingCurrent.push({ path, upstream_sha256: sha256(source) });
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
const current = readFileSync(currentPath);
|
|
271
|
+
if (sha256(current) !== sha256(source)) {
|
|
272
|
+
differing.push({ path, current_sha256: sha256(current), upstream_sha256: sha256(source) });
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
const removedUpstream = listProjectFiles(root)
|
|
276
|
+
.filter((path) => !upstream.has(path))
|
|
277
|
+
.map((path) => ({ path, current_sha256: sha256(readFileSync(join(root, path))) }));
|
|
278
|
+
return diffReport(differing, missingCurrent, removedUpstream);
|
|
279
|
+
}
|
|
280
|
+
function listProjectFiles(root, prefix = "") {
|
|
281
|
+
const files = [];
|
|
282
|
+
for (const entry of readdirSync(join(root, prefix), { withFileTypes: true })) {
|
|
283
|
+
if (IGNORE_DIRS.has(entry.name))
|
|
284
|
+
continue;
|
|
285
|
+
const path = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
286
|
+
if (entry.isDirectory())
|
|
287
|
+
files.push(...listProjectFiles(root, path));
|
|
288
|
+
else if (entry.isFile() && !IGNORE_FILES.has(path))
|
|
289
|
+
files.push(path);
|
|
290
|
+
}
|
|
291
|
+
return files.sort();
|
|
292
|
+
}
|
|
293
|
+
function diffReport(differing, missingCurrent, removedUpstream) {
|
|
294
|
+
return {
|
|
295
|
+
counts: {
|
|
296
|
+
differing: differing.length,
|
|
297
|
+
missing_current: missingCurrent.length,
|
|
298
|
+
removed_upstream: removedUpstream.length,
|
|
299
|
+
},
|
|
300
|
+
differing,
|
|
301
|
+
missing_current: missingCurrent,
|
|
302
|
+
removed_upstream: removedUpstream,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function metadataMigration(sourceRef, targetRef, bundleBaseUrl, registry) {
|
|
306
|
+
return {
|
|
307
|
+
required: sourceRef !== targetRef
|
|
308
|
+
|| stringField(registry, "version") !== targetRef
|
|
309
|
+
|| stringField(registry, "bundleBaseUrl") !== bundleBaseUrl,
|
|
310
|
+
apply_after_reviewed_port: true,
|
|
311
|
+
files: [
|
|
312
|
+
{
|
|
313
|
+
path: ".mantle/launch-state.json",
|
|
314
|
+
set: { starter_ref: targetRef },
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
path: ".mantle/features.json",
|
|
318
|
+
set: {
|
|
319
|
+
"registry.version": targetRef,
|
|
320
|
+
"registry.bundleBaseUrl": bundleBaseUrl,
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
],
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
function writeReport(root, source) {
|
|
327
|
+
const directory = join(root, ".mantle");
|
|
328
|
+
if (!existsSync(directory) || !lstatSync(directory).isDirectory()) {
|
|
329
|
+
throw new Error(".mantle must be a real directory");
|
|
330
|
+
}
|
|
331
|
+
const path = join(root, REPORT_PATH);
|
|
332
|
+
if (existsSync(path) && !lstatSync(path).isFile()) {
|
|
333
|
+
throw new Error(`${REPORT_PATH} must be a regular file`);
|
|
334
|
+
}
|
|
335
|
+
writeFileSync(path, source, "utf8");
|
|
336
|
+
}
|
|
337
|
+
function sha256(value) {
|
|
338
|
+
return createHash("sha256").update(value).digest("hex");
|
|
339
|
+
}
|
|
340
|
+
function readJson(path) {
|
|
341
|
+
if (!existsSync(path))
|
|
342
|
+
return {};
|
|
343
|
+
const value = JSON.parse(readFileSync(path, "utf8"));
|
|
344
|
+
return isRecord(value) ? value : {};
|
|
345
|
+
}
|
|
346
|
+
function launchArchetype(launchState, features) {
|
|
347
|
+
const archetype = stringField(launchState, "archetype")
|
|
348
|
+
?? stringField(recordField(features, "archetype"), "name")
|
|
349
|
+
?? "blank";
|
|
350
|
+
if (!/^[a-z0-9-]+$/.test(archetype))
|
|
351
|
+
throw new Error(`invalid archetype: ${archetype}`);
|
|
352
|
+
return archetype;
|
|
353
|
+
}
|
|
354
|
+
function recordField(value, key) {
|
|
355
|
+
if (!isRecord(value))
|
|
356
|
+
return {};
|
|
357
|
+
return isRecord(value[key]) ? value[key] : {};
|
|
358
|
+
}
|
|
359
|
+
function stringField(value, key) {
|
|
360
|
+
if (!isRecord(value))
|
|
361
|
+
return null;
|
|
362
|
+
const field = value[key];
|
|
363
|
+
return typeof field === "string" && field.trim() ? field.trim() : null;
|
|
364
|
+
}
|
|
365
|
+
function optionalStringField(value, key) {
|
|
366
|
+
if (!isRecord(value))
|
|
367
|
+
return null;
|
|
368
|
+
const field = value[key];
|
|
369
|
+
return typeof field === "string" ? field.trim() : null;
|
|
370
|
+
}
|
|
371
|
+
function arrayField(value, key) {
|
|
372
|
+
if (!isRecord(value) || !Array.isArray(value[key]))
|
|
373
|
+
return [];
|
|
374
|
+
return value[key].filter((item) => typeof item === "string");
|
|
375
|
+
}
|
|
376
|
+
function isRecord(value) {
|
|
377
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
378
|
+
}
|
|
379
|
+
function isStringRecord(value) {
|
|
380
|
+
return isRecord(value) && Object.values(value).every((item) => typeof item === "string");
|
|
381
|
+
}
|
|
382
|
+
function message(error) {
|
|
383
|
+
return error instanceof Error ? error.message : String(error);
|
|
384
|
+
}
|
|
385
|
+
class UsageError extends Error {
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAW,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,GAAG,4BAA4B,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7F,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,WAAW,CAAC,CAAC,CAAC;AAUlG,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA0B;IACxD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;YACtB,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;YAClB,OAAO,EAAE;gBACP,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACvB,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;aACtC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC1F,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAC;QACzF,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;QACjF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,SAAS,KAAK,SAAS;YAC1C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,MAAM,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,WAAW,EAAE,oBAAoB,CAAC;eAC1E,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,CAAC;eACjD,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,iBAAiB,CAC9B,YAAY,EACZ,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAC7E,CAAC;QACF,MAAM,MAAM,GAAG,iBAAiB,CAC9B,YAAY,EACZ,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAC7E,CAAC;QACF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG;YACb,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,SAAS;YACvB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;YACrB,eAAe,EAAE,aAAa;YAC9B,cAAc,EAAE,YAAY,CAAC,OAAO,IAAI,IAAI;YAC5C,QAAQ;YACR,KAAK;YACL,kBAAkB,EAAE,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC;YACpF,SAAS,EACP,4HAA4H;SAC/H,CAAC;QACF,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,yBAAyB,WAAW,IAAI,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CACV,GAAG,SAAS,MAAM,SAAS,KAAK,QAAQ,CAAC,MAAM,CAAC,SAAS,YAAY;cACnE,GAAG,QAAQ,CAAC,MAAM,CAAC,eAAe,WAAW,QAAQ,CAAC,MAAM,CAAC,gBAAgB,YAAY;cACzF,UAAU,KAAK,CAAC,MAAM,CAAC,SAAS,cAAc,KAAK,CAAC,MAAM,CAAC,eAAe,YAAY;cACtF,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,iBAAiB,CACpD,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,CAAC,KAAK,CAAC;;;;;;;;CAQd,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,YAAoB,EACpB,GAAW,EACX,SAAiB;IAEjB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,KAAK,MAAM,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC/E,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,SAAS;QACtD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,UAAU,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACrF,MAAM,KAAK,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,OAAO,KAAK,CAAC,SAAS,cAAc,SAAS,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO;YACL,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACtE,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,UAAU,UAAU,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,qCAAqC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAuB,EACvB,MAAwC;IAExC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvG,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,eAAe;YAAE,IAAI,GAAG,6BAA6B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjF,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/C,IAAI,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;IACnE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,MAAwC;IAC1E,OAAO,MAAM,CAAC,OAAO,CAAC,6BAA6B,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;QACnF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,6BAA6B,CACpC,IAAY,EACZ,MAAwC;IAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACvF,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,yBAAyB,EACzB,mBAAmB,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,YAAY,KAAK,CAAC,EAAE,CACjE,CAAC;IACF,IAAI,GAAG,uBAAuB,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,kBAAkB,EAAE,IAAI,EAAE,EAAE,CAAC;QACtC,IAAI,GAAG,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY,EAAE,IAAY,EAAE,KAAa;IACxE,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,cAAc,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC7E,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,IAAI,IAAI,CAAC;IACvF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,IAAY;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;QAAE,OAAO,IAAI,CAAC;IAChE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CACxB,IAAI,MAAM,CAAC,QAAQ,YAAY,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,CAAC,CACnF,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,YAAY,CACnB,WAAuB,EACvB,SAAiB,EACjB,SAAiB,EACjB,SAAiB,EACjB,gBAAwB;IAExB,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC;WAC3C,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;WACpC,eAAe,CAAC;IACrB,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,cAAc,CAAC;WACvD,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;WACzB,aAAa,CAAC;IACnB,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,qBAAqB,CAAC;IAC9E,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,EAAE,kBAAkB,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAClF,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC;WACtD,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC;WACnC,GAAG,WAAW,QAAQ,CAAC;IAC5B,OAAO;QACL,YAAY,EAAE,WAAW;QACzB,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,WAAW;QACvD,WAAW,EAAE,WAAW;QACxB,eAAe,EAAE,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,WAAW;QACnE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1D,gBAAgB,EAAE,MAAM;QACxB,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,KAAK;QACnB,kBAAkB,EAAE,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC;eACzD,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC;eAC9C,KAAK;QACV,gBAAgB,EAAE,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE;QAC/D,SAAS,EAAE,WAAW,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,cAAc;QACjE,QAAQ,EAAE,OAAO;QACjB,kBAAkB,EAAE,gBAAgB;QACpC,sBAAsB,EAAE,WAAW,CAAC,WAAW,EAAE,wBAAwB,CAAC,IAAI,EAAE;QAChF,iBAAiB,EAAE,SAAS;KAC7B,CAAC;AACJ,CAAC;AAaD,SAAS,gBAAgB,CAAC,OAAiB,EAAE,QAAkB;IAC7D,MAAM,SAAS,GAAiB,EAAE,CAAC;IACnC,MAAM,cAAc,GAAiB,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,QAAQ,KAAK,SAAS;YAAE,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACtF,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IACD,MAAM,eAAe,GAAG,CAAC,GAAG,OAAO,CAAC;SACjC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAClE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,UAAU,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,QAAkB;IACtD,MAAM,SAAS,GAAiB,EAAE,CAAC;IACnC,MAAM,cAAc,GAAiB,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACjE,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/D,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAAC;SAC3C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACrC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,OAAO,UAAU,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,MAAM,GAAG,EAAE;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7E,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7D,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;aAChE,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,UAAU,CACjB,SAAgC,EAChC,cAAqC,EACrC,eAAsC;IAEtC,OAAO;QACL,MAAM,EAAE;YACN,SAAS,EAAE,SAAS,CAAC,MAAM;YAC3B,eAAe,EAAE,cAAc,CAAC,MAAM;YACtC,gBAAgB,EAAE,eAAe,CAAC,MAAM;SACzC;QACD,SAAS;QACT,eAAe,EAAE,cAAc;QAC/B,gBAAgB,EAAE,eAAe;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,SAAiB,EACjB,SAAiB,EACjB,aAAqB,EACrB,QAAoB;IAEpB,OAAO;QACL,QAAQ,EAAE,SAAS,KAAK,SAAS;eAC5B,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,SAAS;eAC9C,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,KAAK,aAAa;QAC7D,yBAAyB,EAAE,IAAI;QAC/B,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,2BAA2B;gBACjC,GAAG,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;aAChC;YACD;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,GAAG,EAAE;oBACH,kBAAkB,EAAE,SAAS;oBAC7B,wBAAwB,EAAE,aAAa;iBACxC;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,MAAc;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,yBAAyB,CAAC,CAAC;IAC3D,CAAC;IACD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,MAAM,CAAC,KAAsB;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,eAAe,CAAC,WAAuB,EAAE,QAAoB;IACpE,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC;WAClD,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC;WACvD,OAAO,CAAC;IACb,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IACxF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,GAAW;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,GAAW;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,GAAW;IACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,GAAW;IAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAW,SAAQ,KAAK;CAAG"}
|
|
@@ -209,12 +209,11 @@ See § Authoring shape below for the full retirement rationale.
|
|
|
209
209
|
|
|
210
210
|
## Implementation status
|
|
211
211
|
|
|
212
|
-
Names + PG-1:1 framing are documented in this ADR and the
|
|
213
|
-
|
|
214
|
-
`
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
v0.1.0 ship list in [aotter/mantle](https://github.com/aotter/mantle).
|
|
212
|
+
Names + PG-1:1 framing are documented in this ADR and the manifest grammar
|
|
213
|
+
reference. Manifest TS types live in `packages/mantle-spec/`. The external
|
|
214
|
+
[`aotter/mantle-starters`](https://github.com/aotter/mantle-starters)
|
|
215
|
+
repository declares consumer instances of each atom. Runtime dispatcher, View
|
|
216
|
+
executor, and Procedure dispatcher live in this repository.
|
|
218
217
|
|
|
219
218
|
---
|
|
220
219
|
|
|
@@ -500,7 +499,7 @@ YAML's standard `---` separator allows multiple documents in
|
|
|
500
499
|
one file. A "feature file" carries all atoms for that feature:
|
|
501
500
|
|
|
502
501
|
```yaml
|
|
503
|
-
#
|
|
502
|
+
# manifests/contact.yaml
|
|
504
503
|
apiVersion: cms.mantle.aotter.net/v1
|
|
505
504
|
kind: Schema
|
|
506
505
|
metadata: { name: contact-messages }
|