@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/index.js
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir, realpath, lstat, rename, unlink } from 'node:fs/promises';
|
|
2
|
+
import { dirname, resolve, relative, isAbsolute, join } from 'node:path';
|
|
3
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
4
|
+
import SwaggerParser from '@apidevtools/swagger-parser';
|
|
5
|
+
import { parse } from 'yaml';
|
|
6
|
+
import { normalizeResources, normalizeRequests } from '@mpfrontend/ftg-core';
|
|
7
|
+
import { readModelOutputs, requestModelOutputs } from './read-models.js';
|
|
8
|
+
export const GENERATOR_VERSION = '0.1.0-dev.6';
|
|
9
|
+
export const digest = (value) => createHash('sha256').update(value).digest('hex');
|
|
10
|
+
export class InputError extends Error {
|
|
11
|
+
exitCode;
|
|
12
|
+
constructor(message, exitCode = 2) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.exitCode = exitCode;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const HEADER = '// @generated by FTG; edit authored overrides instead.\n';
|
|
18
|
+
function containsExternalRef(value) {
|
|
19
|
+
if (!value || typeof value !== 'object')
|
|
20
|
+
return false;
|
|
21
|
+
if (Array.isArray(value))
|
|
22
|
+
return value.some(containsExternalRef);
|
|
23
|
+
const object = value;
|
|
24
|
+
if (typeof object.$ref === 'string' && !object.$ref.startsWith('#/'))
|
|
25
|
+
return true;
|
|
26
|
+
return Object.values(object).some(containsExternalRef);
|
|
27
|
+
}
|
|
28
|
+
export async function loadContract(path) {
|
|
29
|
+
const bytes = await readFile(path, 'utf8');
|
|
30
|
+
if (Buffer.byteLength(bytes) > 5 * 1024 * 1024)
|
|
31
|
+
throw new InputError('CONTRACT_TOO_LARGE');
|
|
32
|
+
const document = parse(bytes);
|
|
33
|
+
if (!document || typeof document.openapi !== 'string' || !document.openapi.startsWith('3.'))
|
|
34
|
+
throw new InputError('INVALID_OPENAPI');
|
|
35
|
+
if (containsExternalRef(document))
|
|
36
|
+
throw new InputError('EXTERNAL_REFS_REQUIRE_PINNED_BUNDLE');
|
|
37
|
+
await SwaggerParser.validate(document, { resolve: { external: false } });
|
|
38
|
+
return { document, bytes, hash: digest(bytes) };
|
|
39
|
+
}
|
|
40
|
+
async function safeOutput(base, output) {
|
|
41
|
+
const canonical = await realpath(base);
|
|
42
|
+
const target = resolve(canonical, output);
|
|
43
|
+
if (isAbsolute(output) || relative(canonical, target).startsWith('..') || target === canonical)
|
|
44
|
+
throw new InputError('OUTPUT_OUTSIDE_CONFIG_ROOT', 4);
|
|
45
|
+
let existing = target;
|
|
46
|
+
while (true) {
|
|
47
|
+
try {
|
|
48
|
+
const actual = await realpath(existing);
|
|
49
|
+
if (relative(canonical, actual).startsWith('..'))
|
|
50
|
+
throw new InputError('SYMLINK_OUTPUT_ESCAPE', 4);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (error instanceof InputError)
|
|
55
|
+
throw error;
|
|
56
|
+
if (error.code !== 'ENOENT')
|
|
57
|
+
throw error;
|
|
58
|
+
existing = dirname(existing);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return target;
|
|
62
|
+
}
|
|
63
|
+
async function generatedFile(file) {
|
|
64
|
+
try {
|
|
65
|
+
if ((await lstat(file)).isSymbolicLink())
|
|
66
|
+
throw new InputError('GENERATED_FILE_SYMLINK', 4);
|
|
67
|
+
return await readFile(file, 'utf8');
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (error.code === 'ENOENT')
|
|
71
|
+
return undefined;
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function assertNoWriter(marker) {
|
|
76
|
+
try {
|
|
77
|
+
await lstat(marker);
|
|
78
|
+
throw new InputError('GENERATION_BUSY', 4);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (error.code !== 'ENOENT')
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export async function generate(configPath, { check = false, dryRun = false } = {}) {
|
|
86
|
+
const base = dirname(resolve(configPath));
|
|
87
|
+
const raw = JSON.parse(await readFile(configPath, 'utf8'));
|
|
88
|
+
if (typeof raw.openapi !== 'string' || typeof raw.output !== 'string' || !Array.isArray(raw.resources))
|
|
89
|
+
throw new InputError('INVALID_CONFIG');
|
|
90
|
+
if (raw.requests !== undefined && !Array.isArray(raw.requests))
|
|
91
|
+
throw new InputError('INVALID_REQUEST_CONFIG');
|
|
92
|
+
const output = await safeOutput(base, raw.output);
|
|
93
|
+
const { document, hash } = await loadContract(resolve(base, raw.openapi));
|
|
94
|
+
const resources = normalizeResources(document, raw.resources);
|
|
95
|
+
const requests = normalizeRequests(document, raw.requests ?? []);
|
|
96
|
+
const source = HEADER + 'import type { ResourceModel } from "@mpfrontend/ftg-core";\n' +
|
|
97
|
+
'export const contractHash = ' + JSON.stringify(hash) + ';\n' +
|
|
98
|
+
'export const resources = ' + JSON.stringify(resources, null, 2) + ' as const satisfies readonly ResourceModel[];\n';
|
|
99
|
+
const readers = Object.fromEntries(Object.entries(readModelOutputs(document, raw.resources)).map(([name, bytes]) => [name, HEADER + bytes]));
|
|
100
|
+
const requestSource = HEADER + 'import type { RequestModel } from "@mpfrontend/ftg-core";\n' +
|
|
101
|
+
'export const contractHash = ' + JSON.stringify(hash) + ';\n' +
|
|
102
|
+
'export const requests = ' + JSON.stringify(requests, null, 2) + ' as const satisfies readonly RequestModel[];\n';
|
|
103
|
+
const payloads = Object.fromEntries(Object.entries(requestModelOutputs(document, requests)).map(([name, bytes]) => [name, HEADER + bytes]));
|
|
104
|
+
const generated = { 'resources.gen.ts': source, ...readers, 'requests.gen.ts': requestSource, ...payloads };
|
|
105
|
+
const manifest = JSON.stringify({ generator: 'FTG', version: GENERATOR_VERSION, irVersion: 3, contractHash: hash,
|
|
106
|
+
files: Object.fromEntries(Object.entries(generated).map(([name, bytes]) => [name, digest(bytes)])) }, null, 2) + '\n';
|
|
107
|
+
const desired = { ...generated, 'generation-manifest.json': manifest };
|
|
108
|
+
const marker = join(output, '.ftg-write.lock'), writer = !check && !dryRun, owner = randomUUID();
|
|
109
|
+
await assertNoWriter(marker);
|
|
110
|
+
if (writer) {
|
|
111
|
+
await mkdir(output, { recursive: true });
|
|
112
|
+
try {
|
|
113
|
+
await writeFile(marker, owner, { flag: 'wx' });
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
if (error.code === 'EEXIST')
|
|
117
|
+
throw new InputError('GENERATION_BUSY', 4);
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const previous = new Map();
|
|
123
|
+
const changed = [];
|
|
124
|
+
for (const [name, content] of Object.entries(desired)) {
|
|
125
|
+
const file = join(output, name);
|
|
126
|
+
const old = await generatedFile(file);
|
|
127
|
+
if (old !== undefined && (name === 'generation-manifest.json' ? JSON.parse(old).generator !== 'FTG' : !old.startsWith(HEADER)))
|
|
128
|
+
throw new InputError('AUTHORED_FILE_COLLISION', 4);
|
|
129
|
+
previous.set(name, old);
|
|
130
|
+
if (old !== content)
|
|
131
|
+
changed.push(name);
|
|
132
|
+
}
|
|
133
|
+
if (check && changed.length)
|
|
134
|
+
throw new InputError('GENERATED_DRIFT', 3);
|
|
135
|
+
if (!check && !dryRun && changed.length) {
|
|
136
|
+
const staged = new Map();
|
|
137
|
+
const replaced = [];
|
|
138
|
+
try {
|
|
139
|
+
for (const name of changed) {
|
|
140
|
+
const stage = join(output, '.ftg-' + randomUUID());
|
|
141
|
+
await writeFile(stage, desired[name], { flag: 'wx' });
|
|
142
|
+
staged.set(name, stage);
|
|
143
|
+
}
|
|
144
|
+
for (const name of changed) {
|
|
145
|
+
if (await generatedFile(join(output, name)) !== previous.get(name))
|
|
146
|
+
throw new InputError('GENERATION_FILE_CHANGED', 4);
|
|
147
|
+
await rename(staged.get(name), join(output, name));
|
|
148
|
+
staged.delete(name);
|
|
149
|
+
replaced.push(name);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
let conflict = false;
|
|
154
|
+
for (const name of replaced) {
|
|
155
|
+
const file = join(output, name);
|
|
156
|
+
if (await generatedFile(file) !== desired[name]) {
|
|
157
|
+
conflict = true;
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const old = previous.get(name);
|
|
161
|
+
if (old === undefined)
|
|
162
|
+
await unlink(file);
|
|
163
|
+
else
|
|
164
|
+
await writeFile(file, old);
|
|
165
|
+
}
|
|
166
|
+
if (conflict)
|
|
167
|
+
throw new InputError('GENERATION_ROLLBACK_CONFLICT', 4);
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
for (const stage of staged.values())
|
|
172
|
+
await unlink(stage).catch(() => undefined);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (!writer)
|
|
176
|
+
await assertNoWriter(marker);
|
|
177
|
+
return { ok: true, contractHash: hash, resources: resources.length, requests: requests.length, changed, dryRun, check };
|
|
178
|
+
}
|
|
179
|
+
finally {
|
|
180
|
+
// Never remove another writer's marker or a marker replaced by an authored symlink.
|
|
181
|
+
if (writer && await generatedFile(marker) === owner)
|
|
182
|
+
await unlink(marker);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { OpenApiDocument, ResourceSelection, RequestModel } from '@mpfrontend/ftg-core';
|
|
2
|
+
export declare function readModelOutputs(document: OpenApiDocument, selections: readonly ResourceSelection[]): Record<string, string>;
|
|
3
|
+
export declare function requestModelOutputs(document: OpenApiDocument, requests: readonly RequestModel[]): Record<string, string>;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { resolveSchema } from '@mpfrontend/ftg-core';
|
|
3
|
+
const require = createRequire(import.meta.url);
|
|
4
|
+
const Ajv = require('ajv/dist/2020').Ajv2020;
|
|
5
|
+
const addFormats = require('ajv-formats');
|
|
6
|
+
const standalone = require('ajv/dist/standalone').default;
|
|
7
|
+
const annotations = new Set(['title', 'description', 'readOnly', 'writeOnly']);
|
|
8
|
+
function resolved(raw, document) {
|
|
9
|
+
if (raw.$ref && Object.keys(raw).some(key => key !== '$ref' && !annotations.has(key)))
|
|
10
|
+
throw new Error('UNSUPPORTED_SCHEMA_REFERENCE_SIBLINGS');
|
|
11
|
+
const value = resolveSchema(raw, document);
|
|
12
|
+
return { ...value, ...(raw.readOnly !== undefined ? { readOnly: raw.readOnly } : {}), ...(raw.writeOnly !== undefined ? { writeOnly: raw.writeOnly } : {}) };
|
|
13
|
+
}
|
|
14
|
+
// Finite read-model subset: never guess composition, recursive types or field transforms.
|
|
15
|
+
function readShape(raw, document, depth = 0, direction = 'read') {
|
|
16
|
+
if (depth > 32)
|
|
17
|
+
throw new Error('UNSUPPORTED_RECURSIVE_READ_SCHEMA');
|
|
18
|
+
const schema = resolved(raw, document);
|
|
19
|
+
if (schema.oneOf || schema.anyOf || schema.allOf)
|
|
20
|
+
throw new Error('UNSUPPORTED_READ_SCHEMA_UNION');
|
|
21
|
+
const next = { ...schema };
|
|
22
|
+
delete next.readOnly;
|
|
23
|
+
delete next.writeOnly;
|
|
24
|
+
if (direction === 'request' && (schema.type === 'object' || Array.isArray(schema.type) && schema.type.includes('object')) && schema.additionalProperties !== false)
|
|
25
|
+
throw new Error('REQUEST_OBJECT_MUST_DECLARE_CLOSED_PROPERTIES');
|
|
26
|
+
const excluded = (child) => direction === 'read' ? resolved(child, document).writeOnly : resolved(child, document).readOnly;
|
|
27
|
+
if (schema.properties) {
|
|
28
|
+
next.properties = Object.fromEntries(Object.entries(schema.properties).map(([key, child]) => [key,
|
|
29
|
+
excluded(child) ? { not: {} } : readShape(child, document, depth + 1, direction)]));
|
|
30
|
+
if (schema.required)
|
|
31
|
+
next.required = schema.required.filter(key => !excluded(schema.properties[key] ?? {}));
|
|
32
|
+
}
|
|
33
|
+
if (schema.items)
|
|
34
|
+
next.items = readShape(schema.items, document, depth + 1, direction);
|
|
35
|
+
if (typeof schema.additionalProperties === 'object')
|
|
36
|
+
next.additionalProperties = readShape(schema.additionalProperties, document, depth + 1, direction);
|
|
37
|
+
return next;
|
|
38
|
+
}
|
|
39
|
+
function readType(raw, document, depth = 0, direction = 'read') {
|
|
40
|
+
if (depth > 32)
|
|
41
|
+
throw new Error('UNSUPPORTED_RECURSIVE_READ_SCHEMA');
|
|
42
|
+
const schema = resolved(raw, document);
|
|
43
|
+
if (schema.oneOf || schema.anyOf || schema.allOf)
|
|
44
|
+
throw new Error('UNSUPPORTED_READ_SCHEMA_UNION');
|
|
45
|
+
const types = Array.isArray(schema.type) ? schema.type : [schema.type];
|
|
46
|
+
const effective = types.filter(type => type !== 'null');
|
|
47
|
+
if (effective.length !== 1)
|
|
48
|
+
throw new Error('UNSUPPORTED_READ_SCHEMA_TYPE');
|
|
49
|
+
let type;
|
|
50
|
+
if (schema.enum) {
|
|
51
|
+
if (!schema.enum.length || schema.enum.some(value => value !== null && !['string', 'number', 'boolean'].includes(typeof value)))
|
|
52
|
+
throw new Error('UNSUPPORTED_READ_ENUM');
|
|
53
|
+
type = schema.enum.map(value => JSON.stringify(value)).join(' | ');
|
|
54
|
+
}
|
|
55
|
+
else
|
|
56
|
+
switch (effective[0]) {
|
|
57
|
+
case 'string':
|
|
58
|
+
case 'boolean':
|
|
59
|
+
type = effective[0];
|
|
60
|
+
break;
|
|
61
|
+
case 'number':
|
|
62
|
+
case 'integer':
|
|
63
|
+
type = 'number';
|
|
64
|
+
break;
|
|
65
|
+
case 'array':
|
|
66
|
+
if (!schema.items)
|
|
67
|
+
throw new Error('MISSING_ARRAY_ITEMS');
|
|
68
|
+
type = 'Array<' + readType(schema.items, document, depth + 1, direction) + '>';
|
|
69
|
+
break;
|
|
70
|
+
case 'object': {
|
|
71
|
+
const properties = Object.entries(schema.properties ?? {}).sort(([a], [b]) => a.localeCompare(b, 'en'))
|
|
72
|
+
.filter(([, child]) => direction === 'read' ? !resolved(child, document).writeOnly : !resolved(child, document).readOnly);
|
|
73
|
+
type = '{ ' + properties.map(([key, child]) => 'readonly ' + JSON.stringify(key) + (schema.required?.includes(key) ? '' : '?') + ': ' + readType(child, document, depth + 1, direction)).join('; ') + ' }';
|
|
74
|
+
if (typeof schema.additionalProperties === 'object') {
|
|
75
|
+
// Mixed fixed/index signatures can be incompatible in TypeScript; do not invent an intersection.
|
|
76
|
+
if (properties.length)
|
|
77
|
+
throw new Error('UNSUPPORTED_MIXED_READ_INDEX_SIGNATURE');
|
|
78
|
+
type = 'Record<string, ' + readType(schema.additionalProperties, document, depth + 1, direction) + '>';
|
|
79
|
+
}
|
|
80
|
+
else if (schema.additionalProperties !== false)
|
|
81
|
+
type += ' & Record<string, unknown>';
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
default: throw new Error('UNSUPPORTED_READ_SCHEMA_TYPE');
|
|
85
|
+
}
|
|
86
|
+
return !schema.enum && (schema.nullable || types.includes('null')) ? type + ' | null' : type;
|
|
87
|
+
}
|
|
88
|
+
function fullResponse(document, selection) {
|
|
89
|
+
const status = selection.responseStatus ?? '200';
|
|
90
|
+
if (selection.body !== undefined && selection.body !== 'none')
|
|
91
|
+
throw new Error('UNSUPPORTED_RESPONSE_BODY_PROFILE');
|
|
92
|
+
if (selection.body === 'none') {
|
|
93
|
+
if (status !== '204')
|
|
94
|
+
throw new Error('EMPTY_RESPONSE_REQUIRES_204');
|
|
95
|
+
if (selection.responsePath?.length)
|
|
96
|
+
throw new Error('EMPTY_RESPONSE_PATH_NOT_SUPPORTED');
|
|
97
|
+
}
|
|
98
|
+
else if (status === '204')
|
|
99
|
+
throw new Error('RESPONSE_BODY_PROFILE_MISMATCH');
|
|
100
|
+
else if (!['200', '201', '202'].includes(status))
|
|
101
|
+
throw new Error('UNSUPPORTED_JSON_SUCCESS_STATUS');
|
|
102
|
+
for (const item of Object.values(document.paths))
|
|
103
|
+
for (const [method, value] of Object.entries(item)) {
|
|
104
|
+
if (!['get', 'post', 'put', 'patch', 'delete', 'head', 'options'].includes(method))
|
|
105
|
+
continue;
|
|
106
|
+
const operation = value;
|
|
107
|
+
if (operation.operationId === selection.operationId) {
|
|
108
|
+
const response = operation.responses?.[status];
|
|
109
|
+
if (selection.body === 'none') {
|
|
110
|
+
if (!response)
|
|
111
|
+
throw new Error('MISSING_EMPTY_RESPONSE');
|
|
112
|
+
if (Object.hasOwn(response, 'content'))
|
|
113
|
+
throw new Error('RESPONSE_BODY_PROFILE_MISMATCH');
|
|
114
|
+
return { body: 'none' };
|
|
115
|
+
}
|
|
116
|
+
const schema = response?.content?.['application/json']?.schema;
|
|
117
|
+
if (schema)
|
|
118
|
+
return { body: 'json', schema };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
throw new Error(selection.body === 'none' ? 'MISSING_EMPTY_RESPONSE' : 'MISSING_JSON_RESPONSE');
|
|
122
|
+
}
|
|
123
|
+
export function readModelOutputs(document, selections) {
|
|
124
|
+
if (!document.openapi.startsWith('3.1.'))
|
|
125
|
+
throw new Error('READ_MODELS_REQUIRE_OPENAPI_3_1');
|
|
126
|
+
const ajv = new Ajv({ strict: true, allErrors: false, code: { source: true }, coerceTypes: false, useDefaults: false, removeAdditional: false });
|
|
127
|
+
addFormats(ajv);
|
|
128
|
+
const mapping = {}, types = [], validators = [], bodyless = [];
|
|
129
|
+
for (const selection of selections) {
|
|
130
|
+
const response = fullResponse(document, selection);
|
|
131
|
+
validators.push(' readonly ' + JSON.stringify(selection.name) + ': (value: unknown) => boolean;');
|
|
132
|
+
if (response.body === 'none') {
|
|
133
|
+
types.push(' ' + JSON.stringify(selection.name) + ': undefined;');
|
|
134
|
+
bodyless.push('exports[' + JSON.stringify(selection.name) + '] = value => value === undefined;');
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const id = 'urn:mpfrontend:read:' + selection.name;
|
|
138
|
+
types.push(' ' + JSON.stringify(selection.name) + ': ' + readType(response.schema, document) + ';');
|
|
139
|
+
ajv.addSchema({ ...readShape(response.schema, document), $id: id });
|
|
140
|
+
mapping[selection.name] = id;
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
'read-models.gen.ts': selections.length ? 'import validators from "./read-validators.gen.cjs";\nexport type ReadModels = {\n' + types.join('\n') + '\n};\n' +
|
|
144
|
+
'export function parseRead<K extends keyof ReadModels>(resource: K, value: unknown): ReadModels[K] {\n' +
|
|
145
|
+
' if (!Object.hasOwn(validators, resource) || !validators[resource](value)) throw new Error("INVALID_API_RESPONSE");\n' +
|
|
146
|
+
' return value as ReadModels[K];\n}\n' :
|
|
147
|
+
'export type ReadModels = Record<never, never>;\nexport function parseRead(resource: never, value: unknown): never {\n void resource; void value; throw new Error("INVALID_API_RESPONSE");\n}\n',
|
|
148
|
+
'read-validators.gen.cjs': standalone(ajv, mapping) + (bodyless.length ? '\n' + bodyless.join('\n') + '\n' : ''),
|
|
149
|
+
'read-validators.gen.d.cts': validators.length ? 'declare const validators: {\n' + validators.join('\n') + '\n};\nexport = validators;\n' : 'declare const validators: Record<string, never>;\nexport = validators;\n'
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function optionalJsonBranches(raw, document) {
|
|
153
|
+
const schema = resolved(raw, document);
|
|
154
|
+
if (!schema.oneOf)
|
|
155
|
+
return { schema, nonNull: null };
|
|
156
|
+
if (schema.anyOf || schema.allOf || schema.oneOf.length !== 2)
|
|
157
|
+
throw new Error('UNSUPPORTED_OPTIONAL_JSON_SCHEMA');
|
|
158
|
+
const branches = schema.oneOf.map(branch => resolved(branch, document));
|
|
159
|
+
const nulls = branches.filter(branch => branch.type === 'null');
|
|
160
|
+
if (nulls.length !== 1)
|
|
161
|
+
throw new Error('UNSUPPORTED_OPTIONAL_JSON_SCHEMA');
|
|
162
|
+
const nonNull = branches.find(branch => branch.type !== 'null');
|
|
163
|
+
if (!nonNull || nonNull.oneOf || nonNull.anyOf || nonNull.allOf)
|
|
164
|
+
throw new Error('UNSUPPORTED_OPTIONAL_JSON_SCHEMA');
|
|
165
|
+
return { schema, nonNull };
|
|
166
|
+
}
|
|
167
|
+
// Explicit required JSON, optional JSON or explicitly selected absent-body mutation. None grants authority.
|
|
168
|
+
export function requestModelOutputs(document, requests) {
|
|
169
|
+
if (!document.openapi.startsWith('3.1.'))
|
|
170
|
+
throw new Error('REQUEST_MODELS_REQUIRE_OPENAPI_3_1');
|
|
171
|
+
const ajv = new Ajv({ strict: true, allErrors: false, code: { source: true }, coerceTypes: false, useDefaults: false, removeAdditional: false });
|
|
172
|
+
addFormats(ajv);
|
|
173
|
+
const mapping = {}, types = [], validators = [], bodyless = [], optional = [];
|
|
174
|
+
for (const request of requests) {
|
|
175
|
+
validators.push(' readonly ' + JSON.stringify(request.name) + ': (value: unknown) => boolean;');
|
|
176
|
+
if (request.body === 'none') {
|
|
177
|
+
types.push(' ' + JSON.stringify(request.name) + ': undefined;');
|
|
178
|
+
bodyless.push('exports[' + JSON.stringify(request.name) + '] = value => value === undefined;');
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const id = 'urn:mpfrontend:request:' + request.name;
|
|
182
|
+
if (request.body === 'optional-json') {
|
|
183
|
+
const { schema, nonNull } = optionalJsonBranches(request.schema, document);
|
|
184
|
+
const type = (nonNull ? readType(nonNull, document, 0, 'request') + ' | null' : readType(schema, document, 0, 'request')) + ' | undefined';
|
|
185
|
+
const shape = nonNull ? { ...schema, oneOf: [{ type: 'null' }, readShape(nonNull, document, 0, 'request')] } : readShape(schema, document, 0, 'request');
|
|
186
|
+
types.push(' ' + JSON.stringify(request.name) + ': ' + type + ';');
|
|
187
|
+
ajv.addSchema({ ...shape, $id: id });
|
|
188
|
+
mapping[request.name] = id;
|
|
189
|
+
optional.push(request.name);
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
types.push(' ' + JSON.stringify(request.name) + ': ' + readType(request.schema, document, 0, 'request') + ';');
|
|
193
|
+
ajv.addSchema({ ...readShape(request.schema, document, 0, 'request'), $id: id });
|
|
194
|
+
mapping[request.name] = id;
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
'request-models.gen.ts': requests.length ? 'import validators from "./request-validators.gen.cjs";\nexport type RequestModels = {\n' + types.join('\n') + '\n};\n' +
|
|
198
|
+
'export function parseRequest<K extends keyof RequestModels>(request: K, value: unknown): RequestModels[K] {\n' +
|
|
199
|
+
' if (!Object.hasOwn(validators, request) || !validators[request](value)) throw new Error("INVALID_API_REQUEST");\n' +
|
|
200
|
+
' return value as RequestModels[K];\n}\n' :
|
|
201
|
+
'export type RequestModels = Record<never, never>;\nexport function parseRequest(request: never, value: unknown): never {\n void request; void value; throw new Error("INVALID_API_REQUEST");\n}\n',
|
|
202
|
+
'request-validators.gen.cjs': standalone(ajv, mapping) + (bodyless.length ? '\n' + bodyless.join('\n') + '\n' : '') +
|
|
203
|
+
(optional.length ? '\n' + optional.map((name, index) => 'const optional' + index + '=exports[' + JSON.stringify(name) + ']; exports[' + JSON.stringify(name) + '] = value => value === undefined || optional' + index + '(value);').join('\n') + '\n' : ''),
|
|
204
|
+
'request-validators.gen.d.cts': validators.length ? 'declare const validators: {\n' + validators.join('\n') + '\n};\nexport = validators;\n' : 'declare const validators: Record<string, never>;\nexport = validators;\n'
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=read-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-models.js","sourceRoot":"","sources":["../src/read-models.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mpfrontend/ftg-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/panahister/mpfrontend.git",
|
|
8
|
+
"directory": "packages/ftg-cli"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md",
|
|
22
|
+
"DESIGN-SYNC.md"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public",
|
|
26
|
+
"provenance": true
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@mpfrontend/ai-skills": "0.1.0",
|
|
30
|
+
"@mpfrontend/ftg-core": "0.1.0",
|
|
31
|
+
"@mpfrontend/i18n": "0.1.0",
|
|
32
|
+
"@mpfrontend/nx-plugin": "0.1.0",
|
|
33
|
+
"@apidevtools/swagger-parser": "13.1.0",
|
|
34
|
+
"openapi-types": "12.1.3",
|
|
35
|
+
"ajv": "8.20.0",
|
|
36
|
+
"ajv-formats": "3.0.1",
|
|
37
|
+
"yaml": "2.9.1"
|
|
38
|
+
},
|
|
39
|
+
"bin": {
|
|
40
|
+
"ftg": "./dist/cli.js",
|
|
41
|
+
"mpfrontend": "./dist/cli.js"
|
|
42
|
+
}
|
|
6
43
|
}
|