@powerlines/schema 0.11.72 → 0.11.73
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/dist/index.cjs +2111 -97
- package/dist/index.d.cts +1841 -11
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1841 -13
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1999 -15
- package/dist/index.mjs.map +1 -0
- package/package.json +5 -5
- package/dist/_virtual/_rolldown/runtime.cjs +0 -37
- package/dist/bundle.cjs +0 -55
- package/dist/bundle.d.cts +0 -21
- package/dist/bundle.d.cts.map +0 -1
- package/dist/bundle.d.mts +0 -23
- package/dist/bundle.d.mts.map +0 -1
- package/dist/bundle.mjs +0 -54
- package/dist/bundle.mjs.map +0 -1
- package/dist/codegen.cjs +0 -81
- package/dist/codegen.d.cts +0 -26
- package/dist/codegen.d.cts.map +0 -1
- package/dist/codegen.d.mts +0 -28
- package/dist/codegen.d.mts.map +0 -1
- package/dist/codegen.mjs +0 -77
- package/dist/codegen.mjs.map +0 -1
- package/dist/constants.cjs +0 -69
- package/dist/constants.d.cts +0 -17
- package/dist/constants.d.cts.map +0 -1
- package/dist/constants.d.mts +0 -19
- package/dist/constants.d.mts.map +0 -1
- package/dist/constants.mjs +0 -65
- package/dist/constants.mjs.map +0 -1
- package/dist/extract.cjs +0 -490
- package/dist/extract.d.cts +0 -125
- package/dist/extract.d.cts.map +0 -1
- package/dist/extract.d.mts +0 -127
- package/dist/extract.d.mts.map +0 -1
- package/dist/extract.mjs +0 -480
- package/dist/extract.mjs.map +0 -1
- package/dist/helpers.cjs +0 -171
- package/dist/helpers.d.cts +0 -111
- package/dist/helpers.d.cts.map +0 -1
- package/dist/helpers.d.mts +0 -113
- package/dist/helpers.d.mts.map +0 -1
- package/dist/helpers.mjs +0 -164
- package/dist/helpers.mjs.map +0 -1
- package/dist/metadata.cjs +0 -61
- package/dist/metadata.d.cts +0 -31
- package/dist/metadata.d.cts.map +0 -1
- package/dist/metadata.d.mts +0 -33
- package/dist/metadata.d.mts.map +0 -1
- package/dist/metadata.mjs +0 -60
- package/dist/metadata.mjs.map +0 -1
- package/dist/persistence.cjs +0 -82
- package/dist/persistence.d.cts +0 -47
- package/dist/persistence.d.cts.map +0 -1
- package/dist/persistence.d.mts +0 -49
- package/dist/persistence.d.mts.map +0 -1
- package/dist/persistence.mjs +0 -79
- package/dist/persistence.mjs.map +0 -1
- package/dist/reflection.cjs +0 -434
- package/dist/reflection.d.cts +0 -11
- package/dist/reflection.d.cts.map +0 -1
- package/dist/reflection.d.mts +0 -13
- package/dist/reflection.d.mts.map +0 -1
- package/dist/reflection.mjs +0 -433
- package/dist/reflection.mjs.map +0 -1
- package/dist/resolve.cjs +0 -113
- package/dist/resolve.d.cts +0 -36
- package/dist/resolve.d.cts.map +0 -1
- package/dist/resolve.d.mts +0 -38
- package/dist/resolve.d.mts.map +0 -1
- package/dist/resolve.mjs +0 -110
- package/dist/resolve.mjs.map +0 -1
- package/dist/type-checks.cjs +0 -642
- package/dist/type-checks.d.cts +0 -316
- package/dist/type-checks.d.cts.map +0 -1
- package/dist/type-checks.d.mts +0 -318
- package/dist/type-checks.d.mts.map +0 -1
- package/dist/type-checks.mjs +0 -603
- package/dist/type-checks.mjs.map +0 -1
- package/dist/types.d.cts +0 -1152
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts +0 -1154
- package/dist/types.d.mts.map +0 -1
- package/dist/validate.cjs +0 -35
- package/dist/validate.mjs +0 -33
- package/dist/validate.mjs.map +0 -1
package/dist/reflection.cjs
DELETED
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
|
-
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
10
|
-
const require_type_checks = require('./type-checks.cjs');
|
|
11
|
-
const require_codegen = require('./codegen.cjs');
|
|
12
|
-
let defu = require("defu");
|
|
13
|
-
defu = require_runtime.__toESM(defu, 1);
|
|
14
|
-
let _stryke_type_checks = require("@stryke/type-checks");
|
|
15
|
-
let _powerlines_deepkit_vendor_type = require("@powerlines/deepkit/vendor/type");
|
|
16
|
-
|
|
17
|
-
//#region src/reflection.ts
|
|
18
|
-
/**
|
|
19
|
-
* Maps a Deepkit numeric `brand` to JSON Schema `type` and `format`.
|
|
20
|
-
*
|
|
21
|
-
* @remarks
|
|
22
|
-
* This function takes a `TypeNumberBrand` (which represents specific numeric types in Deepkit, such as `integer`, `float`, `int8`, etc.) and returns a corresponding JSON Schema fragment that includes the appropriate `type`, `format`, and any relevant keywords (like `multipleOf` for integers). If the brand is not recognized, it defaults to a generic JSON Schema for numbers.
|
|
23
|
-
*
|
|
24
|
-
* @param brand - The Deepkit numeric brand to convert.
|
|
25
|
-
* @return A JSON Schema fragment representing the numeric type corresponding to the provided brand.
|
|
26
|
-
*/
|
|
27
|
-
function numberBrandToJsonSchema(brand) {
|
|
28
|
-
switch (brand) {
|
|
29
|
-
case _powerlines_deepkit_vendor_type.TypeNumberBrand.integer: return {
|
|
30
|
-
type: "integer",
|
|
31
|
-
format: "int32",
|
|
32
|
-
multipleOf: 1
|
|
33
|
-
};
|
|
34
|
-
case _powerlines_deepkit_vendor_type.TypeNumberBrand.int8: return {
|
|
35
|
-
type: "integer",
|
|
36
|
-
format: "int8",
|
|
37
|
-
multipleOf: 1
|
|
38
|
-
};
|
|
39
|
-
case _powerlines_deepkit_vendor_type.TypeNumberBrand.uint8: return {
|
|
40
|
-
type: "integer",
|
|
41
|
-
format: "uint8",
|
|
42
|
-
multipleOf: 1
|
|
43
|
-
};
|
|
44
|
-
case _powerlines_deepkit_vendor_type.TypeNumberBrand.int16: return {
|
|
45
|
-
type: "integer",
|
|
46
|
-
format: "int16",
|
|
47
|
-
multipleOf: 1
|
|
48
|
-
};
|
|
49
|
-
case _powerlines_deepkit_vendor_type.TypeNumberBrand.uint16: return {
|
|
50
|
-
type: "integer",
|
|
51
|
-
format: "uint16",
|
|
52
|
-
multipleOf: 1
|
|
53
|
-
};
|
|
54
|
-
case _powerlines_deepkit_vendor_type.TypeNumberBrand.int32: return {
|
|
55
|
-
type: "integer",
|
|
56
|
-
format: "int32",
|
|
57
|
-
multipleOf: 1
|
|
58
|
-
};
|
|
59
|
-
case _powerlines_deepkit_vendor_type.TypeNumberBrand.uint32: return {
|
|
60
|
-
type: "integer",
|
|
61
|
-
format: "uint32",
|
|
62
|
-
multipleOf: 1
|
|
63
|
-
};
|
|
64
|
-
case _powerlines_deepkit_vendor_type.TypeNumberBrand.float:
|
|
65
|
-
case _powerlines_deepkit_vendor_type.TypeNumberBrand.float32: return {
|
|
66
|
-
type: "number",
|
|
67
|
-
format: "float"
|
|
68
|
-
};
|
|
69
|
-
case _powerlines_deepkit_vendor_type.TypeNumberBrand.float64: return {
|
|
70
|
-
type: "number",
|
|
71
|
-
format: "double"
|
|
72
|
-
};
|
|
73
|
-
case void 0:
|
|
74
|
-
default: return { type: "number" };
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
function withReflectionTags(reflection, schema) {
|
|
78
|
-
if (!(0, _stryke_type_checks.isSetObject)(schema) || !(0, _stryke_type_checks.isSetObject)(reflection?.tags)) return schema;
|
|
79
|
-
const updatedSchema = { ...schema };
|
|
80
|
-
const tags = reflection.tags;
|
|
81
|
-
if ((0, _stryke_type_checks.isSetString)(tags.title)) updatedSchema.title = tags.title;
|
|
82
|
-
if ((0, _stryke_type_checks.isSetArray)(tags.alias)) updatedSchema.alias = tags.alias;
|
|
83
|
-
if (!(0, _stryke_type_checks.isUndefined)(tags.hidden)) updatedSchema.hidden = tags.hidden;
|
|
84
|
-
if (!(0, _stryke_type_checks.isUndefined)(tags.ignore)) updatedSchema.ignore = tags.ignore;
|
|
85
|
-
if (!(0, _stryke_type_checks.isUndefined)(tags.internal)) updatedSchema.internal = tags.internal;
|
|
86
|
-
if (!(0, _stryke_type_checks.isUndefined)(tags.runtime)) updatedSchema.runtime = tags.runtime;
|
|
87
|
-
if (!(0, _stryke_type_checks.isUndefined)(tags.readonly)) updatedSchema.readOnly = tags.readonly;
|
|
88
|
-
return updatedSchema;
|
|
89
|
-
}
|
|
90
|
-
function withNullable(schema) {
|
|
91
|
-
if (!(0, _stryke_type_checks.isSetObject)(schema)) return { anyOf: [schema, {
|
|
92
|
-
type: "null",
|
|
93
|
-
default: null
|
|
94
|
-
}] };
|
|
95
|
-
const rawType = schema.type;
|
|
96
|
-
const types = Array.isArray(rawType) ? [...rawType] : rawType ? [rawType] : [];
|
|
97
|
-
if (!types.includes("null")) types.push("null");
|
|
98
|
-
return {
|
|
99
|
-
...schema,
|
|
100
|
-
type: types.length === 1 ? types[0] : types
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Converts a Deepkit type reflection into a JSON Schema (draft-07) fragment.
|
|
105
|
-
*/
|
|
106
|
-
function reflectionToJsonSchema(reflection) {
|
|
107
|
-
return reflectionToJsonSchemaInner(reflection);
|
|
108
|
-
}
|
|
109
|
-
function reflectionToJsonSchemaInner(reflection) {
|
|
110
|
-
switch (reflection.kind) {
|
|
111
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.any:
|
|
112
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.unknown:
|
|
113
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.void:
|
|
114
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.object: return withReflectionTags(reflection, { name: reflection.typeName });
|
|
115
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.never: return;
|
|
116
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.undefined:
|
|
117
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.null: return withReflectionTags(reflection, {
|
|
118
|
-
type: "null",
|
|
119
|
-
name: reflection.typeName,
|
|
120
|
-
default: null
|
|
121
|
-
});
|
|
122
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.string: return withReflectionTags(reflection, {
|
|
123
|
-
type: "string",
|
|
124
|
-
name: reflection.typeName
|
|
125
|
-
});
|
|
126
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.boolean: return withReflectionTags(reflection, {
|
|
127
|
-
type: "boolean",
|
|
128
|
-
name: reflection.typeName
|
|
129
|
-
});
|
|
130
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.number: return withReflectionTags(reflection, numberBrandToJsonSchema(reflection.brand));
|
|
131
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.bigint: return withReflectionTags(reflection, {
|
|
132
|
-
type: "integer",
|
|
133
|
-
name: reflection.typeName,
|
|
134
|
-
format: "int64"
|
|
135
|
-
});
|
|
136
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.regexp: return withReflectionTags(reflection, {
|
|
137
|
-
type: "string",
|
|
138
|
-
name: reflection.typeName,
|
|
139
|
-
format: "regex",
|
|
140
|
-
contentMediaType: "text/regex"
|
|
141
|
-
});
|
|
142
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.literal: {
|
|
143
|
-
const { literal } = reflection;
|
|
144
|
-
if ((0, _stryke_type_checks.isBigInt)(literal)) return withReflectionTags(reflection, {
|
|
145
|
-
type: "integer",
|
|
146
|
-
name: reflection.typeName,
|
|
147
|
-
format: "int64",
|
|
148
|
-
const: literal
|
|
149
|
-
});
|
|
150
|
-
if ((0, _stryke_type_checks.isRegExp)(literal)) return withReflectionTags(reflection, {
|
|
151
|
-
type: "string",
|
|
152
|
-
name: reflection.typeName,
|
|
153
|
-
format: "regex",
|
|
154
|
-
const: literal.source
|
|
155
|
-
});
|
|
156
|
-
return withReflectionTags(reflection, {
|
|
157
|
-
type: require_codegen.getJsonSchemaType(literal),
|
|
158
|
-
name: reflection.typeName,
|
|
159
|
-
const: literal
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.templateLiteral: return withReflectionTags(reflection, { type: "string" });
|
|
163
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.enum: {
|
|
164
|
-
const values = reflection.values.filter((value) => (0, _stryke_type_checks.isString)(value) || (0, _stryke_type_checks.isInteger)(value) || (0, _stryke_type_checks.isBigInt)(value) || (0, _stryke_type_checks.isNumber)(value) || (0, _stryke_type_checks.isBoolean)(value) || (0, _stryke_type_checks.isNull)(value));
|
|
165
|
-
if (values.length === 0) return withReflectionTags(reflection, {
|
|
166
|
-
name: reflection.typeName,
|
|
167
|
-
description: reflection.description,
|
|
168
|
-
enum: []
|
|
169
|
-
});
|
|
170
|
-
return withReflectionTags(reflection, {
|
|
171
|
-
type: values.every((value) => (0, _stryke_type_checks.isString)(value)) ? "string" : values.every((value) => (0, _stryke_type_checks.isInteger)(value) || (0, _stryke_type_checks.isBigInt)(value)) ? "integer" : values.every((value) => (0, _stryke_type_checks.isNumber)(value)) ? "number" : values.every((value) => (0, _stryke_type_checks.isBoolean)(value)) ? "boolean" : values.every((value) => (0, _stryke_type_checks.isNull)(value)) ? "null" : values.reduce((ret, value) => {
|
|
172
|
-
const type = require_codegen.getJsonSchemaType(value);
|
|
173
|
-
if (require_type_checks.isJsonSchemaPrimitiveType(type) && !ret.includes(type)) ret.push(type);
|
|
174
|
-
return ret;
|
|
175
|
-
}, []),
|
|
176
|
-
name: reflection.typeName,
|
|
177
|
-
description: reflection.description,
|
|
178
|
-
enum: values,
|
|
179
|
-
default: values.length === 1 ? values[0] : void 0
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.array: {
|
|
183
|
-
const items = reflectionToJsonSchemaInner(reflection.type);
|
|
184
|
-
return withReflectionTags(reflection, {
|
|
185
|
-
type: "array",
|
|
186
|
-
name: reflection.typeName,
|
|
187
|
-
items: items ?? {}
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.tuple: {
|
|
191
|
-
const items = reflection.types.map((member) => reflectionToJsonSchemaInner(member.type)).filter((item) => item !== void 0);
|
|
192
|
-
if (items.length <= 1) return withReflectionTags(reflection, {
|
|
193
|
-
type: "array",
|
|
194
|
-
name: reflection.typeName,
|
|
195
|
-
items: items.length === 1 ? items[0] : {}
|
|
196
|
-
});
|
|
197
|
-
return withReflectionTags(reflection, {
|
|
198
|
-
type: "array",
|
|
199
|
-
name: reflection.typeName,
|
|
200
|
-
prefixItems: items,
|
|
201
|
-
minItems: items.length,
|
|
202
|
-
maxItems: items.length
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.union: {
|
|
206
|
-
const branches = reflection.types.map((inner) => reflectionToJsonSchemaInner(inner)).filter((branch) => branch !== void 0);
|
|
207
|
-
if (!reflection.types.some((inner) => inner.kind === _powerlines_deepkit_vendor_type.ReflectionKind.null || inner.kind === _powerlines_deepkit_vendor_type.ReflectionKind.undefined)) return withReflectionTags(reflection, {
|
|
208
|
-
name: reflection.typeName,
|
|
209
|
-
anyOf: branches
|
|
210
|
-
});
|
|
211
|
-
const nonNull = branches.filter((branch) => !require_type_checks.isNullOnlyJsonSchema(branch));
|
|
212
|
-
if (nonNull.length === 0) return withReflectionTags(reflection, {
|
|
213
|
-
type: "null",
|
|
214
|
-
default: null
|
|
215
|
-
});
|
|
216
|
-
if (nonNull.length === 1) {
|
|
217
|
-
const first = nonNull[0];
|
|
218
|
-
if (!(0, _stryke_type_checks.isSetObject)(first)) return withNullable(withReflectionTags(reflection, {
|
|
219
|
-
name: reflection.typeName,
|
|
220
|
-
anyOf: [first]
|
|
221
|
-
}));
|
|
222
|
-
return withNullable(withReflectionTags(reflection, {
|
|
223
|
-
name: reflection.typeName,
|
|
224
|
-
...first
|
|
225
|
-
}));
|
|
226
|
-
}
|
|
227
|
-
const enumValues = nonNull.map((branch) => (0, _stryke_type_checks.isSetObject)(branch) ? branch.const : void 0).filter((value) => value === null || typeof value === "string" || typeof value === "number" || typeof value === "bigint" || typeof value === "boolean");
|
|
228
|
-
if (enumValues.length === nonNull.length) return withNullable(withReflectionTags(reflection, {
|
|
229
|
-
name: reflection.typeName,
|
|
230
|
-
enum: enumValues
|
|
231
|
-
}));
|
|
232
|
-
const discriminator = tryReflectionDiscriminator(reflection.types);
|
|
233
|
-
if (discriminator && (0, _stryke_type_checks.isSetObject)(discriminator)) return withNullable(withReflectionTags(reflection, {
|
|
234
|
-
name: reflection.typeName,
|
|
235
|
-
...discriminator
|
|
236
|
-
}));
|
|
237
|
-
return withNullable(withReflectionTags(reflection, {
|
|
238
|
-
name: reflection.typeName,
|
|
239
|
-
anyOf: nonNull
|
|
240
|
-
}));
|
|
241
|
-
}
|
|
242
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.intersection: {
|
|
243
|
-
const members = reflection.types.map((inner) => reflectionToJsonSchemaInner(inner)).filter((item) => item !== void 0);
|
|
244
|
-
if (members.length === 0) return;
|
|
245
|
-
if (members.length === 1) {
|
|
246
|
-
if (!(0, _stryke_type_checks.isSetObject)(members[0])) return members[0];
|
|
247
|
-
return withReflectionTags(reflection, {
|
|
248
|
-
name: reflection.typeName,
|
|
249
|
-
...members[0]
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
if (members.every(require_type_checks.isJsonSchemaObject)) return withReflectionTags(reflection, {
|
|
253
|
-
name: reflection.typeName,
|
|
254
|
-
...mergeObjectSchemas(members)
|
|
255
|
-
});
|
|
256
|
-
return withReflectionTags(reflection, {
|
|
257
|
-
name: reflection.typeName,
|
|
258
|
-
allOf: members
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.promise: return reflectionToJsonSchemaInner(reflection.type);
|
|
262
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.objectLiteral: return objectReflectionToJsonSchema(reflection);
|
|
263
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.class: switch (reflection.classType?.name) {
|
|
264
|
-
case "Date": return withReflectionTags(reflection, {
|
|
265
|
-
type: "string",
|
|
266
|
-
format: "date-time"
|
|
267
|
-
});
|
|
268
|
-
case "RegExp": return withReflectionTags(reflection, {
|
|
269
|
-
type: "string",
|
|
270
|
-
format: "regex"
|
|
271
|
-
});
|
|
272
|
-
case "URL": return withReflectionTags(reflection, {
|
|
273
|
-
type: "string",
|
|
274
|
-
format: "uri"
|
|
275
|
-
});
|
|
276
|
-
case "Set": {
|
|
277
|
-
const itemType = reflection.arguments?.[0];
|
|
278
|
-
return withReflectionTags(reflection, {
|
|
279
|
-
type: "array",
|
|
280
|
-
items: (itemType ? reflectionToJsonSchemaInner(itemType) : void 0) ?? {},
|
|
281
|
-
uniqueItems: true
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
case "Map": {
|
|
285
|
-
const valueType = reflection.arguments?.[1];
|
|
286
|
-
return withReflectionTags(reflection, {
|
|
287
|
-
type: "object",
|
|
288
|
-
additionalProperties: (valueType ? reflectionToJsonSchemaInner(valueType) : void 0) ?? true
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
case "Uint8Array":
|
|
292
|
-
case "Uint8ClampedArray":
|
|
293
|
-
case "Uint16Array":
|
|
294
|
-
case "Uint32Array":
|
|
295
|
-
case "Int8Array":
|
|
296
|
-
case "Int16Array":
|
|
297
|
-
case "Int32Array":
|
|
298
|
-
case "Float32Array":
|
|
299
|
-
case "Float64Array":
|
|
300
|
-
case "BigInt64Array":
|
|
301
|
-
case "BigUint64Array": return withReflectionTags(reflection, {
|
|
302
|
-
type: "string",
|
|
303
|
-
format: "byte",
|
|
304
|
-
contentEncoding: "base64"
|
|
305
|
-
});
|
|
306
|
-
case void 0:
|
|
307
|
-
default: return withReflectionTags(reflection, {
|
|
308
|
-
name: reflection.typeName,
|
|
309
|
-
description: reflection.description,
|
|
310
|
-
...objectReflectionToJsonSchema(reflection)
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.symbol:
|
|
314
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.property:
|
|
315
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.method:
|
|
316
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.function:
|
|
317
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.parameter:
|
|
318
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.typeParameter:
|
|
319
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.tupleMember:
|
|
320
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.enumMember:
|
|
321
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.rest:
|
|
322
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.indexSignature:
|
|
323
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.propertySignature:
|
|
324
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.methodSignature:
|
|
325
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.infer:
|
|
326
|
-
case _powerlines_deepkit_vendor_type.ReflectionKind.callSignature:
|
|
327
|
-
default: return;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
function mergeObjectSchemas(schemas) {
|
|
331
|
-
const merged = {
|
|
332
|
-
type: "object",
|
|
333
|
-
properties: {},
|
|
334
|
-
required: []
|
|
335
|
-
};
|
|
336
|
-
for (const schema of schemas) {
|
|
337
|
-
if (schema.properties) merged.properties = (0, defu.default)(merged.properties, schema.properties);
|
|
338
|
-
if (schema.required) merged.required = Array.from(new Set([...merged.required ?? [], ...schema.required]));
|
|
339
|
-
if (schema.additionalProperties !== void 0) merged.additionalProperties = schema.additionalProperties;
|
|
340
|
-
}
|
|
341
|
-
if ((merged.required?.length ?? 0) === 0) delete merged.required;
|
|
342
|
-
return merged;
|
|
343
|
-
}
|
|
344
|
-
function tryReflectionDiscriminator(types) {
|
|
345
|
-
const nonNullTypes = types.filter((t) => t.kind !== _powerlines_deepkit_vendor_type.ReflectionKind.null && t.kind !== _powerlines_deepkit_vendor_type.ReflectionKind.undefined);
|
|
346
|
-
const objectBranches = nonNullTypes.filter((t) => t.kind === _powerlines_deepkit_vendor_type.ReflectionKind.objectLiteral || t.kind === _powerlines_deepkit_vendor_type.ReflectionKind.class);
|
|
347
|
-
if (objectBranches.length < 2 || objectBranches.length !== nonNullTypes.length) return;
|
|
348
|
-
let tagKey;
|
|
349
|
-
const branches = [];
|
|
350
|
-
for (const branch of objectBranches) {
|
|
351
|
-
const literalProps = [];
|
|
352
|
-
for (const member of branch.types) if ((member.kind === _powerlines_deepkit_vendor_type.ReflectionKind.property || member.kind === _powerlines_deepkit_vendor_type.ReflectionKind.propertySignature) && typeof member.name === "string" && member.type.kind === _powerlines_deepkit_vendor_type.ReflectionKind.literal && typeof member.type.literal === "string") literalProps.push({
|
|
353
|
-
name: member.name,
|
|
354
|
-
literal: member.type.literal
|
|
355
|
-
});
|
|
356
|
-
if (literalProps.length === 0) return;
|
|
357
|
-
const first = literalProps[0];
|
|
358
|
-
if (!tagKey) tagKey = first.name;
|
|
359
|
-
else if (tagKey !== first.name) return;
|
|
360
|
-
const body = objectReflectionToJsonSchema({
|
|
361
|
-
...branch,
|
|
362
|
-
types: branch.types.filter((member) => !((member.kind === _powerlines_deepkit_vendor_type.ReflectionKind.property || member.kind === _powerlines_deepkit_vendor_type.ReflectionKind.propertySignature) && member.name === tagKey))
|
|
363
|
-
});
|
|
364
|
-
if (!body || !require_type_checks.isJsonSchemaObject(body)) return;
|
|
365
|
-
branches.push({
|
|
366
|
-
type: "object",
|
|
367
|
-
properties: {
|
|
368
|
-
[tagKey]: { const: first.literal },
|
|
369
|
-
...body.properties ?? {}
|
|
370
|
-
},
|
|
371
|
-
required: [tagKey, ...body.required ?? []],
|
|
372
|
-
additionalProperties: body.additionalProperties ?? false
|
|
373
|
-
});
|
|
374
|
-
}
|
|
375
|
-
if (!tagKey) return;
|
|
376
|
-
return {
|
|
377
|
-
oneOf: branches,
|
|
378
|
-
discriminator: { propertyName: tagKey }
|
|
379
|
-
};
|
|
380
|
-
}
|
|
381
|
-
function objectReflectionToJsonSchema(type) {
|
|
382
|
-
const reflection = _powerlines_deepkit_vendor_type.ReflectionClass.from(type);
|
|
383
|
-
const schema = {
|
|
384
|
-
type: "object",
|
|
385
|
-
name: reflection.getName(),
|
|
386
|
-
description: reflection.getDescription(),
|
|
387
|
-
properties: {},
|
|
388
|
-
required: [],
|
|
389
|
-
readOnly: reflection.isReadonly(),
|
|
390
|
-
ignore: reflection.isIgnored(),
|
|
391
|
-
internal: reflection.isInternal(),
|
|
392
|
-
runtime: reflection.isRuntime(),
|
|
393
|
-
hidden: reflection.isHidden(),
|
|
394
|
-
primaryKey: reflection.getPrimaries().map((primary) => primary.getNameAsString()),
|
|
395
|
-
...(0, _stryke_type_checks.isSetString)(reflection.databaseSchemaName) ? { databaseSchemaName: reflection.databaseSchemaName } : {},
|
|
396
|
-
...(0, _stryke_type_checks.isSetString)(reflection.getName()) ? { name: reflection.getName() } : {},
|
|
397
|
-
...(0, _stryke_type_checks.isSetString)(reflection.getDescription()) ? { description: reflection.getDescription() } : {},
|
|
398
|
-
...(0, _stryke_type_checks.isSetArray)(reflection.getAlias()) ? { alias: reflection.getAlias() } : {},
|
|
399
|
-
...(0, _stryke_type_checks.isSetString)(reflection.getTitle()) ? { title: reflection.getTitle() } : {}
|
|
400
|
-
};
|
|
401
|
-
for (const propertyReflection of reflection.getProperties()) {
|
|
402
|
-
if (propertyReflection.getKind() === _powerlines_deepkit_vendor_type.ReflectionKind.indexSignature) {
|
|
403
|
-
schema.additionalProperties = reflectionToJsonSchemaInner(propertyReflection.type) ?? true;
|
|
404
|
-
continue;
|
|
405
|
-
}
|
|
406
|
-
let property = reflectionToJsonSchemaInner(propertyReflection.type);
|
|
407
|
-
if (!property) continue;
|
|
408
|
-
property = {
|
|
409
|
-
...(0, _stryke_type_checks.isSetObject)(property) ? property : {},
|
|
410
|
-
name: propertyReflection.getNameAsString(),
|
|
411
|
-
description: propertyReflection.getDescription(),
|
|
412
|
-
readOnly: propertyReflection.isReadonly(),
|
|
413
|
-
ignore: propertyReflection.isIgnored(),
|
|
414
|
-
internal: propertyReflection.isInternal(),
|
|
415
|
-
runtime: propertyReflection.isRuntime(),
|
|
416
|
-
hidden: propertyReflection.isHidden(),
|
|
417
|
-
...propertyReflection.hasDefault() ? { default: propertyReflection.getDefaultValue() } : {},
|
|
418
|
-
...(0, _stryke_type_checks.isSetArray)(propertyReflection.getGroups()) ? { tags: propertyReflection.getGroups() } : {},
|
|
419
|
-
...(0, _stryke_type_checks.isSetArray)(propertyReflection.getAlias()) ? { alias: propertyReflection.getAlias() } : {},
|
|
420
|
-
...(0, _stryke_type_checks.isSetString)(propertyReflection.getTitle()) ? { title: propertyReflection.getTitle() } : {}
|
|
421
|
-
};
|
|
422
|
-
if (propertyReflection.isNullable()) property = withNullable(property);
|
|
423
|
-
schema.properties ??= {};
|
|
424
|
-
schema.properties[propertyReflection.name] = property;
|
|
425
|
-
if (!propertyReflection.isOptional()) {
|
|
426
|
-
schema.required ??= [];
|
|
427
|
-
schema.required.push(propertyReflection.name);
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
return schema;
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
//#endregion
|
|
434
|
-
exports.reflectionToJsonSchema = reflectionToJsonSchema;
|
package/dist/reflection.d.cts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { JsonSchema } from "./types.cjs";
|
|
2
|
-
import { Type } from "@powerlines/deepkit/vendor/type";
|
|
3
|
-
|
|
4
|
-
//#region src/reflection.d.ts
|
|
5
|
-
/**
|
|
6
|
-
* Converts a Deepkit type reflection into a JSON Schema (draft-07) fragment.
|
|
7
|
-
*/
|
|
8
|
-
declare function reflectionToJsonSchema(reflection: Type): JsonSchema | undefined;
|
|
9
|
-
//#endregion
|
|
10
|
-
export { reflectionToJsonSchema };
|
|
11
|
-
//# sourceMappingURL=reflection.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reflection.d.cts","names":[],"sources":["../src/reflection.ts"],"mappings":";;;;;;AAgKA;iBAAgB,sBAAA,CACd,UAAA,EAAY,IAAA,GACX,UAAU"}
|
package/dist/reflection.d.mts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import __tsdown_shims_path from 'node:path';
|
|
2
|
-
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import { JsonSchema } from "./types.mjs";
|
|
4
|
-
import { Type } from "@powerlines/deepkit/vendor/type";
|
|
5
|
-
|
|
6
|
-
//#region src/reflection.d.ts
|
|
7
|
-
/**
|
|
8
|
-
* Converts a Deepkit type reflection into a JSON Schema (draft-07) fragment.
|
|
9
|
-
*/
|
|
10
|
-
declare function reflectionToJsonSchema(reflection: Type): JsonSchema | undefined;
|
|
11
|
-
//#endregion
|
|
12
|
-
export { reflectionToJsonSchema };
|
|
13
|
-
//# sourceMappingURL=reflection.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reflection.d.mts","names":[],"sources":["../src/reflection.ts"],"mappings":";;;;;;;;;iBAgKgB,sBAAA,CACd,UAAA,EAAY,IAAA,GACX,UAAU"}
|