@mpfrontend/ftg-cli 0.0.0-stage → 1.0.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.
@@ -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/internal';
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,47 @@
1
1
  {
2
2
  "name": "@mpfrontend/ftg-cli",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "1.0.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
+ "./internal": {
19
+ "types": "./dist/internal.d.ts",
20
+ "import": "./dist/internal.js"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "README.md",
26
+ "DESIGN-SYNC.md"
27
+ ],
28
+ "publishConfig": {
29
+ "access": "public",
30
+ "provenance": true
31
+ },
32
+ "dependencies": {
33
+ "@mpfrontend/ai-skills": "1.0.0",
34
+ "@mpfrontend/ftg-core": "1.0.0",
35
+ "@mpfrontend/i18n": "1.0.0",
36
+ "@mpfrontend/nx-plugin": "1.0.0",
37
+ "@apidevtools/swagger-parser": "13.1.0",
38
+ "openapi-types": "12.1.3",
39
+ "ajv": "8.20.0",
40
+ "ajv-formats": "3.0.1",
41
+ "yaml": "2.9.1"
42
+ },
43
+ "bin": {
44
+ "ftg": "./dist/cli.js",
45
+ "mpfrontend": "./dist/cli.js"
46
+ }
6
47
  }