@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/cli.js
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { generate, InputError } from './index.js';
|
|
3
|
+
import { createApplication, createWorkspace, createFeature, createRoute, createPackage } from '@mpfrontend/nx-plugin';
|
|
4
|
+
import { skillCatalog, installSkills, checkSkills, SkillsError } from '@mpfrontend/ai-skills';
|
|
5
|
+
import { readFileSync } from 'node:fs';
|
|
6
|
+
import { designCommand, DesignError } from './design.js';
|
|
7
|
+
import { designSourceCommand } from './design-source.js';
|
|
8
|
+
import { catalogCheck } from './catalog.js';
|
|
9
|
+
const CLI_VERSION = String(JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version);
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
function option(name) { const index = args.indexOf(name); if (index < 0)
|
|
12
|
+
return undefined; const value = args[index + 1]; if (!value || value.startsWith('--'))
|
|
13
|
+
throw new InputError('MISSING_OPTION_VALUE'); return value; }
|
|
14
|
+
try {
|
|
15
|
+
if (args.includes('--version')) {
|
|
16
|
+
if (args.length !== 1)
|
|
17
|
+
throw new InputError('VERSION_MUST_BE_STANDALONE');
|
|
18
|
+
console.log(CLI_VERSION);
|
|
19
|
+
}
|
|
20
|
+
else if (args[0] === 'design') {
|
|
21
|
+
const command = args[1];
|
|
22
|
+
if (!command)
|
|
23
|
+
throw new InputError('DESIGN_COMMAND_REQUIRED');
|
|
24
|
+
const profiles = {
|
|
25
|
+
import: ['--binding', '--snapshot', '--dry-run', '--json'], validate: ['--binding', '--candidate', '--json'],
|
|
26
|
+
diff: ['--binding', '--candidate', '--json'], plan: ['--binding', '--candidate', '--dry-run', '--json'],
|
|
27
|
+
apply: ['--plan', '--dry-run', '--json'], accept: ['--plan', '--evidence', '--dry-run', '--json'], check: ['--binding', '--json'],
|
|
28
|
+
attach: ['--directory', '--source', '--binding', '--dry-run', '--json'], status: ['--directory', '--json']
|
|
29
|
+
};
|
|
30
|
+
if (!Object.hasOwn(profiles, command))
|
|
31
|
+
throw new InputError('UNKNOWN_DESIGN_COMMAND');
|
|
32
|
+
const seen = new Set();
|
|
33
|
+
for (let index = 2; index < args.length; index++) {
|
|
34
|
+
const flag = args[index];
|
|
35
|
+
if (!profiles[command].includes(flag))
|
|
36
|
+
throw new InputError('UNKNOWN_DESIGN_OPTION');
|
|
37
|
+
if (seen.has(flag))
|
|
38
|
+
throw new InputError('DUPLICATE_DESIGN_OPTION');
|
|
39
|
+
seen.add(flag);
|
|
40
|
+
if (flag !== '--dry-run' && flag !== '--json') {
|
|
41
|
+
const value = args[++index];
|
|
42
|
+
if (!value || value.startsWith('--'))
|
|
43
|
+
throw new InputError('MISSING_OPTION_VALUE');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (command === 'attach' || command === 'status') {
|
|
47
|
+
const directory = option('--directory') ?? process.cwd(), source = option('--source');
|
|
48
|
+
const bindingPath = option('--binding');
|
|
49
|
+
console.log(JSON.stringify(await designSourceCommand({ command, directory, ...(source ? { source } : {}), ...(bindingPath ? { bindingPath } : {}), dryRun: args.includes('--dry-run'), cliVersion: CLI_VERSION })));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const inputs = { bindingPath: option('--binding'), snapshotPath: option('--snapshot'), candidate: option('--candidate'), planPath: option('--plan'), evidencePath: option('--evidence') };
|
|
53
|
+
const supplied = Object.fromEntries(Object.entries(inputs).filter(([, value]) => value !== undefined));
|
|
54
|
+
console.log(JSON.stringify(await designCommand({ command, ...supplied, dryRun: args.includes('--dry-run') })));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (args[0] === 'catalog') {
|
|
58
|
+
if (args[1] !== 'check')
|
|
59
|
+
throw new InputError('UNKNOWN_CATALOG_COMMAND');
|
|
60
|
+
const allowed = new Set(['--app', '--json']), seen = new Set();
|
|
61
|
+
for (let index = 2; index < args.length; index++) {
|
|
62
|
+
const flag = args[index];
|
|
63
|
+
if (!allowed.has(flag))
|
|
64
|
+
throw new InputError('UNKNOWN_CATALOG_OPTION');
|
|
65
|
+
if (seen.has(flag))
|
|
66
|
+
throw new InputError('DUPLICATE_CATALOG_OPTION');
|
|
67
|
+
seen.add(flag);
|
|
68
|
+
if (flag === '--app') {
|
|
69
|
+
const value = args[++index];
|
|
70
|
+
if (!value || value.startsWith('--'))
|
|
71
|
+
throw new InputError('MISSING_OPTION_VALUE');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const app = option('--app');
|
|
75
|
+
if (!app)
|
|
76
|
+
throw new InputError('APP_REQUIRED');
|
|
77
|
+
const result = await catalogCheck(app);
|
|
78
|
+
console.log(JSON.stringify(result));
|
|
79
|
+
if (!result.ok)
|
|
80
|
+
process.exitCode = 3;
|
|
81
|
+
}
|
|
82
|
+
else if (args[0] === 'init') {
|
|
83
|
+
const allowed = new Set(['--name', '--directory', '--design-source', '--dry-run', '--json']), seen = new Set();
|
|
84
|
+
for (let index = 1; index < args.length; index++) {
|
|
85
|
+
const flag = args[index];
|
|
86
|
+
if (!allowed.has(flag))
|
|
87
|
+
throw new InputError('UNKNOWN_INIT_OPTION');
|
|
88
|
+
if (seen.has(flag))
|
|
89
|
+
throw new InputError('DUPLICATE_INIT_OPTION');
|
|
90
|
+
seen.add(flag);
|
|
91
|
+
if (flag !== '--dry-run' && flag !== '--json') {
|
|
92
|
+
const value = args[++index];
|
|
93
|
+
if (!value || value.startsWith('--'))
|
|
94
|
+
throw new InputError('MISSING_OPTION_VALUE');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const name = option('--name'), directory = option('--directory');
|
|
98
|
+
if (!name || !directory)
|
|
99
|
+
throw new InputError('NAME_AND_DIRECTORY_REQUIRED');
|
|
100
|
+
const designSource = (option('--design-source') ?? 'none');
|
|
101
|
+
console.log(JSON.stringify(await createWorkspace({ name, directory, designSource, dryRun: args.includes('--dry-run') })));
|
|
102
|
+
}
|
|
103
|
+
else if (args[0] === 'skills') {
|
|
104
|
+
const directory = option('--directory') ?? process.cwd();
|
|
105
|
+
if (args[1] === 'list')
|
|
106
|
+
console.log(JSON.stringify(skillCatalog()));
|
|
107
|
+
else if (args[1] === 'check')
|
|
108
|
+
console.log(JSON.stringify(await checkSkills(directory)));
|
|
109
|
+
else if (args[1] === 'install' || args[1] === 'update') {
|
|
110
|
+
const profile = option('--profile'), agent = option('--for');
|
|
111
|
+
console.log(JSON.stringify(await installSkills({ directory, ...(profile ? { profile } : {}), ...(agent ? { agent } : {}), dryRun: args.includes('--dry-run'), update: args[1] === 'update' })));
|
|
112
|
+
}
|
|
113
|
+
else
|
|
114
|
+
throw new InputError('UNKNOWN_SKILLS_COMMAND');
|
|
115
|
+
}
|
|
116
|
+
else if (args[0] === 'generate' || args[0] === 'check') {
|
|
117
|
+
const config = option('--config');
|
|
118
|
+
if (!config)
|
|
119
|
+
throw new InputError('CONFIG_REQUIRED');
|
|
120
|
+
const result = await generate(config, { check: args[0] === 'check', dryRun: args.includes('--dry-run') });
|
|
121
|
+
console.log(JSON.stringify(result));
|
|
122
|
+
}
|
|
123
|
+
else if (args[0] === 'create' && args[1] === 'app') {
|
|
124
|
+
const name = option('--name'), directory = option('--directory');
|
|
125
|
+
if (!name || !directory)
|
|
126
|
+
throw new InputError('NAME_AND_DIRECTORY_REQUIRED');
|
|
127
|
+
console.log(JSON.stringify(await createApplication({ name, directory, dryRun: args.includes('--dry-run') })));
|
|
128
|
+
}
|
|
129
|
+
else if (args[0] === 'create' && (args[1] === 'feature' || args[1] === 'route' || args[1] === 'package')) {
|
|
130
|
+
const profiles = { feature: ['--app', '--name', '--resource'], route: ['--app', '--path', '--feature', '--screen'], package: ['--name', '--directory', '--runtime'] };
|
|
131
|
+
const allowed = new Set([...profiles[args[1]], '--dry-run', '--json']), seen = new Set();
|
|
132
|
+
for (let index = 2; index < args.length; index++) {
|
|
133
|
+
const flag = args[index];
|
|
134
|
+
if (!allowed.has(flag))
|
|
135
|
+
throw new InputError('UNKNOWN_CREATE_OPTION');
|
|
136
|
+
if (seen.has(flag))
|
|
137
|
+
throw new InputError('DUPLICATE_CREATE_OPTION');
|
|
138
|
+
seen.add(flag);
|
|
139
|
+
if (flag !== '--dry-run' && flag !== '--json') {
|
|
140
|
+
const value = args[++index];
|
|
141
|
+
if (!value || value.startsWith('--'))
|
|
142
|
+
throw new InputError('MISSING_OPTION_VALUE');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const dryRun = args.includes('--dry-run');
|
|
146
|
+
try {
|
|
147
|
+
if (args[1] === 'feature') {
|
|
148
|
+
const app = option('--app'), name = option('--name'), resource = option('--resource');
|
|
149
|
+
if (!app || !name)
|
|
150
|
+
throw new InputError('APP_AND_NAME_REQUIRED');
|
|
151
|
+
console.log(JSON.stringify(await createFeature({ app, name, ...(resource ? { resource } : {}), dryRun })));
|
|
152
|
+
}
|
|
153
|
+
else if (args[1] === 'route') {
|
|
154
|
+
const app = option('--app'), path = option('--path'), feature = option('--feature'), screen = option('--screen');
|
|
155
|
+
if (!app || !path || !feature)
|
|
156
|
+
throw new InputError('APP_PATH_AND_FEATURE_REQUIRED');
|
|
157
|
+
console.log(JSON.stringify(await createRoute({ app, path, feature, ...(screen ? { screen } : {}), dryRun })));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const name = option('--name'), directory = option('--directory'), runtime = option('--runtime');
|
|
161
|
+
if (!name)
|
|
162
|
+
throw new InputError('NAME_REQUIRED');
|
|
163
|
+
console.log(JSON.stringify(await createPackage({ name, ...(directory ? { directory } : {}), ...(runtime ? { runtime } : {}), dryRun })));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
if (error instanceof InputError)
|
|
168
|
+
throw error;
|
|
169
|
+
throw new InputError(error instanceof Error ? error.message : 'CREATE_FAILED');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
console.log('ftg generate|check --config <file> [--dry-run] [--json]\nmpfrontend init --name <name> --directory <new-directory> [--design-source none|existing] [--dry-run] [--json]\nmpfrontend design attach --directory <workspace> --source existing --binding <file> [--dry-run] [--json]\nmpfrontend design status --directory <workspace> [--json]\nmpfrontend create app --name <name> --directory <new-directory> [--dry-run]\nmpfrontend create feature --app <app-directory> --name <feature> [--resource <ftg-resource>] [--dry-run] [--json]\nmpfrontend create route --app <app-directory> --path <route> --feature <feature> [--screen <Export>] [--dry-run] [--json]\nmpfrontend create package --name <name> [--directory packages/<name>] [--runtime universal|client|server] [--dry-run] [--json]\nmpfrontend skills list|install|update|check [--directory <repository>] [--for codex|claude|both] [--profile base|design] [--dry-run] [--json]\nmpfrontend catalog check --app <app-directory> [--json]\nftg --version');
|
|
174
|
+
process.exitCode = args.length ? 2 : 0;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
const code = error instanceof InputError || error instanceof SkillsError || error instanceof DesignError ? error.exitCode : 2;
|
|
179
|
+
console.error(JSON.stringify({ ok: false, code, error: error instanceof Error ? error.message : 'COMMAND_FAILED' }));
|
|
180
|
+
process.exitCode = code;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
type SourceMode = 'none' | 'existing';
|
|
2
|
+
export type DesignSourceOptions = {
|
|
3
|
+
command: 'attach' | 'status';
|
|
4
|
+
directory: string;
|
|
5
|
+
source?: SourceMode;
|
|
6
|
+
bindingPath?: string;
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
cliVersion: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function designSourceCommand(options: DesignSourceOptions): Promise<{
|
|
11
|
+
bindingHash: null;
|
|
12
|
+
releaseVersion: null;
|
|
13
|
+
ok: boolean;
|
|
14
|
+
command: string;
|
|
15
|
+
source: SourceMode;
|
|
16
|
+
status: "disabled" | "pending" | "attached";
|
|
17
|
+
binding: string | null;
|
|
18
|
+
dryRun?: never;
|
|
19
|
+
changed?: never;
|
|
20
|
+
} | {
|
|
21
|
+
bindingHash: string;
|
|
22
|
+
releaseVersion: null;
|
|
23
|
+
ok: boolean;
|
|
24
|
+
command: string;
|
|
25
|
+
source: SourceMode;
|
|
26
|
+
status: "disabled" | "pending" | "attached";
|
|
27
|
+
binding: string | null;
|
|
28
|
+
dryRun?: never;
|
|
29
|
+
changed?: never;
|
|
30
|
+
} | {
|
|
31
|
+
ok: boolean;
|
|
32
|
+
command: string;
|
|
33
|
+
source: "existing";
|
|
34
|
+
status: string;
|
|
35
|
+
binding: string;
|
|
36
|
+
bindingHash: string;
|
|
37
|
+
releaseVersion: null;
|
|
38
|
+
dryRun: boolean;
|
|
39
|
+
changed: string[];
|
|
40
|
+
}>;
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { lstat, mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { isAbsolute, join, relative, resolve } from 'node:path';
|
|
4
|
+
import { DesignError, inspectDesignBinding } from './design.js';
|
|
5
|
+
const configPath = '.mpfrontend/design-source.json', lockPath = '.mpfrontend/design-source.lock';
|
|
6
|
+
const encode = (value) => JSON.stringify(value, null, 2) + '\n';
|
|
7
|
+
function ensure(value, message, code = 2) { if (!value)
|
|
8
|
+
throw new DesignError(message, code); }
|
|
9
|
+
const record = (value, message = 'INVALID_DESIGN_SOURCE_CONFIG') => {
|
|
10
|
+
ensure(value !== null && typeof value === 'object' && !Array.isArray(value), message);
|
|
11
|
+
const result = value;
|
|
12
|
+
ensure(Object.keys(result).every(key => !['__proto__', 'prototype', 'constructor'].includes(key)), 'UNSAFE_DESIGN_SOURCE_KEY', 4);
|
|
13
|
+
return result;
|
|
14
|
+
};
|
|
15
|
+
function exact(value, keys, message) { ensure(Object.keys(value).length === keys.length && keys.every(key => Object.hasOwn(value, key)), message); }
|
|
16
|
+
function safeRelative(value) {
|
|
17
|
+
ensure(!isAbsolute(value) && value.length > 0 && value.length <= 500 && /^[a-zA-Z0-9_./@-]+$/.test(value) &&
|
|
18
|
+
value.split('/').every(part => part && part !== '.' && part !== '..' && !['.git', '.aws', '.codex', '.agents', '.claude', 'node_modules'].includes(part)), 'UNSAFE_DESIGN_SOURCE_PATH', 4);
|
|
19
|
+
}
|
|
20
|
+
async function file(root, path, required = true) {
|
|
21
|
+
safeRelative(path);
|
|
22
|
+
let current = root;
|
|
23
|
+
for (const part of path.split('/')) {
|
|
24
|
+
current = join(current, part);
|
|
25
|
+
try {
|
|
26
|
+
const info = await lstat(current);
|
|
27
|
+
ensure(!info.isSymbolicLink(), 'DESIGN_SOURCE_PATH_SYMLINK', 4);
|
|
28
|
+
ensure(current === join(root, path) ? info.isFile() : info.isDirectory(), 'DESIGN_SOURCE_PATH_KIND', 4);
|
|
29
|
+
if (current === join(root, path))
|
|
30
|
+
ensure(info.size <= 5 * 1024 * 1024, 'DESIGN_SOURCE_FILE_TOO_LARGE', 4);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (error.code === 'ENOENT') {
|
|
34
|
+
ensure(!required, 'DESIGN_SOURCE_FILE_MISSING');
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const result = await readFile(current);
|
|
41
|
+
ensure(result.length <= 5 * 1024 * 1024, 'DESIGN_SOURCE_FILE_TOO_LARGE', 4);
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
function json(bytes, message) { ensure(bytes, message); try {
|
|
45
|
+
return JSON.parse(bytes.toString('utf8'));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
throw new DesignError(message);
|
|
49
|
+
} }
|
|
50
|
+
function parseConfig(raw) {
|
|
51
|
+
const value = record(raw);
|
|
52
|
+
exact(value, ['schemaVersion', 'generator', 'cliVersion', 'source', 'status', 'binding', 'bindingHash', 'sourceIdentity', 'release'], 'INVALID_DESIGN_SOURCE_CONFIG');
|
|
53
|
+
ensure(value.schemaVersion === 1 && value.generator === 'MPFrontendDesignSource' && typeof value.cliVersion === 'string' && ['none', 'existing'].includes(String(value.source)) && ['disabled', 'pending', 'attached'].includes(String(value.status)), 'INVALID_DESIGN_SOURCE_CONFIG');
|
|
54
|
+
ensure(value.binding === null || typeof value.binding === 'string', 'INVALID_DESIGN_SOURCE_CONFIG');
|
|
55
|
+
if (typeof value.binding === 'string')
|
|
56
|
+
safeRelative(value.binding);
|
|
57
|
+
ensure(value.bindingHash === null || typeof value.bindingHash === 'string' && /^[a-f0-9]{64}$/.test(value.bindingHash), 'INVALID_DESIGN_SOURCE_CONFIG');
|
|
58
|
+
ensure(value.sourceIdentity === null && value.release === null, 'INVALID_DESIGN_SOURCE_CONFIG');
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
async function rootFor(directory) {
|
|
62
|
+
const root = resolve(directory), info = await lstat(root).catch(() => undefined);
|
|
63
|
+
ensure(info?.isDirectory() && !info.isSymbolicLink(), 'DESIGN_WORKSPACE_REQUIRED', 4);
|
|
64
|
+
for (const marker of ['package.json', 'nx.json', 'pnpm-workspace.yaml'])
|
|
65
|
+
await file(root, marker);
|
|
66
|
+
return root;
|
|
67
|
+
}
|
|
68
|
+
async function localFile(root, input) {
|
|
69
|
+
ensure(!isAbsolute(input), 'UNSAFE_DESIGN_SOURCE_PATH', 4);
|
|
70
|
+
const path = relative(root, resolve(root, input));
|
|
71
|
+
safeRelative(path);
|
|
72
|
+
await file(root, path);
|
|
73
|
+
return path;
|
|
74
|
+
}
|
|
75
|
+
async function readConfig(root) { const bytes = await file(root, configPath, false); return { bytes, value: bytes ? parseConfig(json(bytes, 'INVALID_DESIGN_SOURCE_CONFIG')) : undefined }; }
|
|
76
|
+
async function verifyAttached(root, value) {
|
|
77
|
+
if (value.source === 'none') {
|
|
78
|
+
ensure(value.status === 'disabled' && value.binding === null && value.bindingHash === null && value.sourceIdentity === null && value.release === null, 'INVALID_DESIGN_SOURCE_CONFIG');
|
|
79
|
+
return { bindingHash: null, releaseVersion: null };
|
|
80
|
+
}
|
|
81
|
+
ensure(value.status === 'attached' && value.binding && value.bindingHash, 'DESIGN_SOURCE_NOT_ATTACHED', 3);
|
|
82
|
+
const binding = await inspectDesignBinding(join(root, value.binding));
|
|
83
|
+
ensure(binding.bindingHash === value.bindingHash, 'DESIGN_BINDING_DRIFT', 3);
|
|
84
|
+
ensure(value.sourceIdentity === null && value.release === null, 'INVALID_DESIGN_SOURCE_CONFIG');
|
|
85
|
+
return { bindingHash: binding.bindingHash, releaseVersion: null };
|
|
86
|
+
}
|
|
87
|
+
async function writeConfig(root, content, expected, dryRun) {
|
|
88
|
+
if (dryRun)
|
|
89
|
+
return expected?.toString('utf8') === content ? [] : [configPath];
|
|
90
|
+
await mkdir(join(root, '.mpfrontend'), { recursive: true });
|
|
91
|
+
const owner = randomUUID();
|
|
92
|
+
let acquired = false, stage = '';
|
|
93
|
+
try {
|
|
94
|
+
await file(root, lockPath, false);
|
|
95
|
+
try {
|
|
96
|
+
await writeFile(join(root, lockPath), owner, { flag: 'wx' });
|
|
97
|
+
acquired = true;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
if (error.code === 'EEXIST')
|
|
101
|
+
throw new DesignError('DESIGN_SOURCE_BUSY', 4);
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
const current = await file(root, configPath, false);
|
|
105
|
+
ensure((current?.toString('utf8') ?? null) === (expected?.toString('utf8') ?? null), 'CONCURRENT_DESIGN_SOURCE_EDIT', 4);
|
|
106
|
+
if (current?.toString('utf8') === content)
|
|
107
|
+
return [];
|
|
108
|
+
stage = join(root, '.mpfrontend', '.design-source-' + randomUUID());
|
|
109
|
+
await writeFile(stage, content, { flag: 'wx' });
|
|
110
|
+
await rename(stage, join(root, configPath));
|
|
111
|
+
stage = '';
|
|
112
|
+
return [configPath];
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
if (stage)
|
|
116
|
+
await unlink(stage).catch(() => undefined);
|
|
117
|
+
if (acquired && (await file(root, lockPath, false))?.toString('utf8') === owner)
|
|
118
|
+
await unlink(join(root, lockPath));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export async function designSourceCommand(options) {
|
|
122
|
+
const root = await rootFor(options.directory), current = await readConfig(root);
|
|
123
|
+
if (options.command === 'status') {
|
|
124
|
+
ensure(current.value, 'DESIGN_SOURCE_NOT_CONFIGURED', 3);
|
|
125
|
+
const verification = current.value.status === 'pending' ? { bindingHash: null, releaseVersion: null } : await verifyAttached(root, current.value);
|
|
126
|
+
return { ok: true, command: 'status', source: current.value.source, status: current.value.status, binding: current.value.binding, ...verification };
|
|
127
|
+
}
|
|
128
|
+
ensure(options.source === 'existing', 'ATTACHABLE_DESIGN_SOURCE_REQUIRED');
|
|
129
|
+
ensure(options.bindingPath, 'DESIGN_BINDING_REQUIRED');
|
|
130
|
+
const bindingPath = await localFile(root, options.bindingPath), binding = await inspectDesignBinding(join(root, bindingPath));
|
|
131
|
+
if (current.value) {
|
|
132
|
+
ensure(current.value.status !== 'attached' || current.value.source === options.source && current.value.binding === bindingPath && current.value.bindingHash === binding.bindingHash, 'DESIGN_SOURCE_ALREADY_ATTACHED', 4);
|
|
133
|
+
ensure(current.value.source === 'none' || current.value.source === options.source, 'DESIGN_SOURCE_MODE_MISMATCH', 4);
|
|
134
|
+
}
|
|
135
|
+
const next = { schemaVersion: 1, generator: 'MPFrontendDesignSource', cliVersion: options.cliVersion, source: options.source, status: 'attached', binding: bindingPath, bindingHash: binding.bindingHash, sourceIdentity: null, release: null };
|
|
136
|
+
const content = encode(next);
|
|
137
|
+
ensure(current.value?.status !== 'attached' || current.bytes?.toString('utf8') === content, 'DESIGN_SOURCE_ALREADY_ATTACHED', 4);
|
|
138
|
+
const changed = await writeConfig(root, content, current.bytes, options.dryRun ?? false);
|
|
139
|
+
return { ok: true, command: 'attach', source: options.source, status: 'attached', binding: bindingPath, bindingHash: binding.bindingHash, releaseVersion: null, dryRun: options.dryRun ?? false, changed };
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=design-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-source.js","sourceRoot":"","sources":["../src/design-source.ts"],"names":[],"mappings":"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"}
|
package/dist/design.d.ts
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
export declare class DesignError extends Error {
|
|
2
|
+
readonly exitCode: number;
|
|
3
|
+
constructor(message: string, exitCode?: number);
|
|
4
|
+
}
|
|
5
|
+
type Change = {
|
|
6
|
+
kind: 'token' | 'component' | 'asset';
|
|
7
|
+
id: string;
|
|
8
|
+
action: 'added' | 'removed' | 'changed';
|
|
9
|
+
areas: string[];
|
|
10
|
+
severity: 'additive' | 'visual' | 'breaking';
|
|
11
|
+
};
|
|
12
|
+
type Task = {
|
|
13
|
+
id: string;
|
|
14
|
+
kind: 'component' | 'migration' | 'asset';
|
|
15
|
+
requiredFiles: string[];
|
|
16
|
+
};
|
|
17
|
+
type Plan = {
|
|
18
|
+
schemaVersion: 1;
|
|
19
|
+
generator: 'MPFrontendDesign';
|
|
20
|
+
cliVersion: string;
|
|
21
|
+
bindingFile: string;
|
|
22
|
+
bindingHash: string;
|
|
23
|
+
candidateHash: string;
|
|
24
|
+
baselineHash: string | null;
|
|
25
|
+
ownershipHash: string | null;
|
|
26
|
+
before: Record<string, string | null>;
|
|
27
|
+
after: Record<string, string>;
|
|
28
|
+
changes: Change[];
|
|
29
|
+
tasks: Task[];
|
|
30
|
+
checks: string[];
|
|
31
|
+
diagnostics: string[];
|
|
32
|
+
planId: string;
|
|
33
|
+
};
|
|
34
|
+
export type DesignOptions = {
|
|
35
|
+
command: string;
|
|
36
|
+
bindingPath?: string;
|
|
37
|
+
snapshotPath?: string;
|
|
38
|
+
candidate?: string;
|
|
39
|
+
planPath?: string;
|
|
40
|
+
evidencePath?: string;
|
|
41
|
+
dryRun?: boolean;
|
|
42
|
+
};
|
|
43
|
+
export declare function inspectDesignBinding(bindingPath: string): Promise<{
|
|
44
|
+
bindingFile: string;
|
|
45
|
+
bindingHash: string;
|
|
46
|
+
id: string;
|
|
47
|
+
source: {
|
|
48
|
+
fileKey: string;
|
|
49
|
+
nodeId: string;
|
|
50
|
+
};
|
|
51
|
+
stateDirectory: string;
|
|
52
|
+
outputDirectory: string;
|
|
53
|
+
}>;
|
|
54
|
+
export declare function inspectDesignSnapshot(snapshotPath: string): Promise<{
|
|
55
|
+
snapshotFile: string;
|
|
56
|
+
rawHash: string;
|
|
57
|
+
candidateHash: string;
|
|
58
|
+
source: {
|
|
59
|
+
fileKey: string;
|
|
60
|
+
nodeId: string;
|
|
61
|
+
revision: string | null;
|
|
62
|
+
capturedAt: string | null;
|
|
63
|
+
extractorVersion: string;
|
|
64
|
+
};
|
|
65
|
+
}>;
|
|
66
|
+
export declare function designCommand(options: DesignOptions): Promise<{
|
|
67
|
+
ok: boolean;
|
|
68
|
+
command: string;
|
|
69
|
+
dryRun: boolean;
|
|
70
|
+
changed: never[];
|
|
71
|
+
planId: string;
|
|
72
|
+
unresolvedTasks?: never;
|
|
73
|
+
candidateHash?: never;
|
|
74
|
+
sourceRevision?: never;
|
|
75
|
+
diagnostics?: never;
|
|
76
|
+
scope?: never;
|
|
77
|
+
checked?: never;
|
|
78
|
+
changes?: never;
|
|
79
|
+
plan?: never;
|
|
80
|
+
planPath?: never;
|
|
81
|
+
} | {
|
|
82
|
+
ok: boolean;
|
|
83
|
+
command: string;
|
|
84
|
+
dryRun: boolean;
|
|
85
|
+
planId: string;
|
|
86
|
+
changed: string[];
|
|
87
|
+
unresolvedTasks: Task[];
|
|
88
|
+
candidateHash?: never;
|
|
89
|
+
sourceRevision?: never;
|
|
90
|
+
diagnostics?: never;
|
|
91
|
+
scope?: never;
|
|
92
|
+
checked?: never;
|
|
93
|
+
changes?: never;
|
|
94
|
+
plan?: never;
|
|
95
|
+
planPath?: never;
|
|
96
|
+
} | {
|
|
97
|
+
ok: boolean;
|
|
98
|
+
command: string;
|
|
99
|
+
dryRun: boolean;
|
|
100
|
+
candidateHash: string;
|
|
101
|
+
changed: string[];
|
|
102
|
+
planId?: never;
|
|
103
|
+
unresolvedTasks?: never;
|
|
104
|
+
sourceRevision?: never;
|
|
105
|
+
diagnostics?: never;
|
|
106
|
+
scope?: never;
|
|
107
|
+
checked?: never;
|
|
108
|
+
changes?: never;
|
|
109
|
+
plan?: never;
|
|
110
|
+
planPath?: never;
|
|
111
|
+
} | {
|
|
112
|
+
ok: boolean;
|
|
113
|
+
command: string;
|
|
114
|
+
dryRun: boolean;
|
|
115
|
+
candidateHash: string;
|
|
116
|
+
sourceRevision: string | null;
|
|
117
|
+
diagnostics: string[];
|
|
118
|
+
changed: string[];
|
|
119
|
+
planId?: never;
|
|
120
|
+
unresolvedTasks?: never;
|
|
121
|
+
scope?: never;
|
|
122
|
+
checked?: never;
|
|
123
|
+
changes?: never;
|
|
124
|
+
plan?: never;
|
|
125
|
+
planPath?: never;
|
|
126
|
+
} | {
|
|
127
|
+
ok: boolean;
|
|
128
|
+
command: string;
|
|
129
|
+
scope: string;
|
|
130
|
+
candidateHash: string;
|
|
131
|
+
sourceRevision: string | null;
|
|
132
|
+
checked: number;
|
|
133
|
+
dryRun?: never;
|
|
134
|
+
changed?: never;
|
|
135
|
+
planId?: never;
|
|
136
|
+
unresolvedTasks?: never;
|
|
137
|
+
diagnostics?: never;
|
|
138
|
+
changes?: never;
|
|
139
|
+
plan?: never;
|
|
140
|
+
planPath?: never;
|
|
141
|
+
} | {
|
|
142
|
+
ok: boolean;
|
|
143
|
+
command: string;
|
|
144
|
+
candidateHash: string;
|
|
145
|
+
sourceRevision: string | null;
|
|
146
|
+
dryRun?: never;
|
|
147
|
+
changed?: never;
|
|
148
|
+
planId?: never;
|
|
149
|
+
unresolvedTasks?: never;
|
|
150
|
+
diagnostics?: never;
|
|
151
|
+
scope?: never;
|
|
152
|
+
checked?: never;
|
|
153
|
+
changes?: never;
|
|
154
|
+
plan?: never;
|
|
155
|
+
planPath?: never;
|
|
156
|
+
} | {
|
|
157
|
+
ok: boolean;
|
|
158
|
+
command: string;
|
|
159
|
+
candidateHash: string;
|
|
160
|
+
changes: Change[];
|
|
161
|
+
diagnostics: string[];
|
|
162
|
+
dryRun?: never;
|
|
163
|
+
changed?: never;
|
|
164
|
+
planId?: never;
|
|
165
|
+
unresolvedTasks?: never;
|
|
166
|
+
sourceRevision?: never;
|
|
167
|
+
scope?: never;
|
|
168
|
+
checked?: never;
|
|
169
|
+
plan?: never;
|
|
170
|
+
planPath?: never;
|
|
171
|
+
} | {
|
|
172
|
+
ok: boolean;
|
|
173
|
+
command: string;
|
|
174
|
+
dryRun: boolean;
|
|
175
|
+
plan: Plan;
|
|
176
|
+
planPath: string;
|
|
177
|
+
changed: string[];
|
|
178
|
+
planId?: never;
|
|
179
|
+
unresolvedTasks?: never;
|
|
180
|
+
candidateHash?: never;
|
|
181
|
+
sourceRevision?: never;
|
|
182
|
+
diagnostics?: never;
|
|
183
|
+
scope?: never;
|
|
184
|
+
checked?: never;
|
|
185
|
+
changes?: never;
|
|
186
|
+
}>;
|
|
187
|
+
export {};
|