@mpfrontend/ftg-cli 0.0.0-stage → 0.1.0

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/dist/design.js ADDED
@@ -0,0 +1,503 @@
1
+ import { readFile, lstat, realpath, mkdir, writeFile, rename, unlink } from 'node:fs/promises';
2
+ import { readFileSync } from 'node:fs';
3
+ import { dirname, resolve, relative, join } from 'node:path';
4
+ import { createHash, randomUUID } from 'node:crypto';
5
+ // A finite reviewed-export profile, not a Figma extractor or a business/React generator.
6
+ const cliVersion = String(JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version);
7
+ export class DesignError extends Error {
8
+ exitCode;
9
+ constructor(message, exitCode = 2) {
10
+ super(message);
11
+ this.exitCode = exitCode;
12
+ }
13
+ }
14
+ const sha = (text) => createHash('sha256').update(text).digest('hex');
15
+ const hex = (value) => typeof value === 'string' && /^[a-f0-9]{64}$/.test(value);
16
+ function ensure(value, message, code = 2) { if (!value)
17
+ throw new DesignError(message, code); }
18
+ function text(value) { return typeof value === 'string' && value.length > 0 && value.length <= 1024 && !/[\u0000-\u001f]/.test(value); }
19
+ function id(value) { return typeof value === 'string' && /^[a-zA-Z0-9_.:-]{1,160}$/.test(value) && !['__proto__', 'prototype', 'constructor'].includes(value); }
20
+ function object(value, keys) {
21
+ ensure(value !== null && typeof value === 'object' && !Array.isArray(value), 'INVALID_DESIGN_OBJECT');
22
+ const result = value;
23
+ ensure(Object.keys(result).every(key => !['__proto__', 'constructor', 'prototype'].includes(key)), 'UNSAFE_DESIGN_KEY');
24
+ if (keys)
25
+ ensure(Object.keys(result).length === keys.length && keys.every(key => Object.hasOwn(result, key)), 'INVALID_DESIGN_FIELDS');
26
+ return result;
27
+ }
28
+ function list(value) { ensure(Array.isArray(value) && value.length <= 3000, 'INVALID_DESIGN_LIST'); return value; }
29
+ function unique(values, message = 'DUPLICATE_DESIGN_ID') { ensure(new Set(values).size === values.length, message); }
30
+ function canonical(value, depth = 0) {
31
+ ensure(depth < 64, 'DESIGN_STRUCTURE_TOO_DEEP');
32
+ if (Array.isArray(value))
33
+ return value.map(item => canonical(item, depth + 1));
34
+ if (value && typeof value === 'object')
35
+ return Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b, 'en')).map(([key, item]) => [key, canonical(item, depth + 1)]));
36
+ return value;
37
+ }
38
+ const encode = (value) => JSON.stringify(canonical(value), null, 2) + '\n';
39
+ function safePath(path) {
40
+ ensure(typeof path === 'string' && path.length <= 500 && /^[a-zA-Z0-9_./-]+$/.test(path) &&
41
+ path.split('/').every(part => part && part !== '.' && part !== '..' && !['.git', '.aws', '.codex', '.agents', '.claude', 'node_modules'].includes(part)), 'UNSAFE_DESIGN_PATH', 4);
42
+ }
43
+ async function rawBytes(root, path) {
44
+ safePath(path);
45
+ let current = root;
46
+ for (const part of path.split('/')) {
47
+ current = join(current, part);
48
+ try {
49
+ const info = await lstat(current);
50
+ ensure(!info.isSymbolicLink(), 'DESIGN_PATH_SYMLINK', 4);
51
+ ensure(current === join(root, path) ? info.isFile() : info.isDirectory(), 'DESIGN_PATH_KIND', 4);
52
+ if (current === join(root, path))
53
+ ensure(info.size <= 5 * 1024 * 1024, 'DESIGN_FILE_TOO_LARGE');
54
+ }
55
+ catch (error) {
56
+ if (error.code === 'ENOENT')
57
+ return undefined;
58
+ throw error;
59
+ }
60
+ }
61
+ const result = await readFile(current);
62
+ ensure(result.length <= 5 * 1024 * 1024, 'DESIGN_FILE_TOO_LARGE');
63
+ return result;
64
+ }
65
+ async function bytes(root, path) { return (await rawBytes(root, path))?.toString('utf8'); }
66
+ function json(value) { ensure(value !== undefined, 'DESIGN_FILE_MISSING'); try {
67
+ return JSON.parse(value);
68
+ }
69
+ catch {
70
+ throw new DesignError('INVALID_DESIGN_JSON');
71
+ } }
72
+ function parseSnapshot(raw) {
73
+ const value = object(raw, ['schemaVersion', 'source', 'modes', 'tokens', 'components', 'assets']);
74
+ ensure(value.schemaVersion === 1, 'UNSUPPORTED_DESIGN_SNAPSHOT');
75
+ const source = object(value.source, ['fileKey', 'nodeId', 'revision', 'capturedAt', 'extractorVersion']);
76
+ ensure(id(source.fileKey) && id(source.nodeId) && (source.revision === null || text(source.revision)) && text(source.extractorVersion) &&
77
+ (source.capturedAt === null || typeof source.capturedAt === 'string' && /^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$/.test(source.capturedAt) && Number.isFinite(Date.parse(source.capturedAt))), 'INVALID_DESIGN_SOURCE');
78
+ ensure(encode(value.modes) === encode(['light', 'dark']), 'DESIGN_LIGHT_DARK_REQUIRED');
79
+ const tokens = list(value.tokens).map(raw => {
80
+ const token = object(raw, ['id', 'name', 'type', 'values']);
81
+ ensure(id(token.id) && text(token.name) && ['color', 'dimension', 'number', 'string'].includes(String(token.type)), 'INVALID_DESIGN_TOKEN');
82
+ const values = object(token.values, ['light', 'dark']);
83
+ for (const raw of Object.values(values)) {
84
+ if (raw && typeof raw === 'object') {
85
+ const item = object(raw);
86
+ if (Object.hasOwn(item, 'alias')) {
87
+ object(item, ['alias']);
88
+ ensure(id(item.alias), 'INVALID_DESIGN_ALIAS');
89
+ }
90
+ else {
91
+ object(item, ['value', 'unit']);
92
+ ensure(token.type === 'dimension' && typeof item.value === 'number' && Number.isFinite(item.value) && Math.abs(item.value) <= 1000000 && ['px', 'rem', 'em', '%'].includes(String(item.unit)), 'INVALID_DESIGN_DIMENSION');
93
+ }
94
+ }
95
+ else if (token.type === 'color')
96
+ ensure(typeof raw === 'string' && /^#(?:[a-f0-9]{3}|[a-f0-9]{4}|[a-f0-9]{6}|[a-f0-9]{8})$/i.test(raw), 'INVALID_DESIGN_COLOR');
97
+ else if (token.type === 'number')
98
+ ensure(typeof raw === 'number' && Number.isFinite(raw) && Math.abs(raw) <= 1000000, 'INVALID_DESIGN_NUMBER');
99
+ else if (token.type === 'string')
100
+ ensure(typeof raw === 'string' && raw.length > 0 && raw.length <= 256 && /^[a-zA-Z0-9 _.,-]+$/.test(raw), 'UNSUPPORTED_DESIGN_STRING');
101
+ else
102
+ throw new DesignError('INVALID_DESIGN_DIMENSION');
103
+ }
104
+ return token;
105
+ });
106
+ unique(tokens.map(t => t.id));
107
+ const components = list(value.components).map(raw => {
108
+ const component = object(raw, ['id', 'name', 'variants', 'properties', 'behavior', 'assets']);
109
+ ensure(id(component.id) && text(component.name), 'INVALID_DESIGN_COMPONENT');
110
+ for (const [key, values] of Object.entries(object(component.variants))) {
111
+ ensure(id(key), 'INVALID_DESIGN_VARIANT');
112
+ const entries = list(values);
113
+ ensure(entries.every(text), 'INVALID_DESIGN_VARIANT');
114
+ unique(entries);
115
+ }
116
+ ensure(Object.entries(object(component.properties)).every(([key, value]) => id(key) && text(value)), 'INVALID_DESIGN_PROPERTY');
117
+ const behavior = object(component.behavior, ['status', 'description']);
118
+ ensure(['known', 'unknown'].includes(String(behavior.status)) && text(behavior.description), 'INVALID_DESIGN_BEHAVIOR');
119
+ ensure(list(component.assets).every(id), 'INVALID_DESIGN_ASSET_REFERENCE');
120
+ unique(component.assets);
121
+ return component;
122
+ });
123
+ unique(components.map(c => c.id));
124
+ const assets = list(value.assets).map(raw => {
125
+ const asset = object(raw, ['id', 'sha256', 'mimeType', 'license']);
126
+ ensure(id(asset.id) && hex(asset.sha256) && text(asset.mimeType) && text(asset.license), 'INVALID_DESIGN_ASSET');
127
+ return asset;
128
+ });
129
+ unique(assets.map(a => a.id));
130
+ const snapshot = { ...value, tokens: tokens.sort((a, b) => a.id.localeCompare(b.id, 'en')), components: components.sort((a, b) => a.id.localeCompare(b.id, 'en')), assets: assets.sort((a, b) => a.id.localeCompare(b.id, 'en')) };
131
+ for (const token of snapshot.tokens)
132
+ for (const mode of snapshot.modes)
133
+ resolveValue(snapshot, token, mode, new Set());
134
+ for (const component of components)
135
+ ensure(component.assets.every(id => assets.some(a => a.id === id)), 'MISSING_DESIGN_ASSET');
136
+ return snapshot;
137
+ }
138
+ function resolveValue(snapshot, token, mode, visited) {
139
+ ensure(!visited.has(token.id) && visited.size < 64, 'DESIGN_ALIAS_CYCLE');
140
+ const value = token.values[mode];
141
+ if (value && typeof value === 'object' && 'alias' in value) {
142
+ const target = snapshot.tokens.find(t => t.id === value.alias);
143
+ ensure(target && target.type === token.type, 'UNRESOLVED_OR_INCOMPATIBLE_DESIGN_ALIAS');
144
+ return resolveValue(snapshot, target, mode, new Set([...visited, token.id]));
145
+ }
146
+ return value;
147
+ }
148
+ function parseBinding(raw) {
149
+ const value = object(raw, ['schemaVersion', 'id', 'source', 'brandId', 'modeAttribute', 'stateDirectory', 'outputDirectory', 'tokens', 'components', 'ignoredTokens', 'ignoredComponents']);
150
+ ensure(value.schemaVersion === 1 && typeof value.id === 'string' && /^[a-z][a-z0-9-]{0,63}$/.test(value.id), 'INVALID_DESIGN_BINDING');
151
+ const source = object(value.source, ['fileKey', 'nodeId']);
152
+ ensure(id(source.fileKey) && id(source.nodeId), 'INVALID_DESIGN_BINDING_SOURCE');
153
+ ensure(typeof value.brandId === 'string' && /^[a-z][a-z0-9-]{0,63}$/.test(value.brandId) && ['data-mode', 'data-theme'].includes(String(value.modeAttribute)), 'INVALID_DESIGN_BRAND_SELECTOR');
154
+ safePath(value.stateDirectory);
155
+ safePath(value.outputDirectory);
156
+ ensure(value.stateDirectory === '.mpfrontend/design/' + value.id && /^(?:themes|packages)\/.+\/generated$/.test(value.outputDirectory), 'INVALID_DESIGN_OWNED_DIRECTORY', 4);
157
+ const tokens = list(value.tokens).map(raw => { const item = object(raw, ['sourceId', 'cssName']); ensure(id(item.sourceId) && typeof item.cssName === 'string' && /^--[a-z][a-z0-9-]*$/.test(item.cssName), 'INVALID_DESIGN_TOKEN_BINDING'); return item; });
158
+ unique(tokens.map(t => t.sourceId));
159
+ unique(tokens.map(t => t.cssName), 'DUPLICATE_DESIGN_CSS_NAME');
160
+ const components = list(value.components).map(raw => {
161
+ const item = object(raw, ['sourceId', 'adapter', 'tests']);
162
+ ensure(id(item.sourceId), 'INVALID_DESIGN_COMPONENT_BINDING');
163
+ safePath(item.adapter);
164
+ const tests = list(item.tests);
165
+ ensure(tests.length > 0, 'DESIGN_COMPONENT_TESTS_REQUIRED');
166
+ for (const path of tests)
167
+ safePath(path);
168
+ unique(tests);
169
+ return item;
170
+ });
171
+ unique(components.map(c => c.sourceId));
172
+ for (const entry of components)
173
+ for (const path of [entry.adapter, ...entry.tests])
174
+ ensure(!path.startsWith('.mpfrontend/') && !path.startsWith(value.outputDirectory + '/'), 'DESIGN_AUTHORED_PATH_REQUIRED', 4);
175
+ const ignored = (raw) => list(raw).map(raw => { const item = object(raw, ['sourceId', 'reason']); ensure(id(item.sourceId) && text(item.reason), 'INVALID_DESIGN_IGNORED_MAPPING'); return item; });
176
+ const ignoredTokens = ignored(value.ignoredTokens), ignoredComponents = ignored(value.ignoredComponents);
177
+ unique([...tokens.map(t => t.sourceId), ...ignoredTokens.map(t => t.sourceId)]);
178
+ unique([...components.map(c => c.sourceId), ...ignoredComponents.map(c => c.sourceId)]);
179
+ return { ...value, tokens, components, ignoredTokens, ignoredComponents };
180
+ }
181
+ async function context(bindingPath) {
182
+ const root = await realpath(dirname(resolve(bindingPath))), bindingFile = join(root, relative(dirname(resolve(bindingPath)), resolve(bindingPath)));
183
+ const binding = parseBinding(json(await bytes(root, relative(root, bindingFile))));
184
+ const result = { root, bindingFile, binding, bindingHash: sha(encode(binding)) };
185
+ ensure(await bytes(root, binding.stateDirectory + '/.design-write.lock') === undefined, 'DESIGN_SYNC_BUSY', 4);
186
+ return result;
187
+ }
188
+ export async function inspectDesignBinding(bindingPath) {
189
+ const ctx = await context(bindingPath);
190
+ return { bindingFile: ctx.bindingFile, bindingHash: ctx.bindingHash, id: ctx.binding.id, source: ctx.binding.source,
191
+ stateDirectory: ctx.binding.stateDirectory, outputDirectory: ctx.binding.outputDirectory };
192
+ }
193
+ export async function inspectDesignSnapshot(snapshotPath) {
194
+ const source = resolve(snapshotPath), sourceRoot = await realpath(dirname(source)), raw = await rawBytes(sourceRoot, relative(dirname(source), source));
195
+ const snapshot = parseSnapshot(json(raw?.toString('utf8'))), content = encode(snapshot);
196
+ return { snapshotFile: source, rawHash: createHash('sha256').update(raw).digest('hex'), candidateHash: sha(content), source: snapshot.source };
197
+ }
198
+ async function candidate(ctx, hash) {
199
+ ensure(hex(hash), 'INVALID_DESIGN_CANDIDATE');
200
+ const value = parseSnapshot(json(await bytes(ctx.root, ctx.binding.stateDirectory + '/snapshots/' + hash + '.json')));
201
+ ensure(sha(encode(value)) === hash, 'DESIGN_CANDIDATE_DRIFT', 3);
202
+ ensure(encode({ fileKey: value.source.fileKey, nodeId: value.source.nodeId }) === encode(ctx.binding.source), 'DESIGN_SOURCE_MISMATCH');
203
+ return value;
204
+ }
205
+ function diagnostics(binding, snapshot) {
206
+ const issues = [];
207
+ for (const token of snapshot.tokens)
208
+ if (!binding.tokens.some(t => t.sourceId === token.id) && !binding.ignoredTokens.some(t => t.sourceId === token.id))
209
+ issues.push('UNMAPPED_TOKEN:' + token.id);
210
+ for (const token of binding.tokens)
211
+ if (!snapshot.tokens.some(t => t.id === token.sourceId))
212
+ issues.push('MISSING_BOUND_TOKEN:' + token.sourceId);
213
+ for (const component of snapshot.components) {
214
+ if (!binding.components.some(c => c.sourceId === component.id) && !binding.ignoredComponents.some(c => c.sourceId === component.id))
215
+ issues.push('UNMAPPED_COMPONENT:' + component.id);
216
+ if (component.behavior.status === 'unknown' && binding.components.some(c => c.sourceId === component.id))
217
+ issues.push('UNKNOWN_COMPONENT_BEHAVIOR:' + component.id);
218
+ }
219
+ for (const asset of snapshot.assets)
220
+ if (asset.license === 'unknown')
221
+ issues.push('UNRESOLVED_ASSET_LICENSE:' + asset.id);
222
+ return issues.sort();
223
+ }
224
+ async function baseline(ctx) {
225
+ const old = await bytes(ctx.root, ctx.binding.stateDirectory + '/baseline.json');
226
+ if (old === undefined)
227
+ return { bytes: old, value: undefined, snapshot: undefined };
228
+ const value = object(json(old), ['schemaVersion', 'generator', 'cliVersion', 'candidateHash', 'planId', 'bindingHash', 'evidenceHash', 'evidencePath']);
229
+ ensure(value.schemaVersion === 1 && value.generator === 'MPFrontendDesign' && text(value.cliVersion) && [value.candidateHash, value.planId, value.bindingHash, value.evidenceHash].every(hex), 'INVALID_DESIGN_BASELINE', 4);
230
+ safePath(value.evidencePath);
231
+ ensure(value.evidencePath.startsWith('evidence/'), 'INVALID_DESIGN_BASELINE_EVIDENCE', 4);
232
+ return { bytes: old, value: value, snapshot: await candidate(ctx, value.candidateHash) };
233
+ }
234
+ function changes(before, after) {
235
+ const result = [];
236
+ for (const [kind, old, next] of [['token', before?.tokens ?? [], after.tokens], ['component', before?.components ?? [], after.components], ['asset', before?.assets ?? [], after.assets]]) {
237
+ for (const id of [...new Set([...old, ...next].map(item => item.id))].sort()) {
238
+ const a = old.find(item => item.id === id), b = next.find(item => item.id === id);
239
+ if (encode(a) === encode(b))
240
+ continue;
241
+ const action = !a ? 'added' : !b ? 'removed' : 'changed';
242
+ const areas = a && b ? [...new Set([...Object.keys(a), ...Object.keys(b)])].filter(key => encode(a[key]) !== encode(b[key])).sort() : [];
243
+ const severity = action === 'removed' || areas.some(key => ['type', 'properties', 'behavior', 'variants'].includes(key)) ? 'breaking' : action === 'added' ? 'additive' : 'visual';
244
+ result.push({ kind, id, action, areas, severity });
245
+ }
246
+ }
247
+ return result;
248
+ }
249
+ function outputs(ctx, snapshot) {
250
+ const css = (mode) => ctx.binding.tokens.map(item => {
251
+ const token = snapshot.tokens.find(t => t.id === item.sourceId);
252
+ ensure(token, 'MISSING_BOUND_TOKEN');
253
+ const raw = resolveValue(snapshot, token, mode, new Set());
254
+ const value = typeof raw === 'object' && 'value' in raw ? String(raw.value) + raw.unit : token.type === 'string' ? JSON.stringify(raw) : String(raw);
255
+ return ' ' + item.cssName + ': ' + value + ';';
256
+ }).sort().join('\n');
257
+ const folder = ctx.binding.outputDirectory;
258
+ const selector = ':root[data-brand="' + ctx.binding.brandId + '"]', mode = ctx.binding.modeAttribute;
259
+ return { [folder + '/tokens.gen.css']: '/* @generated by MPFrontendDesign; consumer overrides remain authored. */\n' + selector + ', ' + selector + '[' + mode + '="light"] {\n' + css('light') + '\n}\n' + selector + '[' + mode + '="dark"] {\n' + css('dark') + '\n}\n@media (prefers-color-scheme:dark) {\n' + selector + '[' + mode + '="system"] {\n' + css('dark') + '\n}\n}\n',
260
+ [folder + '/components.gen.json']: encode({ schemaVersion: 1, generator: 'MPFrontendDesign', components: snapshot.components.filter(c => ctx.binding.components.some(b => b.sourceId === c.id)), assets: snapshot.assets }) };
261
+ }
262
+ async function ownership(ctx) {
263
+ const old = await bytes(ctx.root, ctx.binding.stateDirectory + '/ownership.json');
264
+ if (old === undefined)
265
+ return { bytes: old, value: undefined };
266
+ const value = object(json(old), ['schemaVersion', 'generator', 'cliVersion', 'bindingHash', 'candidateHash', 'planId', 'outputs']);
267
+ ensure(value.schemaVersion === 1 && value.generator === 'MPFrontendDesign' && text(value.cliVersion) && [value.bindingHash, value.candidateHash, value.planId].every(hex), 'INVALID_DESIGN_OWNERSHIP', 4);
268
+ const files = object(value.outputs);
269
+ ensure(Object.keys(files).length === 2 && Object.keys(files).every(path => [ctx.binding.outputDirectory + '/tokens.gen.css', ctx.binding.outputDirectory + '/components.gen.json'].includes(path)) && Object.values(files).every(hex), 'DESIGN_OUTPUT_LOCATION_OR_OWNERSHIP_CHANGED', 4);
270
+ for (const [path, digest] of Object.entries(files))
271
+ ensure(sha(await bytes(ctx.root, path) ?? '') === digest, 'DESIGN_OUTPUT_DRIFT:' + path, 3);
272
+ return { bytes: old, value: value };
273
+ }
274
+ async function buildPlan(ctx, hash) {
275
+ const next = await candidate(ctx, hash), accepted = await baseline(ctx), owned = await ownership(ctx), delta = changes(accepted.snapshot, next);
276
+ const issues = diagnostics(ctx.binding, next), generated = issues.length ? {} : outputs(ctx, next), before = {}, after = {};
277
+ for (const [path, content] of Object.entries(generated)) {
278
+ const old = await bytes(ctx.root, path);
279
+ ensure(old === undefined || owned.value?.outputs[path] === sha(old), 'AUTHORED_DESIGN_OUTPUT_COLLISION:' + path, 4);
280
+ before[path] = old === undefined ? null : sha(old);
281
+ after[path] = sha(content);
282
+ }
283
+ const tasks = delta.filter(change => change.kind !== 'token' || change.action === 'removed' || change.areas.includes('name')).map(change => {
284
+ const mapping = ctx.binding.components.find(c => c.sourceId === change.id);
285
+ return { id: change.kind + ':' + change.id + ':' + change.action, kind: change.kind === 'component' ? 'component' : change.kind === 'asset' ? 'asset' : 'migration', requiredFiles: mapping ? [mapping.adapter, ...mapping.tests] : [] };
286
+ });
287
+ for (const mapping of ctx.binding.components)
288
+ if (next.components.some(c => c.id === mapping.sourceId) && !delta.some(change => change.kind === 'component' && change.id === mapping.sourceId))
289
+ tasks.push({ id: 'component:' + mapping.sourceId + ':verify', kind: 'component', requiredFiles: [mapping.adapter, ...mapping.tests] });
290
+ for (const change of delta.filter(c => c.kind === 'component' && c.action === 'removed'))
291
+ if (!ctx.binding.components.some(c => c.sourceId === change.id))
292
+ issues.push('REMOVED_COMPONENT_BINDING_REQUIRED:' + change.id);
293
+ const draft = { schemaVersion: 1, generator: 'MPFrontendDesign', cliVersion, bindingFile: ctx.bindingFile, bindingHash: ctx.bindingHash, candidateHash: hash,
294
+ baselineHash: accepted.bytes === undefined ? null : sha(accepted.bytes), ownershipHash: owned.bytes === undefined ? null : sha(owned.bytes), before, after, changes: delta, tasks,
295
+ checks: ['unit', 'typecheck', 'visual-light', 'visual-dark', 'rtl', 'keyboard', 'contrast', ...(next.assets.length ? ['asset-rights'] : [])], diagnostics: issues };
296
+ return { ...draft, planId: sha(encode(draft)) };
297
+ }
298
+ async function writeBatch(ctx, desired, expected, dryRun) {
299
+ const changed = [];
300
+ const guardBinding = async () => ensure(sha(encode(parseBinding(json(await bytes(ctx.root, relative(ctx.root, ctx.bindingFile)))))) === ctx.bindingHash, 'CONCURRENT_DESIGN_BINDING_EDIT', 4);
301
+ await guardBinding();
302
+ for (const [path, value] of Object.entries(desired)) {
303
+ const old = await bytes(ctx.root, path);
304
+ ensure(old === expected[path], 'CONCURRENT_DESIGN_EDIT:' + path, 4);
305
+ if (old !== value)
306
+ changed.push(path);
307
+ }
308
+ if (dryRun || !changed.length)
309
+ return changed;
310
+ const marker = ctx.binding.stateDirectory + '/.design-write.lock', owner = randomUUID(), staged = new Map(), replaced = [];
311
+ let acquired = false;
312
+ try {
313
+ await mkdir(join(ctx.root, ctx.binding.stateDirectory), { recursive: true });
314
+ await bytes(ctx.root, marker);
315
+ try {
316
+ await writeFile(join(ctx.root, marker), owner, { flag: 'wx' });
317
+ acquired = true;
318
+ }
319
+ catch (error) {
320
+ if (error.code === 'EEXIST')
321
+ throw new DesignError('DESIGN_SYNC_BUSY', 4);
322
+ throw error;
323
+ }
324
+ for (const path of changed) {
325
+ ensure(await bytes(ctx.root, path) === expected[path], 'CONCURRENT_DESIGN_EDIT:' + path, 4);
326
+ await mkdir(dirname(join(ctx.root, path)), { recursive: true });
327
+ await bytes(ctx.root, path);
328
+ const stage = relative(ctx.root, join(dirname(join(ctx.root, path)), '.design-stage-' + randomUUID()));
329
+ await writeFile(join(ctx.root, stage), desired[path], { flag: 'wx' });
330
+ staged.set(path, stage);
331
+ }
332
+ await guardBinding();
333
+ for (const [path, stage] of staged) {
334
+ ensure(await bytes(ctx.root, path) === expected[path], 'CONCURRENT_DESIGN_EDIT:' + path, 4);
335
+ await rename(join(ctx.root, stage), join(ctx.root, path));
336
+ staged.delete(path);
337
+ replaced.push(path);
338
+ }
339
+ }
340
+ catch (error) {
341
+ const conflicts = [];
342
+ for (const path of replaced.reverse()) {
343
+ if (await bytes(ctx.root, path) !== desired[path]) {
344
+ conflicts.push(path);
345
+ continue;
346
+ }
347
+ if (expected[path] === undefined)
348
+ await unlink(join(ctx.root, path));
349
+ else
350
+ await writeFile(join(ctx.root, path), expected[path]);
351
+ }
352
+ ensure(!conflicts.length, 'DESIGN_ROLLBACK_CONFLICT:' + conflicts.join(','), 4);
353
+ throw error;
354
+ }
355
+ finally {
356
+ for (const path of staged.values())
357
+ await unlink(join(ctx.root, path)).catch(() => undefined);
358
+ if (acquired && await bytes(ctx.root, marker) === owner)
359
+ await unlink(join(ctx.root, marker));
360
+ }
361
+ return changed;
362
+ }
363
+ async function readPlan(path) {
364
+ const planPath = resolve(path), sourceRoot = await realpath(dirname(planPath)), raw = object(json(await bytes(sourceRoot, relative(dirname(planPath), planPath))));
365
+ ensure(typeof raw.bindingFile === 'string' && hex(raw.planId), 'INVALID_DESIGN_PLAN');
366
+ const ctx = await context(raw.bindingFile), expected = join(ctx.root, ctx.binding.stateDirectory, 'plans', raw.planId + '.json');
367
+ const local = await consumerPath(ctx, planPath);
368
+ ensure(join(ctx.root, local) === expected, 'DESIGN_PLAN_OUTSIDE_OWNED_STATE', 4);
369
+ const bytesValue = await bytes(ctx.root, local);
370
+ ensure(bytesValue !== undefined, 'DESIGN_PLAN_MISSING');
371
+ const plan = JSON.parse(bytesValue), { planId, ...draft } = plan;
372
+ ensure(plan.schemaVersion === 1 && plan.generator === 'MPFrontendDesign' && hex(plan.candidateHash) && sha(encode(draft)) === planId, 'DESIGN_PLAN_DRIFT', 3);
373
+ ensure(plan.cliVersion === cliVersion && plan.bindingHash === ctx.bindingHash, 'STALE_DESIGN_PLAN', 3);
374
+ return { ctx, plan, planPath };
375
+ }
376
+ // Normalize operating-system root aliases (/var -> /private/var) without resolving consumer
377
+ // child symlinks away: bytes() must still inspect and reject every child link.
378
+ async function consumerPath(ctx, path) {
379
+ const absolute = resolve(path);
380
+ let parent = dirname(absolute);
381
+ for (let depth = 0; depth < 64; depth++) {
382
+ try {
383
+ if (await realpath(parent) === ctx.root) {
384
+ const local = relative(parent, absolute);
385
+ safePath(local);
386
+ return local;
387
+ }
388
+ }
389
+ catch (error) {
390
+ if (error.code !== 'ENOENT')
391
+ throw error;
392
+ }
393
+ const next = dirname(parent);
394
+ if (next === parent)
395
+ break;
396
+ parent = next;
397
+ }
398
+ throw new DesignError('UNSAFE_DESIGN_PATH', 4);
399
+ }
400
+ async function verifyEvidence(ctx, plan, path) {
401
+ const file = await consumerPath(ctx, path);
402
+ ensure(file.startsWith('evidence/'), 'DESIGN_EVIDENCE_LOCATION_REQUIRED', 4);
403
+ const reportBytes = await bytes(ctx.root, file), raw = object(json(reportBytes), ['schemaVersion', 'planId', 'candidateHash', 'bindingHash', 'cliVersion', 'review', 'checks', 'tasks']);
404
+ ensure(raw.schemaVersion === 1 && raw.planId === plan.planId && raw.candidateHash === plan.candidateHash && raw.bindingHash === plan.bindingHash && raw.cliVersion === cliVersion, 'STALE_DESIGN_EVIDENCE', 3);
405
+ const review = object(raw.review, ['approved', 'reviewer']);
406
+ ensure(review.approved === true && text(review.reviewer), 'DESIGN_REVIEW_REQUIRED', 3);
407
+ const report = raw;
408
+ list(report.checks);
409
+ list(report.tasks);
410
+ unique(report.checks.map(c => c.name));
411
+ unique(report.tasks.map(t => t.id));
412
+ ensure(report.checks.every(check => plan.checks.includes(check.name)) && report.tasks.every(task => plan.tasks.some(t => t.id === task.id)), 'DESIGN_EVIDENCE_SCOPE_MISMATCH', 3);
413
+ const artifact = async (raw) => { const item = object(raw, ['path', 'sha256']); safePath(item.path); ensure(hex(item.sha256), 'INVALID_DESIGN_EVIDENCE_DIGEST'); const current = await rawBytes(ctx.root, item.path); ensure(current !== undefined && createHash('sha256').update(current).digest('hex') === item.sha256, 'DESIGN_EVIDENCE_ARTIFACT_DRIFT', 3); };
414
+ for (const required of plan.checks) {
415
+ const check = report.checks.find(c => c.name === required);
416
+ ensure(check && check.passed === true && text(check.command), 'DESIGN_CHECK_NOT_PASSED:' + required, 3);
417
+ object(check, ['name', 'passed', 'command', 'artifact']);
418
+ ensure(check.artifact.path.startsWith('evidence/'), 'DESIGN_CHECK_ARTIFACT_LOCATION_REQUIRED', 4);
419
+ await artifact(check.artifact);
420
+ }
421
+ for (const task of plan.tasks) {
422
+ const completed = report.tasks.find(t => t.id === task.id);
423
+ ensure(completed && completed.status === 'implemented', 'DESIGN_TASK_NOT_IMPLEMENTED:' + task.id, 3);
424
+ object(completed, ['id', 'status', 'files']);
425
+ list(completed.files);
426
+ ensure(completed.files.length > 0 && task.requiredFiles.every(path => completed.files.some(file => file.path === path)), 'DESIGN_TASK_FILES_REQUIRED', 3);
427
+ unique(completed.files.map(f => f.path));
428
+ for (const file of completed.files) {
429
+ ensure(!file.path.startsWith(ctx.binding.stateDirectory + '/') && !file.path.startsWith(ctx.binding.outputDirectory + '/'), 'DESIGN_AUTHORED_TASK_EVIDENCE_REQUIRED', 4);
430
+ await artifact(file);
431
+ }
432
+ }
433
+ return sha(reportBytes);
434
+ }
435
+ export async function designCommand(options) {
436
+ const dryRun = options.dryRun ?? false;
437
+ if (options.command === 'apply' || options.command === 'accept') {
438
+ ensure(options.planPath, 'DESIGN_PLAN_REQUIRED');
439
+ const { ctx, plan } = await readPlan(options.planPath);
440
+ ensure(!plan.diagnostics.length, 'UNRESOLVED_DESIGN_PLAN', 2);
441
+ const next = await candidate(ctx, plan.candidateHash), owned = await ownership(ctx), accepted = await baseline(ctx), desired = outputs(ctx, next);
442
+ ensure(encode(Object.fromEntries(Object.entries(desired).map(([path, value]) => [path, sha(value)]))) === encode(plan.after), 'DESIGN_PLAN_OUTPUT_MISMATCH', 3);
443
+ if (options.command === 'apply') {
444
+ if (owned.value?.planId === plan.planId && owned.value.candidateHash === plan.candidateHash) {
445
+ ensure(owned.value.cliVersion === cliVersion && owned.value.bindingHash === ctx.bindingHash && encode(owned.value.outputs) === encode(plan.after), 'DESIGN_APPLIED_OUTPUT_MISMATCH', 3);
446
+ return { ok: true, command: 'apply', dryRun, changed: [], planId: plan.planId };
447
+ }
448
+ const fresh = await buildPlan(ctx, plan.candidateHash);
449
+ ensure(fresh.planId === plan.planId, 'STALE_DESIGN_PLAN', 3);
450
+ const expected = {};
451
+ for (const path of Object.keys(desired))
452
+ expected[path] = await bytes(ctx.root, path);
453
+ const ownershipPath = ctx.binding.stateDirectory + '/ownership.json';
454
+ expected[ownershipPath] = owned.bytes;
455
+ desired[ownershipPath] = encode({ schemaVersion: 1, generator: 'MPFrontendDesign', cliVersion, bindingHash: ctx.bindingHash, candidateHash: plan.candidateHash, planId: plan.planId, outputs: plan.after });
456
+ return { ok: true, command: 'apply', dryRun, planId: plan.planId, changed: await writeBatch(ctx, desired, expected, dryRun), unresolvedTasks: plan.tasks };
457
+ }
458
+ ensure(owned.value?.planId === plan.planId && owned.value.candidateHash === plan.candidateHash && owned.value.bindingHash === ctx.bindingHash && owned.value.cliVersion === cliVersion && encode(owned.value.outputs) === encode(plan.after), 'DESIGN_PLAN_NOT_APPLIED', 3);
459
+ ensure(options.evidencePath, 'DESIGN_EVIDENCE_REQUIRED');
460
+ const evidenceHash = await verifyEvidence(ctx, plan, options.evidencePath);
461
+ const acceptedValue = { schemaVersion: 1, generator: 'MPFrontendDesign', cliVersion, candidateHash: plan.candidateHash, planId: plan.planId, bindingHash: ctx.bindingHash, evidenceHash, evidencePath: await consumerPath(ctx, options.evidencePath) };
462
+ const encoded = encode(acceptedValue), path = ctx.binding.stateDirectory + '/baseline.json';
463
+ if (accepted.bytes === encoded)
464
+ return { ok: true, command: 'accept', dryRun, changed: [], candidateHash: plan.candidateHash };
465
+ ensure((accepted.bytes === undefined ? null : sha(accepted.bytes)) === plan.baselineHash, 'STALE_DESIGN_BASELINE', 3);
466
+ return { ok: true, command: 'accept', dryRun, candidateHash: plan.candidateHash, changed: await writeBatch(ctx, { [path]: encoded }, { [path]: accepted.bytes }, dryRun) };
467
+ }
468
+ ensure(options.bindingPath, 'DESIGN_BINDING_REQUIRED');
469
+ const ctx = await context(options.bindingPath);
470
+ if (options.command === 'import') {
471
+ ensure(options.snapshotPath, 'DESIGN_SNAPSHOT_REQUIRED');
472
+ const source = resolve(options.snapshotPath), sourceRoot = await realpath(dirname(source));
473
+ const snapshot = parseSnapshot(json(await bytes(sourceRoot, relative(dirname(source), source))));
474
+ ensure(encode({ fileKey: snapshot.source.fileKey, nodeId: snapshot.source.nodeId }) === encode(ctx.binding.source), 'DESIGN_SOURCE_MISMATCH');
475
+ const content = encode(snapshot), hash = sha(content), path = ctx.binding.stateDirectory + '/snapshots/' + hash + '.json', old = await bytes(ctx.root, path);
476
+ ensure(old === undefined || old === content, 'IMMUTABLE_DESIGN_CANDIDATE_DRIFT', 3);
477
+ return { ok: true, command: 'import', dryRun, candidateHash: hash, sourceRevision: snapshot.source.revision, diagnostics: diagnostics(ctx.binding, snapshot), changed: await writeBatch(ctx, { [path]: content }, { [path]: old }, dryRun) };
478
+ }
479
+ if (options.command === 'check') {
480
+ const accepted = await baseline(ctx), owned = await ownership(ctx);
481
+ ensure(accepted.value && owned.value, 'DESIGN_BASELINE_NOT_ACCEPTED', 3);
482
+ ensure(accepted.value.cliVersion === cliVersion && accepted.value.bindingHash === ctx.bindingHash && owned.value.candidateHash === accepted.value.candidateHash && owned.value.planId === accepted.value.planId, 'DESIGN_BASELINE_OR_BINDING_DRIFT', 3);
483
+ const wanted = outputs(ctx, accepted.snapshot);
484
+ ensure(encode(Object.fromEntries(Object.entries(wanted).map(([path, value]) => [path, sha(value)]))) === encode(owned.value.outputs), 'DESIGN_ACCEPTED_OUTPUT_DRIFT', 3);
485
+ const reviewed = await readPlan(join(ctx.root, ctx.binding.stateDirectory, 'plans', accepted.value.planId + '.json'));
486
+ ensure(await verifyEvidence(ctx, reviewed.plan, join(ctx.root, accepted.value.evidencePath)) === accepted.value.evidenceHash, 'DESIGN_ACCEPTED_EVIDENCE_DRIFT', 3);
487
+ return { ok: true, command: 'check', scope: 'declared-export-only', candidateHash: accepted.value.candidateHash, sourceRevision: accepted.snapshot.source.revision, checked: Object.keys(wanted).length };
488
+ }
489
+ ensure(['validate', 'diff', 'plan'].includes(options.command), 'UNKNOWN_DESIGN_COMMAND');
490
+ ensure(options.candidate, 'DESIGN_CANDIDATE_REQUIRED');
491
+ const snapshot = await candidate(ctx, options.candidate);
492
+ if (options.command === 'validate') {
493
+ const issues = diagnostics(ctx.binding, snapshot);
494
+ ensure(!issues.length, 'INVALID_DESIGN_MAPPING:' + issues.join(','));
495
+ return { ok: true, command: 'validate', candidateHash: options.candidate, sourceRevision: snapshot.source.revision };
496
+ }
497
+ if (options.command === 'diff')
498
+ return { ok: true, command: 'diff', candidateHash: options.candidate, changes: changes((await baseline(ctx)).snapshot, snapshot), diagnostics: diagnostics(ctx.binding, snapshot) };
499
+ const plan = await buildPlan(ctx, options.candidate), path = ctx.binding.stateDirectory + '/plans/' + plan.planId + '.json', old = await bytes(ctx.root, path), content = encode(plan);
500
+ ensure(old === undefined || old === content, 'IMMUTABLE_DESIGN_PLAN_DRIFT', 3);
501
+ return { ok: true, command: 'plan', dryRun, plan, planPath: join(ctx.root, path), changed: await writeBatch(ctx, { [path]: content }, { [path]: old }, dryRun) };
502
+ }
503
+ //# sourceMappingURL=design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design.js","sourceRoot":"","sources":["../src/design.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type OpenApiDocument, type ResourceSelection, type RequestSelection } from '@mpfrontend/ftg-core';
2
+ export declare const GENERATOR_VERSION = "0.1.0-dev.6";
3
+ export declare const digest: (value: string) => string;
4
+ export declare class InputError extends Error {
5
+ readonly exitCode: number;
6
+ constructor(message: string, exitCode?: number);
7
+ }
8
+ export type GeneratorConfig = {
9
+ openapi: string;
10
+ output: string;
11
+ resources: ResourceSelection[];
12
+ requests?: RequestSelection[];
13
+ };
14
+ export declare function loadContract(path: string): Promise<{
15
+ document: OpenApiDocument;
16
+ bytes: string;
17
+ hash: string;
18
+ }>;
19
+ export declare function generate(configPath: string, { check, dryRun }?: {
20
+ check?: boolean;
21
+ dryRun?: boolean;
22
+ }): Promise<{
23
+ ok: boolean;
24
+ contractHash: string;
25
+ resources: number;
26
+ requests: number;
27
+ changed: string[];
28
+ dryRun: boolean;
29
+ check: boolean;
30
+ }>;