@powerlines/schema 0.11.81 → 0.11.83

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