@aotter/mantle 0.1.0-alpha.9 → 0.1.2-alpha.2
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 +38 -38
- package/dist/cli/generate.d.ts +10 -1
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +49 -4
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/main.js +0 -8
- package/dist/cli/main.js.map +1 -1
- package/dist/codegen/emitMantleModule.js +8 -0
- package/dist/codegen/emitMantleModule.js.map +1 -1
- package/docs/adapter-guide.md +23 -26
- package/docs/adr/0008-structured-diagnostic-shape.md +7 -2
- package/docs/adr/0010-locale-and-translates.md +14 -16
- package/docs/adr/0011-adapter-port-spec.md +2 -1
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +100 -0
- package/docs/adr/0018-core-starters-repository-boundary.md +3 -0
- package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +38 -2
- package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +199 -0
- package/docs/adr/0021-retire-starter-scaffolding.md +30 -0
- package/docs/adr/0022-caller-observed-version-occ.md +212 -0
- package/docs/adr/0023-port-failure-contract.md +69 -0
- package/docs/adr/0024-manifest-native-schema-tables.md +260 -0
- package/docs/adr/README.md +19 -3
- package/docs/adr/adr-lite-803-request-diagnostics.md +38 -0
- package/docs/adr/adr-lite-808-route-readiness.md +47 -0
- package/docs/adr/adr-lite-809-bounded-public-content.md +71 -0
- package/docs/adr/adr-lite-812-native-parity.md +150 -0
- package/docs/adr/adr-lite-823-home-statistics.md +64 -0
- package/docs/adr/adr-lite-842-mcp-authoring.md +30 -0
- package/docs/adr/adr-lite-861-admin-webmcp.md +42 -0
- package/docs/adr/adr-lite-909-admin-ui-kit.md +37 -0
- package/docs/api-mcp-authorization.md +3 -664
- package/docs/auth-hosting-model.md +4 -4
- package/docs/cloudflare-low-level-composition.md +3 -104
- package/docs/deferred-lifecycle-queues.md +2 -243
- package/docs/design-atoms.md +16 -796
- package/docs/direct-authoring.md +5 -0
- package/docs/examples/minimal-worker/README.md +37 -0
- package/docs/examples/minimal-worker/manifests/site.yaml +25 -0
- package/docs/examples/minimal-worker/package.json +26 -0
- package/docs/examples/minimal-worker/smoke.mjs +23 -0
- package/docs/examples/minimal-worker/src/index.ts +4 -0
- package/docs/examples/minimal-worker/tsconfig.json +17 -0
- package/docs/examples/minimal-worker/wrangler.jsonc +22 -0
- package/docs/handbook/cloudflare/authentication.md +167 -0
- package/docs/handbook/cloudflare/bindings.md +236 -0
- package/docs/handbook/cloudflare/conventional-worker.md +162 -0
- package/docs/handbook/cloudflare/deferred-hooks-queues.md +171 -0
- package/docs/handbook/cloudflare/deploy-and-operate.md +105 -0
- package/docs/handbook/cloudflare/low-level-composition.md +169 -0
- package/docs/handbook/cloudflare/media-r2.md +216 -0
- package/docs/handbook/cloudflare/public-web.md +144 -0
- package/docs/handbook/concepts/authorization.md +116 -0
- package/docs/handbook/concepts/four-atoms.md +173 -0
- package/docs/handbook/concepts/lifecycle-and-locales.md +142 -0
- package/docs/handbook/concepts/mcp-and-agents.md +109 -0
- package/docs/handbook/concepts/procedures-and-triggers.md +221 -0
- package/docs/handbook/concepts/runtime-and-adapters.md +177 -0
- package/docs/handbook/concepts/views.md +191 -0
- package/docs/handbook/examples/commerce-transaction.md +813 -0
- package/docs/handbook/examples/guarded-api.md +427 -0
- package/docs/handbook/examples/intake-form.md +319 -0
- package/docs/handbook/examples/legal-documents.md +218 -0
- package/docs/handbook/examples/procurement-approvals.md +240 -0
- package/docs/handbook/examples/publication.md +240 -0
- package/docs/handbook/examples/reservation.md +220 -0
- package/docs/handbook/navigation.json +63 -0
- package/docs/handbook/reference/authorization.md +295 -0
- package/docs/handbook/reference/diagnostics.md +183 -0
- package/docs/handbook/reference/manifest.md +132 -0
- package/docs/handbook/reference/procedure.md +263 -0
- package/docs/handbook/reference/schema.md +250 -0
- package/docs/handbook/reference/site-config.md +233 -0
- package/docs/handbook/reference/surface.md +207 -0
- package/docs/handbook/reference/trigger.md +193 -0
- package/docs/handbook/reference/view.md +256 -0
- package/docs/handbook/start/project-and-cli.md +122 -0
- package/docs/handbook/start/quickstart-worker.md +193 -0
- package/docs/labels.md +3 -1
- package/docs/media-uploads.md +3 -184
- package/docs/migration-0.1.2.md +60 -3
- package/docs/performance-harness.md +127 -10
- package/docs/release-process.md +85 -231
- package/docs/schema-indexes.md +3 -180
- package/docs/sealed-pipeline-ownership.md +6 -5
- package/docs/spec-only-host-adoption.md +158 -0
- package/docs/transaction-patterns.md +5 -0
- package/package.json +21 -25
- package/skills/README.md +4 -4
- package/skills/develop/SKILL.md +23 -28
- package/skills/install/SKILL.md +55 -147
- package/skills/provision/SKILL.md +4 -3
- package/skills/theme/SKILL.md +6 -6
- package/skills/update/SKILL.md +32 -68
- package/dist/cli/create.d.ts +0 -2
- package/dist/cli/create.d.ts.map +0 -1
- package/dist/cli/create.js +0 -243
- package/dist/cli/create.js.map +0 -1
- package/dist/cli/update.d.ts +0 -2
- package/dist/cli/update.d.ts.map +0 -1
- package/dist/cli/update.js +0 -413
- package/dist/cli/update.js.map +0 -1
- package/dist/provision/renderProvisionBundle.d.ts +0 -70
- package/dist/provision/renderProvisionBundle.d.ts.map +0 -1
- package/dist/provision/renderProvisionBundle.js +0 -367
- package/dist/provision/renderProvisionBundle.js.map +0 -1
- package/dist/provision.d.ts +0 -2
- package/dist/provision.d.ts.map +0 -1
- package/dist/provision.js +0 -2
- package/dist/provision.js.map +0 -1
package/dist/cli/update.js
DELETED
|
@@ -1,413 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { existsSync, lstatSync, readFileSync, readdirSync, writeFileSync, } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { cwd, stderr, stdout } from "node:process";
|
|
5
|
-
import { parseArgs } from "node:util";
|
|
6
|
-
import { renderProvisionBundle, safeTarget, } from "../provision.js";
|
|
7
|
-
const REPORT_PATH = ".mantle/update-report.json";
|
|
8
|
-
const IGNORE_DIRS = new Set([".git", "node_modules", ".wrangler", ".wrangler-test", "dist"]);
|
|
9
|
-
const IGNORE_FILES = new Set([".mantle/features.json", ".mantle/launch-state.json", REPORT_PATH]);
|
|
10
|
-
export async function runUpdate(rawArgs) {
|
|
11
|
-
let values;
|
|
12
|
-
try {
|
|
13
|
-
({ values } = parseArgs({
|
|
14
|
-
args: [...rawArgs],
|
|
15
|
-
options: {
|
|
16
|
-
ref: { type: "string" },
|
|
17
|
-
"bundle-base-url": { type: "string" },
|
|
18
|
-
help: { type: "boolean", short: "h" },
|
|
19
|
-
},
|
|
20
|
-
}));
|
|
21
|
-
}
|
|
22
|
-
catch (error) {
|
|
23
|
-
stderr.write(`${message(error)}\n`);
|
|
24
|
-
return 2;
|
|
25
|
-
}
|
|
26
|
-
if (values.help) {
|
|
27
|
-
printHelp();
|
|
28
|
-
return 0;
|
|
29
|
-
}
|
|
30
|
-
const root = cwd();
|
|
31
|
-
try {
|
|
32
|
-
const launchState = readJson(join(root, ".mantle", "launch-state.json"));
|
|
33
|
-
const features = readJson(join(root, ".mantle", "features.json"));
|
|
34
|
-
const registry = recordField(features, "registry");
|
|
35
|
-
const sourceRef = stringField(launchState, "starter_ref");
|
|
36
|
-
const targetRef = values.ref ?? stringField(registry, "version");
|
|
37
|
-
const bundleBaseUrl = values["bundle-base-url"] ?? stringField(registry, "bundleBaseUrl");
|
|
38
|
-
if (!sourceRef)
|
|
39
|
-
throw new UsageError(".mantle/launch-state.json is missing starter_ref");
|
|
40
|
-
if (!targetRef)
|
|
41
|
-
throw new UsageError("pass --ref or configure registry.version");
|
|
42
|
-
if (!bundleBaseUrl) {
|
|
43
|
-
throw new UsageError("pass --bundle-base-url or configure registry.bundleBaseUrl");
|
|
44
|
-
}
|
|
45
|
-
if (!bundleBaseUrl.includes("{ref}")) {
|
|
46
|
-
throw new UsageError("bundle base URL must contain {ref}");
|
|
47
|
-
}
|
|
48
|
-
const archetype = launchArchetype(launchState, features);
|
|
49
|
-
const sourceBundle = await fetchBundle(bundleBaseUrl, sourceRef, archetype);
|
|
50
|
-
const targetBundle = sourceRef === targetRef
|
|
51
|
-
? sourceBundle
|
|
52
|
-
: await fetchBundle(bundleBaseUrl, targetRef, archetype);
|
|
53
|
-
const timestamp = new Date().toISOString();
|
|
54
|
-
const turnstileSiteKey = optionalStringField(launchState, "turnstile_site_key")
|
|
55
|
-
?? readWranglerStringVar(root, "TURNSTILE_SITE_KEY")
|
|
56
|
-
?? "";
|
|
57
|
-
const sourceLaunch = updateLaunchValues(launchState, archetype, sourceRef, timestamp, turnstileSiteKey);
|
|
58
|
-
const targetLaunch = updateLaunchValues(launchState, archetype, targetRef, timestamp, turnstileSiteKey);
|
|
59
|
-
const source = materializeBundle(sourceBundle, sourceLaunch);
|
|
60
|
-
const target = materializeBundle(targetBundle, targetLaunch);
|
|
61
|
-
const upstream = compareSnapshots(source, target);
|
|
62
|
-
const local = compareProject(root, source);
|
|
63
|
-
const report = {
|
|
64
|
-
schema_version: 3,
|
|
65
|
-
generated_at: timestamp,
|
|
66
|
-
source_ref: sourceRef,
|
|
67
|
-
target_ref: targetRef,
|
|
68
|
-
bundle_base_url: bundleBaseUrl,
|
|
69
|
-
bundle_version: typeof targetBundle.version === "string" ? targetBundle.version : null,
|
|
70
|
-
upstream,
|
|
71
|
-
local,
|
|
72
|
-
metadata_migration: metadataMigration(sourceRef, targetRef, bundleBaseUrl, registry),
|
|
73
|
-
next_step: "Port reviewed upstream changes only, then apply the reported metadata migration while preserving all other instance state.",
|
|
74
|
-
};
|
|
75
|
-
writeReport(root, `${JSON.stringify(report, null, 2)}\n`);
|
|
76
|
-
stdout.write(`mantle update report: ${REPORT_PATH}\n`);
|
|
77
|
-
stdout.write(`${sourceRef} → ${targetRef}: ${upstream.counts.differing} changed, `
|
|
78
|
-
+ `${upstream.counts.missing_current} added, ${upstream.counts.removed_upstream} removed; `
|
|
79
|
-
+ `local: ${local.counts.differing} modified, ${local.counts.missing_current} missing, `
|
|
80
|
-
+ `${local.counts.removed_upstream} project-only\n`);
|
|
81
|
-
return 0;
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
stderr.write(`mantle update: ${message(error)}\n`);
|
|
85
|
-
return error instanceof UsageError ? 2 : 1;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
function printHelp() {
|
|
89
|
-
stdout.write(`mantle update — compare this site with another provision bundle
|
|
90
|
-
|
|
91
|
-
Usage: mantle update [options]
|
|
92
|
-
|
|
93
|
-
Options:
|
|
94
|
-
--ref <ref> Target immutable starter ref; defaults to registry.version
|
|
95
|
-
--bundle-base-url <url> Bundle root containing {ref}; defaults to registry.bundleBaseUrl
|
|
96
|
-
-h, --help This help
|
|
97
|
-
`);
|
|
98
|
-
}
|
|
99
|
-
async function fetchBundle(baseTemplate, ref, archetype) {
|
|
100
|
-
let lastUrl = "";
|
|
101
|
-
let lastStatus = 404;
|
|
102
|
-
for (const candidate of bundleRefCandidates(ref)) {
|
|
103
|
-
const base = baseTemplate.replaceAll("{ref}", encodeURIComponent(candidate)).replace(/\/+$/, "");
|
|
104
|
-
const url = new URL(`${base}/${encodeURIComponent(archetype)}.json`);
|
|
105
|
-
if (url.protocol !== "https:" && url.protocol !== "http:") {
|
|
106
|
-
throw new Error("bundle base URL must use http or https");
|
|
107
|
-
}
|
|
108
|
-
lastUrl = url.toString();
|
|
109
|
-
const response = await fetch(url, { headers: { accept: "application/json" } });
|
|
110
|
-
lastStatus = response.status;
|
|
111
|
-
if (!response.ok && response.status === 404)
|
|
112
|
-
continue;
|
|
113
|
-
if (!response.ok)
|
|
114
|
-
throw new Error(`failed to fetch ${url}: HTTP ${response.status}`);
|
|
115
|
-
const value = await response.json();
|
|
116
|
-
if (!isRecord(value)) {
|
|
117
|
-
throw new Error(`invalid provision bundle at ${url}`);
|
|
118
|
-
}
|
|
119
|
-
if (value.formatVersion === undefined) {
|
|
120
|
-
if (!isStringRecord(value.files))
|
|
121
|
-
throw new Error(`invalid provision bundle at ${url}`);
|
|
122
|
-
if (typeof value.archetype === "string" && value.archetype !== archetype) {
|
|
123
|
-
throw new Error(`provision bundle at ${url} is ${value.archetype}, expected ${archetype}`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return value;
|
|
127
|
-
}
|
|
128
|
-
throw new Error(`failed to fetch ${lastUrl}: HTTP ${lastStatus}`);
|
|
129
|
-
}
|
|
130
|
-
function bundleRefCandidates(ref) {
|
|
131
|
-
return /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(ref) ? [ref, `v${ref}`] : [ref];
|
|
132
|
-
}
|
|
133
|
-
function materializeBundle(bundle, updateLaunch) {
|
|
134
|
-
if (bundle.formatVersion !== undefined) {
|
|
135
|
-
const rendered = renderProvisionBundle({ bundle, launch: updateLaunch.launch });
|
|
136
|
-
return new Map([
|
|
137
|
-
...rendered.files,
|
|
138
|
-
...[...rendered.binaryFiles].map(([path, base64]) => [path, Buffer.from(base64, "base64")]),
|
|
139
|
-
]);
|
|
140
|
-
}
|
|
141
|
-
return materializeLegacyBundle(bundle, legacyPlaceholders(updateLaunch));
|
|
142
|
-
}
|
|
143
|
-
function materializeLegacyBundle(bundle, values) {
|
|
144
|
-
const files = new Map();
|
|
145
|
-
for (const [sourcePath, source] of Object.entries(bundle.files).sort(([a], [b]) => a.localeCompare(b))) {
|
|
146
|
-
const path = safeTarget(sourcePath);
|
|
147
|
-
if (files.has(path))
|
|
148
|
-
throw new Error(`duplicate provision bundle path: ${path}`);
|
|
149
|
-
let text = substituteLegacy(source, values);
|
|
150
|
-
if (path === "wrangler.toml")
|
|
151
|
-
text = materializeLegacyWranglerToml(text, values);
|
|
152
|
-
files.set(path, text);
|
|
153
|
-
}
|
|
154
|
-
return files;
|
|
155
|
-
}
|
|
156
|
-
function substituteLegacy(source, values) {
|
|
157
|
-
return source.replace(/\{\{([A-Z_][A-Z0-9_]*)\}\}/g, (token, key) => {
|
|
158
|
-
const value = values[key];
|
|
159
|
-
if (value === undefined)
|
|
160
|
-
throw new Error(`unknown provision placeholder ${token}`);
|
|
161
|
-
return value;
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
function materializeLegacyWranglerToml(text, values) {
|
|
165
|
-
const envStart = text.search(/\n\[env\./);
|
|
166
|
-
const tail = envStart === -1 ? "" : text.slice(envStart);
|
|
167
|
-
let head = envStart === -1 ? text : text.slice(0, envStart);
|
|
168
|
-
head = head.replace(/^name = ".*"$/m, `name = ${JSON.stringify(values.PROJECT_NAME)}`);
|
|
169
|
-
head = head.replace(/^database_name = ".*"$/m, `database_name = ${JSON.stringify(`${values.PROJECT_NAME}-db`)}`);
|
|
170
|
-
head = upsertWranglerStringVar(head, "PUBLIC_ORIGIN", values.SITE_URL ?? "");
|
|
171
|
-
if (values.TURNSTILE_SITE_KEY?.trim()) {
|
|
172
|
-
head = upsertWranglerStringVar(head, "TURNSTILE_SITE_KEY", values.TURNSTILE_SITE_KEY.trim());
|
|
173
|
-
}
|
|
174
|
-
return `${head}${tail}`;
|
|
175
|
-
}
|
|
176
|
-
function upsertWranglerStringVar(text, name, value) {
|
|
177
|
-
const line = `${name} = ${JSON.stringify(value)}`;
|
|
178
|
-
const existing = new RegExp(`^\\s*#?\\s*${escapeRegExp(name)}\\s*=.*$`, "m");
|
|
179
|
-
if (existing.test(text))
|
|
180
|
-
return text.replace(existing, line);
|
|
181
|
-
const vars = text.match(/^\[vars\]\s*$/m);
|
|
182
|
-
if (!vars || vars.index === undefined)
|
|
183
|
-
return `${text.trimEnd()}\n\n[vars]\n${line}\n`;
|
|
184
|
-
const index = vars.index + vars[0].length;
|
|
185
|
-
return `${text.slice(0, index)}\n${line}${text.slice(index)}`;
|
|
186
|
-
}
|
|
187
|
-
function readWranglerStringVar(root, name) {
|
|
188
|
-
const path = join(root, "wrangler.toml");
|
|
189
|
-
if (!existsSync(path) || !lstatSync(path).isFile())
|
|
190
|
-
return null;
|
|
191
|
-
const source = readFileSync(path, "utf8");
|
|
192
|
-
const match = source.match(new RegExp(`^\\s*${escapeRegExp(name)}\\s*=\\s*("(?:[^"\\\\]|\\\\.)*")\\s*$`, "m"));
|
|
193
|
-
if (!match?.[1])
|
|
194
|
-
return null;
|
|
195
|
-
try {
|
|
196
|
-
const value = JSON.parse(match[1]);
|
|
197
|
-
return typeof value === "string" ? value.trim() : null;
|
|
198
|
-
}
|
|
199
|
-
catch {
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
function escapeRegExp(value) {
|
|
204
|
-
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
205
|
-
}
|
|
206
|
-
function updateLaunchValues(launchState, archetype, targetRef, timestamp, turnstileSiteKey) {
|
|
207
|
-
const github = recordField(launchState, "github");
|
|
208
|
-
const repo = recordField(launchState, "repo");
|
|
209
|
-
const siteOwner = recordField(launchState, "site_owner");
|
|
210
|
-
const locales = arrayField(launchState, "locales");
|
|
211
|
-
const owner = optionalStringField(repo, "owner")
|
|
212
|
-
?? optionalStringField(github, "owner")
|
|
213
|
-
?? "unknown-owner";
|
|
214
|
-
const projectName = stringField(launchState, "project_name")
|
|
215
|
-
?? stringField(repo, "name")
|
|
216
|
-
?? "mantle-site";
|
|
217
|
-
const siteUrl = stringField(launchState, "site_url") ?? "https://example.com";
|
|
218
|
-
const locale = stringField(launchState, "canonical_locale") ?? locales[0] ?? "en";
|
|
219
|
-
const description = stringField(launchState, "description")
|
|
220
|
-
?? stringField(launchState, "purpose")
|
|
221
|
-
?? `${projectName} site.`;
|
|
222
|
-
const adminGithubLogin = optionalStringField(github, "admin_login")
|
|
223
|
-
?? optionalStringField(siteOwner, "github_login")
|
|
224
|
-
?? owner;
|
|
225
|
-
return {
|
|
226
|
-
launch: {
|
|
227
|
-
projectName,
|
|
228
|
-
archetype,
|
|
229
|
-
brand: stringField(launchState, "brand") ?? projectName,
|
|
230
|
-
description,
|
|
231
|
-
installSummary: stringField(launchState, "summary") ?? description,
|
|
232
|
-
locales: locales.length ? locales : ["en"],
|
|
233
|
-
canonicalLocale: locale,
|
|
234
|
-
starterRef: targetRef,
|
|
235
|
-
githubOwner: owner,
|
|
236
|
-
adminGithubLogin,
|
|
237
|
-
authMode: stringField(launchState, "authMode") ?? "self-managed",
|
|
238
|
-
siteUrl,
|
|
239
|
-
turnstileSiteKey,
|
|
240
|
-
afterLaunchSkillUrl: stringField(launchState, "after_launch_skill_url") ?? "",
|
|
241
|
-
installTimestamp: timestamp,
|
|
242
|
-
},
|
|
243
|
-
siteOwnerEmail: optionalStringField(siteOwner, "email") ?? "",
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
function legacyPlaceholders({ launch, siteOwnerEmail }) {
|
|
247
|
-
return {
|
|
248
|
-
PROJECT_NAME: launch.projectName,
|
|
249
|
-
ARCHETYPE: launch.archetype,
|
|
250
|
-
BRAND: launch.brand,
|
|
251
|
-
DESCRIPTION: launch.description,
|
|
252
|
-
INSTALL_SUMMARY: launch.installSummary ?? launch.description,
|
|
253
|
-
LOCALES: JSON.stringify(launch.locales),
|
|
254
|
-
CANONICAL_LOCALE: launch.canonicalLocale,
|
|
255
|
-
STARTER_REF: launch.starterRef,
|
|
256
|
-
GITHUB_OWNER: launch.githubOwner ?? "",
|
|
257
|
-
ADMIN_GITHUB_LOGIN: launch.adminGithubLogin ?? "",
|
|
258
|
-
SITE_OWNER_EMAIL: siteOwnerEmail,
|
|
259
|
-
AUTH_MODE: launch.authMode,
|
|
260
|
-
SITE_URL: launch.siteUrl ?? "",
|
|
261
|
-
TURNSTILE_SITE_KEY: launch.turnstileSiteKey ?? "",
|
|
262
|
-
AFTER_LAUNCH_SKILL_URL: launch.afterLaunchSkillUrl ?? "",
|
|
263
|
-
INSTALL_TIMESTAMP: launch.installTimestamp,
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
function compareSnapshots(current, upstream) {
|
|
267
|
-
const differing = [];
|
|
268
|
-
const missingCurrent = [];
|
|
269
|
-
for (const [path, source] of [...upstream].sort(([a], [b]) => a.localeCompare(b))) {
|
|
270
|
-
if (IGNORE_FILES.has(path))
|
|
271
|
-
continue;
|
|
272
|
-
const existing = current.get(path);
|
|
273
|
-
if (existing === undefined)
|
|
274
|
-
missingCurrent.push({ path, upstream_sha256: sha256(source) });
|
|
275
|
-
else if (sha256(existing) !== sha256(source)) {
|
|
276
|
-
differing.push({ path, current_sha256: sha256(existing), upstream_sha256: sha256(source) });
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
const removedUpstream = [...current]
|
|
280
|
-
.filter(([path]) => !IGNORE_FILES.has(path) && !upstream.has(path))
|
|
281
|
-
.sort(([a], [b]) => a.localeCompare(b))
|
|
282
|
-
.map(([path, source]) => ({ path, current_sha256: sha256(source) }));
|
|
283
|
-
return diffReport(differing, missingCurrent, removedUpstream);
|
|
284
|
-
}
|
|
285
|
-
function compareProject(root, upstream) {
|
|
286
|
-
const differing = [];
|
|
287
|
-
const missingCurrent = [];
|
|
288
|
-
for (const [path, source] of [...upstream].sort(([a], [b]) => a.localeCompare(b))) {
|
|
289
|
-
if (IGNORE_FILES.has(path))
|
|
290
|
-
continue;
|
|
291
|
-
const currentPath = join(root, path);
|
|
292
|
-
if (!existsSync(currentPath) || !lstatSync(currentPath).isFile()) {
|
|
293
|
-
missingCurrent.push({ path, upstream_sha256: sha256(source) });
|
|
294
|
-
continue;
|
|
295
|
-
}
|
|
296
|
-
const current = readFileSync(currentPath);
|
|
297
|
-
if (sha256(current) !== sha256(source)) {
|
|
298
|
-
differing.push({ path, current_sha256: sha256(current), upstream_sha256: sha256(source) });
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
const removedUpstream = listProjectFiles(root)
|
|
302
|
-
.filter((path) => !upstream.has(path))
|
|
303
|
-
.map((path) => ({ path, current_sha256: sha256(readFileSync(join(root, path))) }));
|
|
304
|
-
return diffReport(differing, missingCurrent, removedUpstream);
|
|
305
|
-
}
|
|
306
|
-
function listProjectFiles(root, prefix = "") {
|
|
307
|
-
const files = [];
|
|
308
|
-
for (const entry of readdirSync(join(root, prefix), { withFileTypes: true })) {
|
|
309
|
-
if (IGNORE_DIRS.has(entry.name))
|
|
310
|
-
continue;
|
|
311
|
-
const path = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
312
|
-
if (entry.isDirectory())
|
|
313
|
-
files.push(...listProjectFiles(root, path));
|
|
314
|
-
else if (entry.isFile() && !IGNORE_FILES.has(path))
|
|
315
|
-
files.push(path);
|
|
316
|
-
}
|
|
317
|
-
return files.sort();
|
|
318
|
-
}
|
|
319
|
-
function diffReport(differing, missingCurrent, removedUpstream) {
|
|
320
|
-
return {
|
|
321
|
-
counts: {
|
|
322
|
-
differing: differing.length,
|
|
323
|
-
missing_current: missingCurrent.length,
|
|
324
|
-
removed_upstream: removedUpstream.length,
|
|
325
|
-
},
|
|
326
|
-
differing,
|
|
327
|
-
missing_current: missingCurrent,
|
|
328
|
-
removed_upstream: removedUpstream,
|
|
329
|
-
};
|
|
330
|
-
}
|
|
331
|
-
function metadataMigration(sourceRef, targetRef, bundleBaseUrl, registry) {
|
|
332
|
-
return {
|
|
333
|
-
required: sourceRef !== targetRef
|
|
334
|
-
|| stringField(registry, "version") !== targetRef
|
|
335
|
-
|| stringField(registry, "bundleBaseUrl") !== bundleBaseUrl,
|
|
336
|
-
apply_after_reviewed_port: true,
|
|
337
|
-
files: [
|
|
338
|
-
{
|
|
339
|
-
path: ".mantle/launch-state.json",
|
|
340
|
-
set: { starter_ref: targetRef },
|
|
341
|
-
},
|
|
342
|
-
{
|
|
343
|
-
path: ".mantle/features.json",
|
|
344
|
-
set: {
|
|
345
|
-
"registry.version": targetRef,
|
|
346
|
-
"registry.bundleBaseUrl": bundleBaseUrl,
|
|
347
|
-
},
|
|
348
|
-
},
|
|
349
|
-
],
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
function writeReport(root, source) {
|
|
353
|
-
const directory = join(root, ".mantle");
|
|
354
|
-
if (!existsSync(directory) || !lstatSync(directory).isDirectory()) {
|
|
355
|
-
throw new Error(".mantle must be a real directory");
|
|
356
|
-
}
|
|
357
|
-
const path = join(root, REPORT_PATH);
|
|
358
|
-
if (existsSync(path) && !lstatSync(path).isFile()) {
|
|
359
|
-
throw new Error(`${REPORT_PATH} must be a regular file`);
|
|
360
|
-
}
|
|
361
|
-
writeFileSync(path, source, "utf8");
|
|
362
|
-
}
|
|
363
|
-
function sha256(value) {
|
|
364
|
-
return createHash("sha256").update(value).digest("hex");
|
|
365
|
-
}
|
|
366
|
-
function readJson(path) {
|
|
367
|
-
if (!existsSync(path))
|
|
368
|
-
return {};
|
|
369
|
-
const value = JSON.parse(readFileSync(path, "utf8"));
|
|
370
|
-
return isRecord(value) ? value : {};
|
|
371
|
-
}
|
|
372
|
-
function launchArchetype(launchState, features) {
|
|
373
|
-
const archetype = stringField(launchState, "archetype")
|
|
374
|
-
?? stringField(recordField(features, "archetype"), "name")
|
|
375
|
-
?? "blank";
|
|
376
|
-
if (!/^[a-z0-9-]+$/.test(archetype))
|
|
377
|
-
throw new Error(`invalid archetype: ${archetype}`);
|
|
378
|
-
return archetype;
|
|
379
|
-
}
|
|
380
|
-
function recordField(value, key) {
|
|
381
|
-
if (!isRecord(value))
|
|
382
|
-
return {};
|
|
383
|
-
return isRecord(value[key]) ? value[key] : {};
|
|
384
|
-
}
|
|
385
|
-
function stringField(value, key) {
|
|
386
|
-
if (!isRecord(value))
|
|
387
|
-
return null;
|
|
388
|
-
const field = value[key];
|
|
389
|
-
return typeof field === "string" && field.trim() ? field.trim() : null;
|
|
390
|
-
}
|
|
391
|
-
function optionalStringField(value, key) {
|
|
392
|
-
if (!isRecord(value))
|
|
393
|
-
return null;
|
|
394
|
-
const field = value[key];
|
|
395
|
-
return typeof field === "string" ? field.trim() : null;
|
|
396
|
-
}
|
|
397
|
-
function arrayField(value, key) {
|
|
398
|
-
if (!isRecord(value) || !Array.isArray(value[key]))
|
|
399
|
-
return [];
|
|
400
|
-
return value[key].filter((item) => typeof item === "string");
|
|
401
|
-
}
|
|
402
|
-
function isRecord(value) {
|
|
403
|
-
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
404
|
-
}
|
|
405
|
-
function isStringRecord(value) {
|
|
406
|
-
return isRecord(value) && Object.values(value).every((item) => typeof item === "string");
|
|
407
|
-
}
|
|
408
|
-
function message(error) {
|
|
409
|
-
return error instanceof Error ? error.message : String(error);
|
|
410
|
-
}
|
|
411
|
-
class UsageError extends Error {
|
|
412
|
-
}
|
|
413
|
-
//# sourceMappingURL=update.js.map
|
package/dist/cli/update.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
export declare const PROVISION_BUNDLE_KIND = "mantle-provision-bundle";
|
|
2
|
-
export declare const PROVISION_BUNDLE_FORMAT_VERSION = 1;
|
|
3
|
-
/** Stable across releases: hosts map these to their own error surfaces. */
|
|
4
|
-
export type ProvisionErrorCode = "bundle_invalid" | "bundle_kind_mismatch" | "bundle_archetype_mismatch" | "bundle_too_large" | "binary_invalid" | "path_unsafe" | "path_collision" | "placeholder_unknown" | "placeholder_unresolved" | "launch_value_invalid" | "locale_unsupported" | "locale_catalog_invalid" | "manifest_invalid";
|
|
5
|
-
export declare class ProvisionRenderError extends Error {
|
|
6
|
-
readonly code: ProvisionErrorCode;
|
|
7
|
-
constructor(code: ProvisionErrorCode, message: string);
|
|
8
|
-
}
|
|
9
|
-
/** Bounds memory and disk before anything is materialized. */
|
|
10
|
-
export interface ProvisionLimits {
|
|
11
|
-
readonly maxFiles: number;
|
|
12
|
-
readonly maxTextBytes: number;
|
|
13
|
-
readonly maxDecodedBinaryBytes: number;
|
|
14
|
-
readonly maxTotalBytes: number;
|
|
15
|
-
}
|
|
16
|
-
export declare const DEFAULT_PROVISION_LIMITS: ProvisionLimits;
|
|
17
|
-
export interface ProvisionBundle {
|
|
18
|
-
readonly kind?: string;
|
|
19
|
-
readonly version?: string;
|
|
20
|
-
readonly formatVersion?: number;
|
|
21
|
-
readonly archetype?: string;
|
|
22
|
-
readonly files?: Record<string, string>;
|
|
23
|
-
readonly binaryFiles?: Record<string, string>;
|
|
24
|
-
readonly localizedFiles?: readonly string[];
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Every placeholder a bundle may reference. A bundle placeholder outside this
|
|
28
|
-
* set fails as `placeholder_unknown`. Hosts that do not own a value yet (a
|
|
29
|
-
* local `create` has no GitHub owner) pass an empty string on purpose.
|
|
30
|
-
*/
|
|
31
|
-
export declare const PROVISION_PLACEHOLDERS: readonly ["ADMIN_GITHUB_LOGIN", "AFTER_LAUNCH_SKILL_URL", "ARCHETYPE", "AUTH_MODE", "BRAND", "CANONICAL_LOCALE", "DESCRIPTION", "GITHUB_OWNER", "INSTALL_SUMMARY", "INSTALL_TIMESTAMP", "LOCALES", "PROJECT_NAME", "SITE_URL", "STARTER_REF", "TURNSTILE_SITE_KEY"];
|
|
32
|
-
export type ProvisionPlaceholder = (typeof PROVISION_PLACEHOLDERS)[number];
|
|
33
|
-
export interface LaunchValues {
|
|
34
|
-
readonly archetype: string;
|
|
35
|
-
readonly projectName: string;
|
|
36
|
-
readonly brand: string;
|
|
37
|
-
readonly description: string;
|
|
38
|
-
readonly locales: readonly string[];
|
|
39
|
-
readonly canonicalLocale: string;
|
|
40
|
-
readonly authMode: string;
|
|
41
|
-
readonly starterRef: string;
|
|
42
|
-
/** ISO-8601. Passed in so one input set always renders one output set. */
|
|
43
|
-
readonly installTimestamp: string;
|
|
44
|
-
readonly siteUrl?: string;
|
|
45
|
-
readonly githubOwner?: string;
|
|
46
|
-
readonly adminGithubLogin?: string;
|
|
47
|
-
readonly afterLaunchSkillUrl?: string;
|
|
48
|
-
readonly installSummary?: string;
|
|
49
|
-
readonly turnstileSiteKey?: string;
|
|
50
|
-
}
|
|
51
|
-
export interface RenderProvisionBundleInput {
|
|
52
|
-
readonly bundle: ProvisionBundle;
|
|
53
|
-
readonly launch: LaunchValues;
|
|
54
|
-
readonly limits?: ProvisionLimits;
|
|
55
|
-
}
|
|
56
|
-
export interface RenderedProject {
|
|
57
|
-
/** Relative POSIX path -> file text. */
|
|
58
|
-
readonly files: ReadonlyMap<string, string>;
|
|
59
|
-
/** Relative POSIX path -> canonical base64. */
|
|
60
|
-
readonly binaryFiles: ReadonlyMap<string, string>;
|
|
61
|
-
}
|
|
62
|
-
export declare function renderProvisionBundle(input: RenderProvisionBundleInput): RenderedProject;
|
|
63
|
-
/**
|
|
64
|
-
* Normalizes both slash styles and rejects anything that could escape the
|
|
65
|
-
* target. Returns the path a host will join onto its destination, so every
|
|
66
|
-
* rule below runs on that final string — never on the raw bundle key.
|
|
67
|
-
*/
|
|
68
|
-
export declare function safeTarget(rawPath: string): string;
|
|
69
|
-
export declare function isCanonicalBase64(value: string): boolean;
|
|
70
|
-
//# sourceMappingURL=renderProvisionBundle.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderProvisionBundle.d.ts","sourceRoot":"","sources":["../../src/provision/renderProvisionBundle.ts"],"names":[],"mappings":"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"}
|