schemantic 0.3.0 → 0.4.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/CHANGELOG.md +196 -174
- package/LICENSE +21 -21
- package/README.md +88 -830
- package/dist/cli/index.d.ts +4 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +185 -61
- package/dist/cli/index.js.map +1 -1
- package/dist/core/configuration.d.ts +6 -0
- package/dist/core/configuration.d.ts.map +1 -0
- package/dist/core/configuration.js +64 -0
- package/dist/core/configuration.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/output-writer.d.ts +7 -0
- package/dist/core/output-writer.d.ts.map +1 -0
- package/dist/core/output-writer.js +255 -0
- package/dist/core/output-writer.js.map +1 -0
- package/dist/core/schemantic.d.ts +8 -2
- package/dist/core/schemantic.d.ts.map +1 -1
- package/dist/core/schemantic.js +196 -71
- package/dist/core/schemantic.js.map +1 -1
- package/dist/generators/api-client-generator.d.ts +9 -20
- package/dist/generators/api-client-generator.d.ts.map +1 -1
- package/dist/generators/api-client-generator.js +364 -424
- package/dist/generators/api-client-generator.js.map +1 -1
- package/dist/generators/base.d.ts.map +1 -1
- package/dist/generators/base.js +7 -25
- package/dist/generators/base.js.map +1 -1
- package/dist/generators/enum-generator.d.ts.map +1 -1
- package/dist/generators/enum-generator.js +30 -3
- package/dist/generators/enum-generator.js.map +1 -1
- package/dist/generators/hook-generator.d.ts +3 -17
- package/dist/generators/hook-generator.d.ts.map +1 -1
- package/dist/generators/hook-generator.js +51 -445
- package/dist/generators/hook-generator.js.map +1 -1
- package/dist/generators/naming.d.ts +10 -0
- package/dist/generators/naming.d.ts.map +1 -0
- package/dist/generators/naming.js +331 -0
- package/dist/generators/naming.js.map +1 -0
- package/dist/generators/object-generator.d.ts +0 -4
- package/dist/generators/object-generator.d.ts.map +1 -1
- package/dist/generators/object-generator.js +13 -101
- package/dist/generators/object-generator.js.map +1 -1
- package/dist/generators/primitive-generator.d.ts +1 -13
- package/dist/generators/primitive-generator.d.ts.map +1 -1
- package/dist/generators/primitive-generator.js +11 -76
- package/dist/generators/primitive-generator.js.map +1 -1
- package/dist/generators/projections.d.ts +10 -0
- package/dist/generators/projections.d.ts.map +1 -0
- package/dist/generators/projections.js +65 -0
- package/dist/generators/projections.js.map +1 -0
- package/dist/generators/schema-type.d.ts +23 -0
- package/dist/generators/schema-type.d.ts.map +1 -0
- package/dist/generators/schema-type.js +233 -0
- package/dist/generators/schema-type.js.map +1 -0
- package/dist/parsers/base.d.ts +2 -0
- package/dist/parsers/base.d.ts.map +1 -1
- package/dist/parsers/base.js +12 -2
- package/dist/parsers/base.js.map +1 -1
- package/dist/parsers/factory.d.ts.map +1 -1
- package/dist/parsers/factory.js +2 -1
- package/dist/parsers/factory.js.map +1 -1
- package/dist/parsers/openapi.d.ts +4 -0
- package/dist/parsers/openapi.d.ts.map +1 -1
- package/dist/parsers/openapi.js +107 -20
- package/dist/parsers/openapi.js.map +1 -1
- package/dist/plugins/branded-types.d.ts.map +1 -1
- package/dist/plugins/branded-types.js +231 -365
- package/dist/plugins/branded-types.js.map +1 -1
- package/dist/plugins/builtin.d.ts.map +1 -1
- package/dist/plugins/builtin.js +6 -141
- package/dist/plugins/builtin.js.map +1 -1
- package/dist/plugins/index.d.ts +4 -0
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +17 -0
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/loader.d.ts +5 -1
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +42 -5
- package/dist/plugins/loader.js.map +1 -1
- package/dist/plugins/manager.d.ts.map +1 -1
- package/dist/plugins/manager.js +7 -7
- package/dist/plugins/manager.js.map +1 -1
- package/dist/plugins/performance-monitoring.d.ts +31 -1
- package/dist/plugins/performance-monitoring.d.ts.map +1 -1
- package/dist/plugins/performance-monitoring.js +146 -207
- package/dist/plugins/performance-monitoring.js.map +1 -1
- package/dist/plugins/request-deduplication.d.ts.map +1 -1
- package/dist/plugins/request-deduplication.js +151 -586
- package/dist/plugins/request-deduplication.js.map +1 -1
- package/dist/plugins/zod-validation.d.ts +23 -15
- package/dist/plugins/zod-validation.d.ts.map +1 -1
- package/dist/plugins/zod-validation.js +390 -268
- package/dist/plugins/zod-validation.js.map +1 -1
- package/dist/types/core.d.ts +20 -3
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +2 -0
- package/dist/types/core.js.map +1 -1
- package/dist/types/openapi.d.ts +14 -1
- package/dist/types/openapi.d.ts.map +1 -1
- package/docs/ADVANCED_PLUGINS_IMPLEMENTATION.md +24 -355
- package/docs/ADVANCED_PLUGIN_DEVELOPMENT.md +33 -309
- package/docs/API.md +80 -601
- package/docs/AUDIT.md +49 -0
- package/docs/CONFIGURATION.md +81 -715
- package/docs/FASTAPI_TUTORIAL.md +109 -1497
- package/docs/NAMING_MIGRATION.md +59 -0
- package/docs/PLUGINS.md +49 -687
- package/docs/PLUGIN_DEVELOPMENT.md +53 -720
- package/docs/REAUDIT.md +399 -0
- package/docs/RELEASING.md +88 -0
- package/docs/REMEDIATION.md +58 -0
- package/docs/superpowers/plans/2026-10-10-audit-remediation.md +113 -0
- package/package.json +114 -95
- package/dist/__tests__/setup.d.ts +0 -6
- package/dist/__tests__/setup.d.ts.map +0 -1
- package/dist/__tests__/setup.js +0 -30
- package/dist/__tests__/setup.js.map +0 -1
- package/dist/__tests__/test-config.d.ts +0 -36
- package/dist/__tests__/test-config.d.ts.map +0 -1
- package/dist/__tests__/test-config.js +0 -562
- package/dist/__tests__/test-config.js.map +0 -1
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.propertyName = propertyName;
|
|
37
|
+
exports.renameSchemaProperties = renameSchemaProperties;
|
|
38
|
+
exports.generateConversionFile = generateConversionFile;
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const schema_type_1 = require("./schema-type");
|
|
41
|
+
// Emit literal source rather than Function.toString(), which can contain coverage instrumentation.
|
|
42
|
+
const propertyFormatterBody = String.raw `
|
|
43
|
+
if (mode === 'preserve') return wireName;
|
|
44
|
+
const tokens = wireName.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
45
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2').split(/[^A-Za-z0-9]+/).filter(Boolean);
|
|
46
|
+
const result = tokens.map((token, index) => {
|
|
47
|
+
const normalized = token.toLowerCase();
|
|
48
|
+
return index ? normalized.charAt(0).toUpperCase() + normalized.slice(1) : normalized;
|
|
49
|
+
}).join('') || 'property';
|
|
50
|
+
return /^\d/.test(result) ? '_' + result : result;
|
|
51
|
+
`;
|
|
52
|
+
const formatProperty = new Function('wireName', 'mode', propertyFormatterBody);
|
|
53
|
+
/** One formatter is shared by schema declarations and generated boundary conversion. */
|
|
54
|
+
function propertyName(wireName, mode = 'camelCase') {
|
|
55
|
+
return formatProperty(wireName, mode);
|
|
56
|
+
}
|
|
57
|
+
function resolvePointer(document, ref) {
|
|
58
|
+
if (!ref.startsWith('#/'))
|
|
59
|
+
return undefined;
|
|
60
|
+
let value = document;
|
|
61
|
+
for (const token of ref.slice(2).split('/')) {
|
|
62
|
+
const key = decodeURIComponent(token).replace(/~1/g, '/').replace(/~0/g, '~');
|
|
63
|
+
if (!value || typeof value !== 'object' || !Object.prototype.hasOwnProperty.call(value, key))
|
|
64
|
+
return undefined;
|
|
65
|
+
value = value[key];
|
|
66
|
+
}
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
function renamePointer(ref, mode) {
|
|
70
|
+
if (!ref.startsWith('#/'))
|
|
71
|
+
return ref;
|
|
72
|
+
const tokens = ref.slice(2).split('/').map(token => decodeURIComponent(token).replace(/~1/g, '/').replace(/~0/g, '~'));
|
|
73
|
+
return '#/' + tokens.map((token, index) => {
|
|
74
|
+
const name = index && tokens[index - 1] === 'properties' ? propertyName(token, mode) : token;
|
|
75
|
+
return encodeURIComponent(name.replace(/~/g, '~0').replace(/\//g, '~1'));
|
|
76
|
+
}).join('/');
|
|
77
|
+
}
|
|
78
|
+
/** Rename only Schema Object declarations, leaving wire parameters and payload examples intact. */
|
|
79
|
+
function renameSchemaProperties(schema, mode) {
|
|
80
|
+
const result = structuredClone(schema);
|
|
81
|
+
if (mode === 'preserve')
|
|
82
|
+
return result;
|
|
83
|
+
const assertNames = (value, location, names = new Map(), refs = new Set()) => {
|
|
84
|
+
if (!value || typeof value !== 'object')
|
|
85
|
+
return;
|
|
86
|
+
const object = value;
|
|
87
|
+
if (typeof object.$ref === 'string' && !refs.has(object.$ref)) {
|
|
88
|
+
assertNames(resolvePointer(schema, object.$ref), location, names, new Set([...refs, object.$ref]));
|
|
89
|
+
}
|
|
90
|
+
for (const wireName of Object.keys(object.properties || {})) {
|
|
91
|
+
const applicationName = propertyName(wireName, mode);
|
|
92
|
+
const previous = names.get(applicationName);
|
|
93
|
+
if (previous !== undefined && previous !== wireName)
|
|
94
|
+
throw new Error(`Property naming collision at ${location}: ${previous} and ${wireName} both become ${applicationName}`);
|
|
95
|
+
names.set(applicationName, wireName);
|
|
96
|
+
}
|
|
97
|
+
for (const branch of object.allOf || [])
|
|
98
|
+
assertNames(branch, location, names, refs);
|
|
99
|
+
// Alternatives remain distinct, but each inherits the enclosing object's declared fields.
|
|
100
|
+
for (const branch of [...(object.anyOf || []), ...(object.oneOf || [])])
|
|
101
|
+
assertNames(branch, location, new Map(names), refs);
|
|
102
|
+
};
|
|
103
|
+
const rename = (value, location) => {
|
|
104
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
105
|
+
return value;
|
|
106
|
+
const object = value;
|
|
107
|
+
assertNames(object, location);
|
|
108
|
+
if (typeof object.$ref === 'string')
|
|
109
|
+
object.$ref = renamePointer(object.$ref, mode);
|
|
110
|
+
if (object.properties)
|
|
111
|
+
object.properties = Object.fromEntries(Object.entries(object.properties)
|
|
112
|
+
.map(([name, child]) => [propertyName(name, mode), rename(child, `${location}.properties.${name}`)]));
|
|
113
|
+
if (object.required)
|
|
114
|
+
object.required = object.required.map(name => propertyName(name, mode));
|
|
115
|
+
if (object.discriminator) {
|
|
116
|
+
object.discriminator.propertyName = propertyName(object.discriminator.propertyName, mode);
|
|
117
|
+
if (object.discriminator.mapping)
|
|
118
|
+
object.discriminator.mapping = Object.fromEntries(Object.entries(object.discriminator.mapping)
|
|
119
|
+
.map(([name, ref]) => [name, renamePointer(ref, mode)]));
|
|
120
|
+
}
|
|
121
|
+
for (const keyword of ['items', 'additionalProperties', 'not', 'if', 'then', 'else', 'contains', 'propertyNames', 'unevaluatedProperties', 'unevaluatedItems']) {
|
|
122
|
+
if (object[keyword] && typeof object[keyword] === 'object')
|
|
123
|
+
object[keyword] = rename(object[keyword], `${location}.${keyword}`);
|
|
124
|
+
}
|
|
125
|
+
for (const keyword of ['allOf', 'anyOf', 'oneOf', 'prefixItems']) {
|
|
126
|
+
if (Array.isArray(object[keyword]))
|
|
127
|
+
object[keyword] = object[keyword].map((child, index) => rename(child, `${location}.${keyword}[${index}]`));
|
|
128
|
+
}
|
|
129
|
+
for (const keyword of ['$defs', 'definitions', 'patternProperties', 'dependentSchemas']) {
|
|
130
|
+
if (object[keyword] && typeof object[keyword] === 'object')
|
|
131
|
+
object[keyword] = Object.fromEntries(Object.entries(object[keyword])
|
|
132
|
+
.map(([name, child]) => [name, rename(child, `${location}.${keyword}.${name}`)]));
|
|
133
|
+
}
|
|
134
|
+
return object;
|
|
135
|
+
};
|
|
136
|
+
const visit = (value, location) => {
|
|
137
|
+
if (!value || typeof value !== 'object')
|
|
138
|
+
return;
|
|
139
|
+
const object = value;
|
|
140
|
+
for (const [name, child] of Object.entries(object)) {
|
|
141
|
+
const childLocation = location ? `${location}.${name}` : name;
|
|
142
|
+
if (name === 'schema')
|
|
143
|
+
object[name] = rename(child, childLocation);
|
|
144
|
+
else if (name === 'schemas' && child && typeof child === 'object')
|
|
145
|
+
object[name] = Object.fromEntries(Object.entries(child)
|
|
146
|
+
.map(([key, entry]) => [key, rename(entry, `${childLocation}.${key}`)]));
|
|
147
|
+
else if (!['example', 'examples', 'default', 'enum', 'const'].includes(name))
|
|
148
|
+
visit(child, childLocation);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
visit(result, '');
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
// The interpreter is self-contained in generated packages and has no runtime library dependency.
|
|
155
|
+
const conversionRuntime = String.raw `
|
|
156
|
+
type SchemaRecord = Record<string, unknown>;
|
|
157
|
+
function record(value: unknown): value is SchemaRecord {
|
|
158
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) return false;
|
|
159
|
+
const prototype: unknown = Object.getPrototypeOf(value);
|
|
160
|
+
return prototype === null || (Object.getPrototypeOf(prototype) === null
|
|
161
|
+
&& Object.prototype.toString.call(value) === '[object Object]');
|
|
162
|
+
}
|
|
163
|
+
function resolveSchema(ref: string): unknown {
|
|
164
|
+
if (!ref.startsWith('#/')) throw new Error('Unsupported conversion schema reference: ' + ref);
|
|
165
|
+
let value: unknown = wireDocument;
|
|
166
|
+
for (const token of ref.slice(2).split('/')) {
|
|
167
|
+
const key = decodeURIComponent(token).replace(/~1/g, '/').replace(/~0/g, '~');
|
|
168
|
+
if (!record(value) || !Object.prototype.hasOwnProperty.call(value, key)) throw new Error('Unresolved conversion schema reference: ' + ref);
|
|
169
|
+
value = value[key];
|
|
170
|
+
}
|
|
171
|
+
return value;
|
|
172
|
+
}
|
|
173
|
+
function sourceName(wireName: string, encode: boolean): string { return encode ? appName(wireName) : wireName; }
|
|
174
|
+
function matches(value: unknown, schema: unknown, encode: boolean, refs = new Set<string>()): boolean {
|
|
175
|
+
if (schema === false) return false;
|
|
176
|
+
if (!record(schema)) return true;
|
|
177
|
+
if (typeof schema.$ref === 'string' && !refs.has(schema.$ref)
|
|
178
|
+
&& !matches(value, resolveSchema(schema.$ref), encode, new Set([...refs, schema.$ref]))) return false;
|
|
179
|
+
if (schema.const !== undefined && JSON.stringify(value) !== JSON.stringify(schema.const)) return false;
|
|
180
|
+
if (Array.isArray(schema.enum) && !schema.enum.some(entry => JSON.stringify(value) === JSON.stringify(entry))) return false;
|
|
181
|
+
if (value === null && schema.nullable === true) return true;
|
|
182
|
+
const typeMatches = (type: unknown): boolean => type === 'null' ? value === null : type === 'object' ? record(value)
|
|
183
|
+
: type === 'array' ? Array.isArray(value) : type === 'integer' ? typeof value === 'number' && Number.isInteger(value)
|
|
184
|
+
: type === 'number' ? typeof value === 'number' : type === 'string' ? schema['x-schemantic-binary'] === true
|
|
185
|
+
? /\[object (?:Blob|File)\]/.test(Object.prototype.toString.call(value)) : typeof value === 'string'
|
|
186
|
+
: type === 'boolean' ? typeof value === 'boolean' : true;
|
|
187
|
+
if (Array.isArray(schema.type) ? !schema.type.some(typeMatches) : schema.type && !typeMatches(schema.type)) return false;
|
|
188
|
+
if (Array.isArray(schema.allOf) && !schema.allOf.every(branch => matches(value, branch, encode, refs))) return false;
|
|
189
|
+
for (const keyword of ['oneOf', 'anyOf']) if (Array.isArray(schema[keyword])
|
|
190
|
+
&& !(schema[keyword] as unknown[]).some(branch => matches(value, branch, encode, refs))) return false;
|
|
191
|
+
if (record(value)) {
|
|
192
|
+
if (Array.isArray(schema.required) && schema.required.some(name => typeof name === 'string'
|
|
193
|
+
&& !Object.prototype.hasOwnProperty.call(value, sourceName(name, encode)))) return false;
|
|
194
|
+
if (record(schema.properties)) for (const [name, child] of Object.entries(schema.properties)) {
|
|
195
|
+
const key = sourceName(name, encode);
|
|
196
|
+
if (Object.prototype.hasOwnProperty.call(value, key) && !matches(value[key], child, encode, refs)) return false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
function sameValue(left: unknown, right: unknown): boolean {
|
|
202
|
+
if (Object.is(left, right)) return true;
|
|
203
|
+
if (Array.isArray(left) && Array.isArray(right)) return left.length === right.length && left.every((value, index) => sameValue(value, right[index]));
|
|
204
|
+
if (!record(left) || !record(right)) return false;
|
|
205
|
+
const keys = Object.keys(left);
|
|
206
|
+
return keys.length === Object.keys(right).length && keys.every(key => Object.prototype.hasOwnProperty.call(right, key) && sameValue(left[key], right[key]));
|
|
207
|
+
}
|
|
208
|
+
function structuralScore(value: unknown, schema: unknown, encode: boolean, refs = new Set<string>()): number {
|
|
209
|
+
if (!record(value) || !record(schema)) return 0;
|
|
210
|
+
let score = 0;
|
|
211
|
+
if (typeof schema.$ref === 'string' && !refs.has(schema.$ref)) score += structuralScore(value, resolveSchema(schema.$ref), encode, new Set([...refs, schema.$ref]));
|
|
212
|
+
if (record(schema.properties)) score += Object.keys(schema.properties).filter(name => Object.prototype.hasOwnProperty.call(value, sourceName(name, encode))).length;
|
|
213
|
+
if (Array.isArray(schema.allOf)) score += schema.allOf.reduce<number>((sum, branch) => sum + structuralScore(value, branch, encode, refs), 0);
|
|
214
|
+
return score;
|
|
215
|
+
}
|
|
216
|
+
function chooseUnion(value: unknown, schema: SchemaRecord, branches: unknown[], encode: boolean): unknown {
|
|
217
|
+
if (record(value) && record(schema.discriminator) && typeof schema.discriminator.propertyName === 'string') {
|
|
218
|
+
const discriminator = value[sourceName(schema.discriminator.propertyName, encode)];
|
|
219
|
+
if (typeof discriminator === 'string' && record(schema.discriminator.mapping)) {
|
|
220
|
+
const ref = schema.discriminator.mapping[discriminator];
|
|
221
|
+
if (typeof ref === 'string') {
|
|
222
|
+
const document = record(wireDocument) ? wireDocument : {};
|
|
223
|
+
const components = record(document.components) ? document.components : {};
|
|
224
|
+
const definitions = record(components.schemas) ? components.schemas : {};
|
|
225
|
+
const target = !ref.startsWith('#/') && Object.prototype.hasOwnProperty.call(definitions, ref)
|
|
226
|
+
? '#/components/schemas/' + encodeURIComponent(ref.replace(/~/g, '~0').replace(/\//g, '~1')) : ref;
|
|
227
|
+
const branch = branches.find(candidate => record(candidate) && candidate.$ref === target);
|
|
228
|
+
if (branch !== undefined) return branch;
|
|
229
|
+
return { $ref: target };
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const matching = branches.filter(branch => matches(value, branch, encode));
|
|
234
|
+
if (!matching.length) throw new Error('No union variant matches the payload for schema-aware conversion');
|
|
235
|
+
const scores = matching.map(branch => structuralScore(value, branch, encode));
|
|
236
|
+
const maximum = Math.max(...scores);
|
|
237
|
+
const candidates = matching.filter((_, index) => scores[index] === maximum);
|
|
238
|
+
if (candidates.length === 1) return candidates[0];
|
|
239
|
+
const converted = candidates.map(branch => convert(value, branch, encode, new WeakSet<object>()));
|
|
240
|
+
if (converted.every(result => sameValue(result, converted[0]))) return candidates[0];
|
|
241
|
+
throw new Error('Ambiguous union conversion: multiple matching variants rename the payload differently; provide a discriminator');
|
|
242
|
+
}
|
|
243
|
+
function schemaNodes(schema: unknown, value: unknown, encode: boolean, refs = new Set<string>()): SchemaRecord[] {
|
|
244
|
+
if (schema === false) throw new Error('Cannot convert a value against a false schema');
|
|
245
|
+
if (!record(schema)) return [];
|
|
246
|
+
const nodes: SchemaRecord[] = [schema];
|
|
247
|
+
if (typeof schema.$ref === 'string') {
|
|
248
|
+
if (refs.has(schema.$ref)) throw new Error('Circular alias schema reference in conversion: ' + schema.$ref);
|
|
249
|
+
nodes.push(...schemaNodes(resolveSchema(schema.$ref), value, encode, new Set([...refs, schema.$ref])));
|
|
250
|
+
}
|
|
251
|
+
if (Array.isArray(schema.allOf)) for (const branch of schema.allOf) nodes.push(...schemaNodes(branch, value, encode, refs));
|
|
252
|
+
for (const keyword of ['oneOf', 'anyOf']) if (Array.isArray(schema[keyword])) nodes.push(...schemaNodes(chooseUnion(value, schema, schema[keyword] as unknown[], encode), value, encode, refs));
|
|
253
|
+
return nodes;
|
|
254
|
+
}
|
|
255
|
+
function convert(value: unknown, schema: unknown, encode: boolean, active: WeakSet<object>): unknown {
|
|
256
|
+
if (value === null || value === undefined || (!Array.isArray(value) && !record(value))) return value;
|
|
257
|
+
if (active.has(value)) throw new Error('Cyclic payload is unsupported by schema-aware conversion');
|
|
258
|
+
active.add(value);
|
|
259
|
+
try {
|
|
260
|
+
const nodes = schemaNodes(schema, value, encode);
|
|
261
|
+
if (Array.isArray(value)) {
|
|
262
|
+
const items = nodes.filter(node => node.items !== undefined).map(node => node.items);
|
|
263
|
+
return items.length ? value.map(item => convert(item, { allOf: items }, encode, active)) : value.slice();
|
|
264
|
+
}
|
|
265
|
+
const properties = new Map<string, { wireName: string; schemas: unknown[] }>();
|
|
266
|
+
const names = new Map<string, string>();
|
|
267
|
+
const additional: unknown[] = [];
|
|
268
|
+
for (const node of nodes) {
|
|
269
|
+
if (record(node.properties)) for (const [wireName, child] of Object.entries(node.properties)) {
|
|
270
|
+
const applicationName = appName(wireName);
|
|
271
|
+
const previous = names.get(applicationName);
|
|
272
|
+
if (previous !== undefined && previous !== wireName) throw new Error('Property naming collision in conversion: ' + previous + ' and ' + wireName);
|
|
273
|
+
names.set(applicationName, wireName);
|
|
274
|
+
const key = sourceName(wireName, encode);
|
|
275
|
+
const existing = properties.get(key);
|
|
276
|
+
if (existing) existing.schemas.push(child); else properties.set(key, { wireName, schemas: [child] });
|
|
277
|
+
}
|
|
278
|
+
if (record(node.additionalProperties)) additional.push(node.additionalProperties);
|
|
279
|
+
}
|
|
280
|
+
const result: SchemaRecord = {};
|
|
281
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
282
|
+
const declared = properties.get(key);
|
|
283
|
+
const target = declared ? encode ? declared.wireName : appName(declared.wireName) : key;
|
|
284
|
+
if (Object.prototype.hasOwnProperty.call(result, target)) throw new Error('Payload key collision during conversion: ' + key + ' becomes ' + target);
|
|
285
|
+
const converted = declared ? convert(entry, { allOf: declared.schemas }, encode, active)
|
|
286
|
+
: additional.length ? convert(entry, { allOf: additional }, encode, active) : entry;
|
|
287
|
+
Object.defineProperty(result, target, { value: converted, enumerable: true, writable: true, configurable: true });
|
|
288
|
+
}
|
|
289
|
+
return result;
|
|
290
|
+
} finally { active.delete(value); }
|
|
291
|
+
}
|
|
292
|
+
export function serializeValue(value: unknown, schema: unknown): unknown {
|
|
293
|
+
return preserveNames ? value : convert(value, schema, true, new WeakSet<object>());
|
|
294
|
+
}
|
|
295
|
+
export function deserializeValue(value: unknown, schema: unknown): unknown {
|
|
296
|
+
return preserveNames ? value : convert(value, schema, false, new WeakSet<object>());
|
|
297
|
+
}
|
|
298
|
+
`;
|
|
299
|
+
/** Emit portable converters using the original wire registry, including local pointer references. */
|
|
300
|
+
function generateConversionFile(context, wireSchema) {
|
|
301
|
+
const mode = context.config.propertyNaming ?? 'camelCase';
|
|
302
|
+
renameSchemaProperties(wireSchema, mode); // Validate naming collisions before producing output.
|
|
303
|
+
const names = Object.keys(wireSchema.components?.schemas || {}).map(name => ({ wireName: name,
|
|
304
|
+
name: (0, schema_type_1.typeName)(name, context.config.typePrefix, context.config.typeSuffix) }))
|
|
305
|
+
.filter(entry => context.generatedTypes.has(entry.name) || context.typeRegistry.getType(entry.name));
|
|
306
|
+
const exports = new Set(['serializeValue', 'deserializeValue']);
|
|
307
|
+
for (const entry of names)
|
|
308
|
+
for (const prefix of ['serialize', 'deserialize']) {
|
|
309
|
+
const name = prefix + entry.name;
|
|
310
|
+
if (exports.has(name))
|
|
311
|
+
throw new Error('Conversion export naming collision: ' + name);
|
|
312
|
+
exports.add(name);
|
|
313
|
+
}
|
|
314
|
+
const imports = names.length ? "import type * as SchemaTypes from './types.js';\n\n" : '';
|
|
315
|
+
let content = imports + '// Schema-aware wire conversion. This converts names; it does not validate payloads.\n'
|
|
316
|
+
+ 'const wireDocument: unknown = JSON.parse(' + JSON.stringify(JSON.stringify(wireSchema)) + ');\n'
|
|
317
|
+
+ 'const preserveNames: boolean = ' + String(mode === 'preserve') + ';\n'
|
|
318
|
+
+ "const appName = (wireName: string, mode: 'camelCase' | 'preserve' = 'camelCase'): string => {\n" + propertyFormatterBody + '};\n'
|
|
319
|
+
+ conversionRuntime;
|
|
320
|
+
for (const entry of names) {
|
|
321
|
+
const ref = '#/components/schemas/' + encodeURIComponent(entry.wireName.replace(/~/g, '~0').replace(/\//g, '~1'));
|
|
322
|
+
const literal = JSON.stringify({ $ref: ref });
|
|
323
|
+
content += '\nexport function serialize' + entry.name + '(value: SchemaTypes.' + entry.name + '): unknown {\n'
|
|
324
|
+
+ ' return serializeValue(value, ' + literal + ');\n}\n'
|
|
325
|
+
+ 'export function deserialize' + entry.name + '(value: unknown): SchemaTypes.' + entry.name + ' {\n'
|
|
326
|
+
+ ' return deserializeValue(value, ' + literal + ') as SchemaTypes.' + entry.name + ';\n}\n';
|
|
327
|
+
}
|
|
328
|
+
return { path: path.join(context.config.outputDir, 'conversion.ts'), content, type: 'type',
|
|
329
|
+
dependencies: names.length ? ['./types.js'] : [], size: Buffer.byteLength(content, 'utf8') };
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/generators/naming.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-generator.d.ts","sourceRoot":"","sources":["../../src/generators/object-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"object-generator.d.ts","sourceRoot":"","sources":["../../src/generators/object-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAGlE;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;gBAC5C,OAAO,EAAE,qBAAqB;IAI1C,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,aAAa;IAoC3E,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO;IAW1C,WAAW,IAAI,MAAM;IAIrB,WAAW;;;;;;;IAWX;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2EzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACH,OAAO,CAAC,WAAW;CAkCpB"}
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.ObjectTypeGenerator = void 0;
|
|
8
8
|
const schema_1 = require("../types/schema");
|
|
9
9
|
const base_1 = require("./base");
|
|
10
|
+
const schema_type_1 = require("./schema-type");
|
|
10
11
|
/**
|
|
11
12
|
* Object type generator implementation
|
|
12
13
|
*/
|
|
@@ -20,23 +21,11 @@ class ObjectTypeGenerator extends base_1.BaseTypeGenerator {
|
|
|
20
21
|
}
|
|
21
22
|
const typeName = this.getTypeName(schema, context);
|
|
22
23
|
const dependencies = [];
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const content = `export type ${typeName} = ${unionTypes.join(" | ")};\n`;
|
|
29
|
-
const imports = this.generateImports();
|
|
30
|
-
return {
|
|
31
|
-
name: typeName,
|
|
32
|
-
content: imports + content,
|
|
33
|
-
dependencies,
|
|
34
|
-
exports: [typeName],
|
|
35
|
-
isInterface: false,
|
|
36
|
-
isEnum: false,
|
|
37
|
-
isUnion: true,
|
|
38
|
-
sourceSchema: schema,
|
|
39
|
-
};
|
|
24
|
+
if (schema.oneOf?.length || schema.anyOf?.length || schema.allOf?.length || schema.nullable || Array.isArray(schema.type) || schema.additionalProperties !== undefined || !schema.properties) {
|
|
25
|
+
const expression = this.generatePropertyType(schema, context, dependencies);
|
|
26
|
+
return { name: typeName, content: 'export type ' + typeName + ' = ' + expression + ';\n',
|
|
27
|
+
dependencies, exports: [typeName], isInterface: false, isEnum: false,
|
|
28
|
+
isUnion: !!(schema.oneOf || schema.anyOf), sourceSchema: schema };
|
|
40
29
|
}
|
|
41
30
|
// Generate interface content (supports allOf merging/extends)
|
|
42
31
|
const content = this.generateInterface(schema, context, dependencies);
|
|
@@ -158,7 +147,7 @@ class ObjectTypeGenerator extends base_1.BaseTypeGenerator {
|
|
|
158
147
|
}
|
|
159
148
|
const type = this.generatePropertyType(propertySchema, context, dependencies);
|
|
160
149
|
const optionalType = this.wrapOptional(type, isOptional);
|
|
161
|
-
const formattedName =
|
|
150
|
+
const formattedName = (0, schema_type_1.propertyKey)(propertyName);
|
|
162
151
|
property += `${formattedName}${isOptional ? "?" : ""}: ${optionalType};`;
|
|
163
152
|
return property;
|
|
164
153
|
}
|
|
@@ -166,89 +155,12 @@ class ObjectTypeGenerator extends base_1.BaseTypeGenerator {
|
|
|
166
155
|
* Generate property type
|
|
167
156
|
*/
|
|
168
157
|
generatePropertyType(schema, context, dependencies) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
return refType;
|
|
177
|
-
}
|
|
178
|
-
if (!(0, schema_1.isOpenAPISchemaObject)(schema)) {
|
|
179
|
-
return "unknown";
|
|
180
|
-
}
|
|
181
|
-
// Handle arrays
|
|
182
|
-
if (schema.type === "array") {
|
|
183
|
-
const itemType = schema.items
|
|
184
|
-
? this.generatePropertyType(schema.items, context, dependencies)
|
|
185
|
-
: "unknown";
|
|
186
|
-
return `${itemType}[]`;
|
|
187
|
-
}
|
|
188
|
-
// Handle unions (oneOf, anyOf)
|
|
189
|
-
if (schema.oneOf || schema.anyOf) {
|
|
190
|
-
const unionSchemas = [...(schema.oneOf || []), ...(schema.anyOf || [])];
|
|
191
|
-
const unionTypes = unionSchemas.map((s) => this.generatePropertyType(s, context, dependencies));
|
|
192
|
-
return unionTypes.join(" | ");
|
|
193
|
-
}
|
|
194
|
-
// Handle intersections (allOf)
|
|
195
|
-
if (schema.allOf) {
|
|
196
|
-
// Prefer merging/extends at interface level; as a property type use intersection
|
|
197
|
-
const intersectionTypes = schema.allOf.map((s) => this.generatePropertyType(s, context, dependencies));
|
|
198
|
-
return intersectionTypes.join(" & ");
|
|
199
|
-
}
|
|
200
|
-
// Handle object inline typing and dictionaries
|
|
201
|
-
if (schema.type === "object") {
|
|
202
|
-
const hasProps = !!schema.properties && Object.keys(schema.properties).length > 0;
|
|
203
|
-
if (hasProps) {
|
|
204
|
-
const lines = [];
|
|
205
|
-
for (const [propName, propSchema] of Object.entries(schema.properties)) {
|
|
206
|
-
const isOpt = this.isOptional(schema.required, propName);
|
|
207
|
-
const t = this.generatePropertyType(propSchema, context, dependencies);
|
|
208
|
-
const formatted = this.convertName(propName);
|
|
209
|
-
// When emitting inline object body, do not append undefined type inside the object; use '?' only
|
|
210
|
-
const propType = isOpt ? t : t;
|
|
211
|
-
lines.push(`${formatted}${isOpt ? "?" : ""}: ${propType};`);
|
|
212
|
-
}
|
|
213
|
-
return `{
|
|
214
|
-
${lines.join("\n ")}
|
|
215
|
-
}`;
|
|
216
|
-
}
|
|
217
|
-
// Dictionary/object map via additionalProperties
|
|
218
|
-
if (schema.additionalProperties !== undefined) {
|
|
219
|
-
if (schema.additionalProperties === true) {
|
|
220
|
-
return "Record<string, unknown>";
|
|
221
|
-
}
|
|
222
|
-
if (schema.additionalProperties &&
|
|
223
|
-
typeof schema.additionalProperties === "object") {
|
|
224
|
-
const valueType = this.generatePropertyType(schema.additionalProperties, context, dependencies);
|
|
225
|
-
return `Record<string, ${valueType}>`;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
// Fallback for generic object
|
|
229
|
-
return "Record<string, unknown>";
|
|
230
|
-
}
|
|
231
|
-
// Handle basic types
|
|
232
|
-
if (schema.type) {
|
|
233
|
-
return this.mapSchemaTypeToTypeScript(schema.type, schema.format);
|
|
234
|
-
}
|
|
235
|
-
// Handle enums
|
|
236
|
-
if (schema.enum) {
|
|
237
|
-
return this.generateEnumType(schema.enum);
|
|
238
|
-
}
|
|
239
|
-
// Handle const
|
|
240
|
-
if (schema.const !== undefined) {
|
|
241
|
-
return JSON.stringify(schema.const);
|
|
242
|
-
}
|
|
243
|
-
// Default fallback
|
|
244
|
-
return "unknown";
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Generate enum type
|
|
248
|
-
*/
|
|
249
|
-
generateEnumType(enumValues) {
|
|
250
|
-
const stringValues = enumValues.map((val) => JSON.stringify(val));
|
|
251
|
-
return stringValues.join(" | ");
|
|
158
|
+
return (0, schema_type_1.schemaType)(schema, ref => {
|
|
159
|
+
const name = this.formatTypeName(this.extractTypeNameFromRef(ref));
|
|
160
|
+
if (dependencies && !dependencies.includes(name))
|
|
161
|
+
dependencies.push(name);
|
|
162
|
+
return name;
|
|
163
|
+
}, this.options.customTypeMappings, context?.schemaResolver);
|
|
252
164
|
}
|
|
253
165
|
/**
|
|
254
166
|
* Get type name from schema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-generator.js","sourceRoot":"","sources":["../../src/generators/object-generator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4CAAwE;AAExE,iCAAkE;
|
|
1
|
+
{"version":3,"file":"object-generator.js","sourceRoot":"","sources":["../../src/generators/object-generator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4CAAwE;AAExE,iCAAkE;AAClE,+CAAwD;AAExD;;GAEG;AACH,MAAa,mBAAoB,SAAQ,wBAAiB;IACxD,YAAY,OAA8B;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,MAAsB,EAAE,OAA0B;QACzD,IAAI,CAAC,IAAA,8BAAqB,EAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7L,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;YAC5E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK;gBACtF,YAAY,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK;gBACpE,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QACtE,CAAC;QAED,8DAA8D;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAEtE,mBAAmB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvC,wBAAwB;QACxB,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;QAEtC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,WAAW;YACpB,YAAY;YACZ,OAAO,EAAE,CAAC,QAAQ,CAAC;YACnB,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,MAAM;SACrB,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,MAAsB;QAC9B,IAAI,CAAC,IAAA,8BAAqB,EAAC,MAAM,CAAC,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,CACL,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;YAC7D,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,WAAW;QACT,OAAO,GAAG,CAAC;IACb,CAAC;IAED,WAAW;QACT,OAAO;YACL,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,OAAO;YAChB,WAAW,EACT,6DAA6D;YAC/D,cAAc,EAAE,CAAC,QAAQ,CAAC;YAC1B,gBAAgB,EAAE,CAAC,MAAM,CAAC;SAC3B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB,CACvB,MAAsB,EACtB,OAA0B,EAC1B,YAAsB;QAEtB,IAAI,CAAC,IAAA,8BAAqB,EAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzE,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,OAAO,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,sFAAsF;QACtF,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,aAAa,GAAmB,MAAM,CAAC;QAC3C,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,IAAI,QAA4B,CAAC;YACjC,MAAM,WAAW,GAAmC,EAAE,CAAC;YACvD,IAAI,cAAoC,CAAC;YAEzC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC7B,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;oBAC/D,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBACzC,IAAI,YAAY,IAAI,QAAQ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACjE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;qBAAM,IAAI,IAAA,8BAAqB,EAAC,CAAC,CAAC,EAAE,CAAC;oBACpC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;wBACjB,MAAM,CAAC,MAAM,CACX,WAAW,EACX,CAAC,CAAC,UAA4C,CAC/C,CAAC;oBACJ,CAAC;oBACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC9B,cAAc,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,aAAa,GAAG,YAAY,QAAQ,EAAE,CAAC;YACzC,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,aAAa,GAAG;oBACd,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,WAAW;oBACvB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtC,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,oBAAoB,QAAQ,GAAG,aAAa,MAAM,CAAC;QAE9D,IAAI,IAAA,8BAAqB,EAAC,aAAa,CAAC,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;YACrE,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CACxC,aAAa,EACb,OAAO,EACP,YAAY,CACb,CAAC;YACF,OAAO,IAAI,UAAU,CAAC;QACxB,CAAC;QAED,OAAO,IAAI,KAAK,CAAC;QAEjB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,kBAAkB,CACxB,MAAsB,EACtB,OAA0B,EAC1B,YAAsB;QAEtB,IAAI,CAAC,IAAA,8BAAqB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CACzD,MAAM,CAAC,UAAU,CAClB,EAAE,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CACpC,YAAY,EACZ,cAAgC,EAChC,MAAM,CAAC,QAAQ,EACf,OAAO,EACP,YAAY,CACb,CAAC;YACF,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjE,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,YAAoB,EACpB,cAA8B,EAC9B,QAAmB,EACnB,OAA2B,EAC3B,YAAuB;QAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAA,8BAAqB,EAAC,cAAc,CAAC;YACnD,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC;YAC1E,CAAC,CAAC,EAAE,CAAC;QAEP,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CACpC,cAAc,EACd,OAAO,EACP,YAAY,CACb,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAEzD,MAAM,aAAa,GAAG,IAAA,yBAAW,EAAC,YAAY,CAAC,CAAC;QAChD,QAAQ,IAAI,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,GAAG,CAAC;QAEzE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,MAAsB,EAAE,OAA2B,EAAE,YAAuB;QACvG,OAAO,IAAA,wBAAU,EAAC,MAAM,EAAE,GAAG,CAAC,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACK,WAAW,CACjB,MAAsB,EACtB,OAA0B;QAE1B,oCAAoC;QACpC,IAAI,oBAAoB,IAAI,MAAM,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,kBAA4B,CAAC,CAAC;QAClE,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAA,8BAAqB,EAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACzD,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,QAAQ,GAAG,eAAe,CAAC;YAE/B,OACE,aAAa,CAAC,IAAI,CAChB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAC1D,EACD,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,WAAW;QACX,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AAjQD,kDAiQC"}
|
|
@@ -11,7 +11,7 @@ import { BaseTypeGenerator, TypeGenerationOptions } from "./base";
|
|
|
11
11
|
export declare class PrimitiveTypeGenerator extends BaseTypeGenerator {
|
|
12
12
|
constructor(options: TypeGenerationOptions);
|
|
13
13
|
generate(schema: ResolvedSchema, context: GenerationContext): GeneratedType;
|
|
14
|
-
canHandle(
|
|
14
|
+
canHandle(_schema: ResolvedSchema): boolean;
|
|
15
15
|
getPriority(): number;
|
|
16
16
|
getMetadata(): {
|
|
17
17
|
name: string;
|
|
@@ -20,18 +20,6 @@ export declare class PrimitiveTypeGenerator extends BaseTypeGenerator {
|
|
|
20
20
|
supportedTypes: string[];
|
|
21
21
|
supportedFormats: string[];
|
|
22
22
|
};
|
|
23
|
-
/**
|
|
24
|
-
* Generate type alias
|
|
25
|
-
*/
|
|
26
|
-
private generateTypeAlias;
|
|
27
|
-
/**
|
|
28
|
-
* Generate TypeScript type from schema
|
|
29
|
-
*/
|
|
30
|
-
private generateType;
|
|
31
|
-
/**
|
|
32
|
-
* Check if schema is a primitive type
|
|
33
|
-
*/
|
|
34
|
-
private isPrimitiveSchema;
|
|
35
23
|
/**
|
|
36
24
|
* Get type name from schema
|
|
37
25
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitive-generator.d.ts","sourceRoot":"","sources":["../../src/generators/primitive-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"primitive-generator.d.ts","sourceRoot":"","sources":["../../src/generators/primitive-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAGlE;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;gBAC/C,OAAO,EAAE,qBAAqB;IAI1C,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,aAAa;IAkC3E,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO;IAE3C,WAAW,IAAI,MAAM;IAIrB,WAAW;;;;;;;IAUX;;OAEG;IACH,OAAO,CAAC,WAAW;CAkCpB"}
|