@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/DESIGN-SYNC.md +159 -0
- package/LICENSE +202 -0
- package/README.md +103 -2
- package/dist/catalog.d.ts +20 -0
- package/dist/catalog.js +134 -0
- package/dist/catalog.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +182 -0
- package/dist/cli.js.map +1 -0
- package/dist/design-source.d.ts +41 -0
- package/dist/design-source.js +141 -0
- package/dist/design-source.js.map +1 -0
- package/dist/design.d.ts +187 -0
- package/dist/design.js +503 -0
- package/dist/design.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +185 -0
- package/dist/index.js.map +1 -0
- package/dist/read-models.d.ts +3 -0
- package/dist/read-models.js +207 -0
- package/dist/read-models.js.map +1 -0
- package/package.json +40 -3
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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}>;
|