@voidhash/mimic 1.0.0-beta.16 → 1.0.0-beta.18
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/EffectSchema.cjs +3 -3
- package/dist/EffectSchema.d.cts +5 -5
- package/dist/EffectSchema.d.cts.map +1 -1
- package/dist/EffectSchema.d.mts +5 -5
- package/dist/EffectSchema.d.mts.map +1 -1
- package/dist/EffectSchema.mjs +3 -3
- package/dist/EffectSchema.mjs.map +1 -1
- package/dist/FractionalIndex.mjs.map +1 -1
- package/dist/Operation.d.cts +4 -4
- package/dist/Operation.d.cts.map +1 -1
- package/dist/Operation.d.mts +4 -4
- package/dist/Operation.d.mts.map +1 -1
- package/dist/Operation.mjs.map +1 -1
- package/dist/OperationDefinition.d.cts +2 -2
- package/dist/OperationDefinition.d.cts.map +1 -1
- package/dist/OperationDefinition.d.mts +2 -2
- package/dist/OperationDefinition.d.mts.map +1 -1
- package/dist/OperationDefinition.mjs.map +1 -1
- package/dist/Presence.mjs.map +1 -1
- package/dist/SchemaJSON.cjs +305 -0
- package/dist/SchemaJSON.d.cts +11 -0
- package/dist/SchemaJSON.d.cts.map +1 -0
- package/dist/SchemaJSON.d.mts +11 -0
- package/dist/SchemaJSON.d.mts.map +1 -0
- package/dist/SchemaJSON.mjs +301 -0
- package/dist/SchemaJSON.mjs.map +1 -0
- package/dist/index.cjs +7 -0
- package/dist/index.d.cts +2 -1
- package/dist/index.d.mts +2 -1
- package/dist/index.mjs +2 -1
- package/dist/primitives/Array.cjs +12 -2
- package/dist/primitives/Array.d.cts.map +1 -1
- package/dist/primitives/Array.d.mts.map +1 -1
- package/dist/primitives/Array.mjs +12 -2
- package/dist/primitives/Array.mjs.map +1 -1
- package/dist/primitives/Boolean.mjs.map +1 -1
- package/dist/primitives/Either.mjs.map +1 -1
- package/dist/primitives/Literal.mjs.map +1 -1
- package/dist/primitives/Number.cjs +27 -5
- package/dist/primitives/Number.d.cts.map +1 -1
- package/dist/primitives/Number.d.mts.map +1 -1
- package/dist/primitives/Number.mjs +27 -5
- package/dist/primitives/Number.mjs.map +1 -1
- package/dist/primitives/String.cjs +44 -13
- package/dist/primitives/String.d.cts.map +1 -1
- package/dist/primitives/String.d.mts.map +1 -1
- package/dist/primitives/String.mjs +44 -13
- package/dist/primitives/String.mjs.map +1 -1
- package/dist/primitives/Union.mjs.map +1 -1
- package/dist/primitives/shared.d.cts +2 -0
- package/dist/primitives/shared.d.cts.map +1 -1
- package/dist/primitives/shared.d.mts +2 -0
- package/dist/primitives/shared.d.mts.map +1 -1
- package/dist/primitives/shared.mjs.map +1 -1
- package/package.json +15 -8
- package/src/EffectSchema.ts +3 -3
- package/src/FractionalIndex.ts +18 -18
- package/src/Operation.ts +5 -5
- package/src/OperationDefinition.ts +2 -2
- package/src/Presence.ts +3 -3
- package/src/SchemaJSON.ts +396 -0
- package/src/index.ts +1 -0
- package/src/primitives/Array.ts +18 -8
- package/src/primitives/Boolean.ts +2 -2
- package/src/primitives/Either.ts +2 -2
- package/src/primitives/Literal.ts +2 -2
- package/src/primitives/Number.ts +44 -22
- package/src/primitives/String.ts +61 -34
- package/src/primitives/Union.ts +1 -1
- package/src/primitives/shared.ts +2 -0
- package/.turbo/turbo-build.log +0 -270
- package/tests/Document.test.ts +0 -557
- package/tests/EffectSchema.test.ts +0 -546
- package/tests/FractionalIndex.test.ts +0 -377
- package/tests/OperationPath.test.ts +0 -151
- package/tests/Presence.test.ts +0 -321
- package/tests/Primitive.test.ts +0 -381
- package/tests/client/ClientDocument.test.ts +0 -1981
- package/tests/client/WebSocketTransport.test.ts +0 -1217
- package/tests/primitives/Array.test.ts +0 -526
- package/tests/primitives/Boolean.test.ts +0 -126
- package/tests/primitives/Either.test.ts +0 -707
- package/tests/primitives/Lazy.test.ts +0 -143
- package/tests/primitives/Literal.test.ts +0 -122
- package/tests/primitives/Number.test.ts +0 -133
- package/tests/primitives/String.test.ts +0 -128
- package/tests/primitives/Struct.test.ts +0 -1154
- package/tests/primitives/Tree.test.ts +0 -1139
- package/tests/primitives/TreeNode.test.ts +0 -50
- package/tests/primitives/Union.test.ts +0 -554
- package/tests/server/ServerDocument.test.ts +0 -903
- package/tsconfig.build.json +0 -24
- package/tsconfig.json +0 -8
- package/tsdown.config.ts +0 -18
- package/vitest.mts +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperationDefinition.d.mts","names":[],"sources":["../src/OperationDefinition.ts"],"sourcesContent":[],"mappings":";;;;;;KAEK,aAAa,UAAU,yBAAyB,MAAM,6BAA6B,IAAI,EAAE;UAE7E,4CAA4C,MAAA,CAAO,
|
|
1
|
+
{"version":3,"file":"OperationDefinition.d.mts","names":[],"sources":["../src/OperationDefinition.ts"],"sourcesContent":[],"mappings":";;;;;;KAEK,aAAa,UAAU,yBAAyB,MAAM,6BAA6B,IAAI,EAAE;UAE7E,4CAA4C,MAAA,CAAO,qBAAqB,MAAA,CAAO;iBAC7E;oBACG;mBACD;EALhB,SAAA,YAAO,CAAA,EAAA,OAAA;;AAAgB,cASf,IATe,EAAA,CAAA,KAAA,EAAA,iBASiB,MAAA,CAAO,GATxB,EAAA,gBAS6C,MAAA,CAAO,GATpD,CAAA,CAAA,OAAA,EAAA;EAA+B,SAAA,IAAA,EAUxC,KAVwC;EAAN,SAAA,OAAA,EAW/B,QAX+B;EAAmC,SAAA,MAAA,EAYnE,OAZmE;EAAI,SAAA,KAAA,EAAA,CAAA,OAAA,EAa9D,MAAA,CAAO,MAAA,CAAO,IAbgD,CAa3C,QAb2C,CAAA,EAAA,MAAA,EAaxB,OAbwB,CAahB,MAAA,CAAO,MAAA,CAAO,IAbE,CAaG,OAbH,CAAA,CAAA,EAAA,GAAA,IAAA;EAAE,SAAA,YAAA,CAAA,EAAA,OAAA;CAAC,EAAA,GAAA;EAE9E,SAAA,YAAA,CAAmB,EAAA,OAAA,GAAA,SAAA;EAAyB,SAAO,IAAA,OAAA;EAAqB,SAAO,OAAA,UAAA;EAC7E,SAAA,MAAA,SAAA;EACG,SAAA,KAAA,EAAA,CAAA,OAAA,EASQ,MAAA,CAAO,MAAA,CAAO,IATtB,CAS2B,QAT3B,CAAA,EAAA,MAAA,EAS8C,OAT9C,CASsD,MAAA,CAAO,MAAA,CAAO,IATpE,CASyE,OATzE,CAAA,CAAA,EAAA,GAAA,IAAA;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperationDefinition.mjs","names":[],"sources":["../src/OperationDefinition.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\ntype Mutable<T> = T extends ReadonlyArray<infer U> ? Array<U> : { -readonly [K in keyof T]: T[K] };\n\nexport interface OperationDefinition<TKind, TPayload extends Schema.
|
|
1
|
+
{"version":3,"file":"OperationDefinition.mjs","names":[],"sources":["../src/OperationDefinition.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\ntype Mutable<T> = T extends ReadonlyArray<infer U> ? Array<U> : { -readonly [K in keyof T]: T[K] };\n\nexport interface OperationDefinition<TKind, TPayload extends Schema.Top, TTarget extends Schema.Top> {\n readonly kind: TKind\n readonly payload: TPayload\n readonly target: TTarget\n readonly deduplicable?: boolean\n}\n\nexport const make = <TKind, TPayload extends Schema.Top, TTarget extends Schema.Top>(options: {\n readonly kind: TKind\n readonly payload: TPayload\n readonly target: TTarget\n readonly apply: (payload: Schema.Schema.Type<TPayload>, target: Mutable<Schema.Schema.Type<TTarget>>) => void\n readonly deduplicable?: boolean\n}) => {\n return {\n kind: options.kind,\n payload: options.payload,\n target: options.target,\n apply: options.apply,\n ...(options.deduplicable !== undefined ? { deduplicable: options.deduplicable } : {}),\n } as const;\n}"],"mappings":";;;;;AAWA,MAAa,QAAwE,YAM/E;AACF;EACI,MAAM,QAAQ;EACd,SAAS,QAAQ;EACjB,QAAQ,QAAQ;EAChB,OAAO,QAAQ;IACX,QAAQ,iBAAiB,SAAY,EAAE,cAAc,QAAQ,cAAc,GAAG,EAAE"}
|
package/dist/Presence.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Presence.mjs","names":[],"sources":["../src/Presence.ts"],"sourcesContent":["/**\n * @since 0.0.1\n * Presence module for ephemeral per-connection state.\n * Used by both client and server for schema validation.\n */\nimport * as Schema from \"effect/Schema\";\n\n// =============================================================================\n// Presence Types\n// =============================================================================\n\n/**\n * A Presence schema wrapper that holds an Effect Schema for validation.\n * This is used by both client and server to validate presence data.\n */\nexport interface Presence<TData> {\n readonly _tag: \"Presence\";\n /** The Effect Schema used for validation */\n readonly schema: Schema.Schema<TData>;\n /** Branded type marker for inference */\n readonly _Data: TData;\n}\n\n/**\n * Options for creating a Presence instance.\n */\nexport interface PresenceOptions<TData> {\n /** The Effect Schema defining the presence data structure */\n readonly schema: Schema.Schema<TData>;\n}\n\n/**\n * Infer the data type from a Presence instance.\n */\nexport type Infer<P extends Presence<any>> = P[\"_Data\"];\n\n/**\n * Any Presence type (for generic constraints).\n */\nexport type AnyPresence = Presence<any>;\n\n// =============================================================================\n// Presence Entry (for storage/transport)\n// =============================================================================\n\n/**\n * A presence entry as stored/transmitted.\n */\nexport interface PresenceEntry<TData = unknown> {\n /** The presence data */\n readonly data: TData;\n /** Optional user ID from authentication */\n readonly userId?: string;\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Creates a new Presence schema wrapper.\n *\n * @example\n * ```typescript\n * import { Presence } from \"@voidhash/mimic\";\n * import { Schema } from \"effect\";\n *\n * const CursorPresence = Presence.make({\n * schema: Schema.Struct({\n * name: Schema.String,\n * cursor: Schema.Struct({\n * x: Schema.Number,\n * y: Schema.Number,\n * }),\n * }),\n * });\n * ```\n */\nexport const make = <TData,>(options: PresenceOptions<TData>): Presence<TData> => ({\n _tag: \"Presence\",\n schema: options.schema,\n _Data: undefined as unknown as TData,\n});\n\n// =============================================================================\n// Validation Functions\n// =============================================================================\n\n/**\n * Validates unknown data against a Presence schema.\n * Throws a ParseError if validation fails.\n *\n * @param presence - The Presence instance with the schema\n * @param data - Unknown data to validate\n * @returns The validated and typed data\n * @throws ParseError if validation fails\n */\nexport const validate = <TData,>(\n presence: Presence<TData>,\n data: unknown\n): TData => {\n return Schema.decodeUnknownSync(presence.schema)(data);\n};\n\n/**\n * Safely validates unknown data against a Presence schema.\n * Returns undefined if validation fails instead of throwing.\n *\n * @param presence - The Presence instance with the schema\n * @param data - Unknown data to validate\n * @returns The validated data or undefined if invalid\n */\nexport const validateSafe = <TData,>(\n presence: Presence<TData>,\n data: unknown\n): TData | undefined => {\n try {\n return Schema.decodeUnknownSync(presence.schema)(data);\n } catch {\n return undefined;\n }\n};\n\n/**\n * Checks if unknown data is valid according to a Presence schema.\n *\n * @param presence - The Presence instance with the schema\n * @param data - Unknown data to check\n * @returns true if valid, false otherwise\n */\nexport const isValid = <TData,>(\n presence: Presence<TData>,\n data: unknown\n): data is TData => {\n try {\n Schema.decodeUnknownSync(presence.schema)(data);\n return true;\n } catch {\n return false;\n }\n};\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EA,MAAa,QAAgB,aAAsD;CACjF,MAAM;CACN,QAAQ,QAAQ;CAChB,OAAO;CACR;;;;;;;;;;AAeD,MAAa,YACX,UACA,SACU;AACV,QAAO,OAAO,kBAAkB,SAAS,
|
|
1
|
+
{"version":3,"file":"Presence.mjs","names":[],"sources":["../src/Presence.ts"],"sourcesContent":["/**\n * @since 0.0.1\n * Presence module for ephemeral per-connection state.\n * Used by both client and server for schema validation.\n */\nimport * as Schema from \"effect/Schema\";\n\n// =============================================================================\n// Presence Types\n// =============================================================================\n\n/**\n * A Presence schema wrapper that holds an Effect Schema for validation.\n * This is used by both client and server to validate presence data.\n */\nexport interface Presence<TData> {\n readonly _tag: \"Presence\";\n /** The Effect Schema used for validation */\n readonly schema: Schema.Schema<TData>;\n /** Branded type marker for inference */\n readonly _Data: TData;\n}\n\n/**\n * Options for creating a Presence instance.\n */\nexport interface PresenceOptions<TData> {\n /** The Effect Schema defining the presence data structure */\n readonly schema: Schema.Schema<TData>;\n}\n\n/**\n * Infer the data type from a Presence instance.\n */\nexport type Infer<P extends Presence<any>> = P[\"_Data\"];\n\n/**\n * Any Presence type (for generic constraints).\n */\nexport type AnyPresence = Presence<any>;\n\n// =============================================================================\n// Presence Entry (for storage/transport)\n// =============================================================================\n\n/**\n * A presence entry as stored/transmitted.\n */\nexport interface PresenceEntry<TData = unknown> {\n /** The presence data */\n readonly data: TData;\n /** Optional user ID from authentication */\n readonly userId?: string;\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Creates a new Presence schema wrapper.\n *\n * @example\n * ```typescript\n * import { Presence } from \"@voidhash/mimic\";\n * import { Schema } from \"effect\";\n *\n * const CursorPresence = Presence.make({\n * schema: Schema.Struct({\n * name: Schema.String,\n * cursor: Schema.Struct({\n * x: Schema.Number,\n * y: Schema.Number,\n * }),\n * }),\n * });\n * ```\n */\nexport const make = <TData,>(options: PresenceOptions<TData>): Presence<TData> => ({\n _tag: \"Presence\",\n schema: options.schema,\n _Data: undefined as unknown as TData,\n});\n\n// =============================================================================\n// Validation Functions\n// =============================================================================\n\n/**\n * Validates unknown data against a Presence schema.\n * Throws a ParseError if validation fails.\n *\n * @param presence - The Presence instance with the schema\n * @param data - Unknown data to validate\n * @returns The validated and typed data\n * @throws ParseError if validation fails\n */\nexport const validate = <TData,>(\n presence: Presence<TData>,\n data: unknown\n): TData => {\n return Schema.decodeUnknownSync(presence.schema as any)(data);\n};\n\n/**\n * Safely validates unknown data against a Presence schema.\n * Returns undefined if validation fails instead of throwing.\n *\n * @param presence - The Presence instance with the schema\n * @param data - Unknown data to validate\n * @returns The validated data or undefined if invalid\n */\nexport const validateSafe = <TData,>(\n presence: Presence<TData>,\n data: unknown\n): TData | undefined => {\n try {\n return Schema.decodeUnknownSync(presence.schema as any)(data);\n } catch {\n return undefined;\n }\n};\n\n/**\n * Checks if unknown data is valid according to a Presence schema.\n *\n * @param presence - The Presence instance with the schema\n * @param data - Unknown data to check\n * @returns true if valid, false otherwise\n */\nexport const isValid = <TData,>(\n presence: Presence<TData>,\n data: unknown\n): data is TData => {\n try {\n Schema.decodeUnknownSync(presence.schema as any)(data);\n return true;\n } catch {\n return false;\n }\n};\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EA,MAAa,QAAgB,aAAsD;CACjF,MAAM;CACN,QAAQ,QAAQ;CAChB,OAAO;CACR;;;;;;;;;;AAeD,MAAa,YACX,UACA,SACU;AACV,QAAO,OAAO,kBAAkB,SAAS,OAAc,CAAC,KAAK;;;;;;;;;;AAW/D,MAAa,gBACX,UACA,SACsB;AACtB,KAAI;AACF,SAAO,OAAO,kBAAkB,SAAS,OAAc,CAAC,KAAK;mBACvD;AACN;;;;;;;;;;AAWJ,MAAa,WACX,UACA,SACkB;AAClB,KAAI;AACF,SAAO,kBAAkB,SAAS,OAAc,CAAC,KAAK;AACtD,SAAO;oBACD;AACN,SAAO"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_objectSpread2 = require('./_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.cjs');
|
|
3
|
+
const require_String = require('./primitives/String.cjs');
|
|
4
|
+
const require_Struct = require('./primitives/Struct.cjs');
|
|
5
|
+
const require_Boolean = require('./primitives/Boolean.cjs');
|
|
6
|
+
const require_Number = require('./primitives/Number.cjs');
|
|
7
|
+
const require_Literal = require('./primitives/Literal.cjs');
|
|
8
|
+
const require_Array = require('./primitives/Array.cjs');
|
|
9
|
+
const require_Lazy = require('./primitives/Lazy.cjs');
|
|
10
|
+
const require_Union = require('./primitives/Union.cjs');
|
|
11
|
+
const require_Either = require('./primitives/Either.cjs');
|
|
12
|
+
const require_TreeNode = require('./primitives/TreeNode.cjs');
|
|
13
|
+
const require_Tree = require('./primitives/Tree.cjs');
|
|
14
|
+
require('./Primitive.cjs');
|
|
15
|
+
|
|
16
|
+
//#region src/SchemaJSON.ts
|
|
17
|
+
var SchemaJSON_exports = /* @__PURE__ */ require_rolldown_runtime.__export({
|
|
18
|
+
fromJSON: () => fromJSON,
|
|
19
|
+
toJSON: () => toJSON
|
|
20
|
+
});
|
|
21
|
+
function getSchema(primitive) {
|
|
22
|
+
return primitive._schema;
|
|
23
|
+
}
|
|
24
|
+
function serializeValidators(validators) {
|
|
25
|
+
const serializable = validators.filter((v) => v.kind != null);
|
|
26
|
+
if (serializable.length === 0) return void 0;
|
|
27
|
+
return serializable.map((v) => {
|
|
28
|
+
const json = { kind: v.kind };
|
|
29
|
+
if (v.params !== void 0) return require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, json), {}, { params: v.params });
|
|
30
|
+
return json;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function collectTreeNodes(node, visited) {
|
|
34
|
+
if (visited.has(node.type)) return;
|
|
35
|
+
visited.set(node.type, node);
|
|
36
|
+
for (const child of node.children) collectTreeNodes(child, visited);
|
|
37
|
+
}
|
|
38
|
+
function toJSON(primitive) {
|
|
39
|
+
if (primitive instanceof require_Lazy.LazyPrimitive) return toJSON(primitive._resolve());
|
|
40
|
+
const schema = getSchema(primitive);
|
|
41
|
+
if (primitive instanceof require_String.StringPrimitive) {
|
|
42
|
+
const json = {
|
|
43
|
+
type: "string",
|
|
44
|
+
required: schema.required
|
|
45
|
+
};
|
|
46
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
47
|
+
const validators = serializeValidators(schema.validators);
|
|
48
|
+
if (validators) json.validators = validators;
|
|
49
|
+
return json;
|
|
50
|
+
}
|
|
51
|
+
if (primitive instanceof require_Number.NumberPrimitive) {
|
|
52
|
+
const json = {
|
|
53
|
+
type: "number",
|
|
54
|
+
required: schema.required
|
|
55
|
+
};
|
|
56
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
57
|
+
const validators = serializeValidators(schema.validators);
|
|
58
|
+
if (validators) json.validators = validators;
|
|
59
|
+
return json;
|
|
60
|
+
}
|
|
61
|
+
if (primitive instanceof require_Boolean.BooleanPrimitive) {
|
|
62
|
+
const json = {
|
|
63
|
+
type: "boolean",
|
|
64
|
+
required: schema.required
|
|
65
|
+
};
|
|
66
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
67
|
+
return json;
|
|
68
|
+
}
|
|
69
|
+
if (primitive instanceof require_Literal.LiteralPrimitive) {
|
|
70
|
+
const json = {
|
|
71
|
+
type: "literal",
|
|
72
|
+
value: primitive.literal,
|
|
73
|
+
required: schema.required
|
|
74
|
+
};
|
|
75
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
76
|
+
return json;
|
|
77
|
+
}
|
|
78
|
+
if (primitive instanceof require_Struct.StructPrimitive) {
|
|
79
|
+
const fields = {};
|
|
80
|
+
const structFields = primitive.fields;
|
|
81
|
+
for (const key in structFields) fields[key] = toJSON(structFields[key]);
|
|
82
|
+
const json = {
|
|
83
|
+
type: "struct",
|
|
84
|
+
required: schema.required,
|
|
85
|
+
fields
|
|
86
|
+
};
|
|
87
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
88
|
+
return json;
|
|
89
|
+
}
|
|
90
|
+
if (primitive instanceof require_Array.ArrayPrimitive) {
|
|
91
|
+
const json = {
|
|
92
|
+
type: "array",
|
|
93
|
+
required: schema.required,
|
|
94
|
+
element: toJSON(primitive.element)
|
|
95
|
+
};
|
|
96
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
97
|
+
const validators = serializeValidators(schema.validators);
|
|
98
|
+
if (validators) json.validators = validators;
|
|
99
|
+
return json;
|
|
100
|
+
}
|
|
101
|
+
if (primitive instanceof require_Union.UnionPrimitive) {
|
|
102
|
+
const variants = {};
|
|
103
|
+
const unionVariants = primitive.variants;
|
|
104
|
+
for (const key in unionVariants) variants[key] = toJSON(unionVariants[key]);
|
|
105
|
+
const json = {
|
|
106
|
+
type: "union",
|
|
107
|
+
required: schema.required,
|
|
108
|
+
discriminator: primitive.discriminator,
|
|
109
|
+
variants
|
|
110
|
+
};
|
|
111
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
112
|
+
return json;
|
|
113
|
+
}
|
|
114
|
+
if (primitive instanceof require_Either.EitherPrimitive) {
|
|
115
|
+
const variants = primitive.variants;
|
|
116
|
+
const json = {
|
|
117
|
+
type: "either",
|
|
118
|
+
required: schema.required,
|
|
119
|
+
variants: variants.map((v) => toJSON(v))
|
|
120
|
+
};
|
|
121
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
122
|
+
return json;
|
|
123
|
+
}
|
|
124
|
+
if (primitive instanceof require_Tree.TreePrimitive) {
|
|
125
|
+
const root = primitive.root;
|
|
126
|
+
const nodeMap = /* @__PURE__ */ new Map();
|
|
127
|
+
collectTreeNodes(root, nodeMap);
|
|
128
|
+
const nodes = {};
|
|
129
|
+
for (const [nodeType, node] of nodeMap) nodes[nodeType] = {
|
|
130
|
+
type: "treeNode",
|
|
131
|
+
nodeType,
|
|
132
|
+
data: toJSON(node.data),
|
|
133
|
+
children: node.children.map((c) => c.type)
|
|
134
|
+
};
|
|
135
|
+
const json = {
|
|
136
|
+
type: "tree",
|
|
137
|
+
required: schema.required,
|
|
138
|
+
root: root.type,
|
|
139
|
+
nodes
|
|
140
|
+
};
|
|
141
|
+
if (schema.defaultInput !== void 0) json.default = schema.defaultInput;
|
|
142
|
+
return json;
|
|
143
|
+
}
|
|
144
|
+
throw new Error(`Unknown primitive type: ${primitive._tag}`);
|
|
145
|
+
}
|
|
146
|
+
function applyStringValidators(p, validators) {
|
|
147
|
+
let result = p;
|
|
148
|
+
for (const v of validators) {
|
|
149
|
+
const params = v.params;
|
|
150
|
+
switch (v.kind) {
|
|
151
|
+
case "min":
|
|
152
|
+
result = result.min(params.value);
|
|
153
|
+
break;
|
|
154
|
+
case "max":
|
|
155
|
+
result = result.max(params.value);
|
|
156
|
+
break;
|
|
157
|
+
case "length":
|
|
158
|
+
result = result.length(params.value);
|
|
159
|
+
break;
|
|
160
|
+
case "regex":
|
|
161
|
+
result = result.regex(new RegExp(params.pattern, params.flags));
|
|
162
|
+
break;
|
|
163
|
+
case "email":
|
|
164
|
+
result = result.email();
|
|
165
|
+
break;
|
|
166
|
+
case "url":
|
|
167
|
+
result = result.url();
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
function applyNumberValidators(p, validators) {
|
|
174
|
+
let result = p;
|
|
175
|
+
for (const v of validators) {
|
|
176
|
+
const params = v.params;
|
|
177
|
+
switch (v.kind) {
|
|
178
|
+
case "min":
|
|
179
|
+
result = result.min(params.value);
|
|
180
|
+
break;
|
|
181
|
+
case "max":
|
|
182
|
+
result = result.max(params.value);
|
|
183
|
+
break;
|
|
184
|
+
case "positive":
|
|
185
|
+
result = result.positive();
|
|
186
|
+
break;
|
|
187
|
+
case "negative":
|
|
188
|
+
result = result.negative();
|
|
189
|
+
break;
|
|
190
|
+
case "int":
|
|
191
|
+
result = result.int();
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
function applyArrayValidators(p, validators) {
|
|
198
|
+
let result = p;
|
|
199
|
+
for (const v of validators) {
|
|
200
|
+
const params = v.params;
|
|
201
|
+
switch (v.kind) {
|
|
202
|
+
case "minLength":
|
|
203
|
+
result = result.minLength(params.value);
|
|
204
|
+
break;
|
|
205
|
+
case "maxLength":
|
|
206
|
+
result = result.maxLength(params.value);
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
function fromJSON(json) {
|
|
213
|
+
const obj = json;
|
|
214
|
+
switch (obj.type) {
|
|
215
|
+
case "string": {
|
|
216
|
+
let p = require_String.String();
|
|
217
|
+
if (obj.validators) p = applyStringValidators(p, obj.validators);
|
|
218
|
+
if (obj.required) p = p.required();
|
|
219
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
220
|
+
return p;
|
|
221
|
+
}
|
|
222
|
+
case "number": {
|
|
223
|
+
let p = require_Number.Number();
|
|
224
|
+
if (obj.validators) p = applyNumberValidators(p, obj.validators);
|
|
225
|
+
if (obj.required) p = p.required();
|
|
226
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
227
|
+
return p;
|
|
228
|
+
}
|
|
229
|
+
case "boolean": {
|
|
230
|
+
let p = require_Boolean.Boolean();
|
|
231
|
+
if (obj.required) p = p.required();
|
|
232
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
233
|
+
return p;
|
|
234
|
+
}
|
|
235
|
+
case "literal": {
|
|
236
|
+
let p = require_Literal.Literal(obj.value);
|
|
237
|
+
if (obj.required) p = p.required();
|
|
238
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
239
|
+
return p;
|
|
240
|
+
}
|
|
241
|
+
case "struct": {
|
|
242
|
+
const fields = {};
|
|
243
|
+
for (const key in obj.fields) fields[key] = fromJSON(obj.fields[key]);
|
|
244
|
+
let p = require_Struct.Struct(fields);
|
|
245
|
+
if (obj.required) p = p.required();
|
|
246
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
247
|
+
return p;
|
|
248
|
+
}
|
|
249
|
+
case "array": {
|
|
250
|
+
const element = fromJSON(obj.element);
|
|
251
|
+
let p = require_Array.Array(element);
|
|
252
|
+
if (obj.validators) p = applyArrayValidators(p, obj.validators);
|
|
253
|
+
if (obj.required) p = p.required();
|
|
254
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
255
|
+
return p;
|
|
256
|
+
}
|
|
257
|
+
case "union": {
|
|
258
|
+
const variants = {};
|
|
259
|
+
for (const key in obj.variants) variants[key] = fromJSON(obj.variants[key]);
|
|
260
|
+
let p = require_Union.Union({
|
|
261
|
+
discriminator: obj.discriminator,
|
|
262
|
+
variants
|
|
263
|
+
});
|
|
264
|
+
if (obj.required) p = p.required();
|
|
265
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
266
|
+
return p;
|
|
267
|
+
}
|
|
268
|
+
case "either": {
|
|
269
|
+
const variants = obj.variants.map((v) => fromJSON(v));
|
|
270
|
+
let p = require_Either.Either(...variants);
|
|
271
|
+
if (obj.required) p = p.required();
|
|
272
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
273
|
+
return p;
|
|
274
|
+
}
|
|
275
|
+
case "tree": {
|
|
276
|
+
const treeJSON = obj;
|
|
277
|
+
const nodeMap = /* @__PURE__ */ new Map();
|
|
278
|
+
const nodeJSONMap = /* @__PURE__ */ new Map();
|
|
279
|
+
for (const nodeType in treeJSON.nodes) nodeJSONMap.set(nodeType, treeJSON.nodes[nodeType]);
|
|
280
|
+
for (const [nodeType, nodeJSON] of nodeJSONMap) {
|
|
281
|
+
const data = fromJSON(nodeJSON.data);
|
|
282
|
+
const childTypes = nodeJSON.children;
|
|
283
|
+
const node = require_TreeNode.TreeNode(nodeType, {
|
|
284
|
+
data,
|
|
285
|
+
children: () => childTypes.map((ct) => nodeMap.get(ct))
|
|
286
|
+
});
|
|
287
|
+
nodeMap.set(nodeType, node);
|
|
288
|
+
}
|
|
289
|
+
const root = nodeMap.get(treeJSON.root);
|
|
290
|
+
let p = require_Tree.Tree({ root });
|
|
291
|
+
if (obj.required) p = p.required();
|
|
292
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
293
|
+
return p;
|
|
294
|
+
}
|
|
295
|
+
default: throw new Error(`Unknown JSON schema type: ${obj.type}`);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
//#endregion
|
|
300
|
+
Object.defineProperty(exports, 'SchemaJSON_exports', {
|
|
301
|
+
enumerable: true,
|
|
302
|
+
get: function () {
|
|
303
|
+
return SchemaJSON_exports;
|
|
304
|
+
}
|
|
305
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AnyPrimitive } from "./primitives/shared.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/SchemaJSON.d.ts
|
|
4
|
+
declare namespace SchemaJSON_d_exports {
|
|
5
|
+
export { fromJSON, toJSON };
|
|
6
|
+
}
|
|
7
|
+
declare function toJSON(primitive: AnyPrimitive): unknown;
|
|
8
|
+
declare function fromJSON(json: unknown): AnyPrimitive;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { SchemaJSON_d_exports };
|
|
11
|
+
//# sourceMappingURL=SchemaJSON.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaJSON.d.cts","names":[],"sources":["../src/SchemaJSON.ts"],"sourcesContent":[],"mappings":";;;;;;iBAyHgB,MAAA,YAAkB;iBAsKlB,QAAA,iBAAyB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AnyPrimitive } from "./primitives/shared.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/SchemaJSON.d.ts
|
|
4
|
+
declare namespace SchemaJSON_d_exports {
|
|
5
|
+
export { fromJSON, toJSON };
|
|
6
|
+
}
|
|
7
|
+
declare function toJSON(primitive: AnyPrimitive): unknown;
|
|
8
|
+
declare function fromJSON(json: unknown): AnyPrimitive;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { SchemaJSON_d_exports };
|
|
11
|
+
//# sourceMappingURL=SchemaJSON.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaJSON.d.mts","names":[],"sources":["../src/SchemaJSON.ts"],"sourcesContent":[],"mappings":";;;;;;iBAyHgB,MAAA,YAAkB;iBAsKlB,QAAA,iBAAyB"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { __export } from "./_virtual/rolldown_runtime.mjs";
|
|
2
|
+
import { _objectSpread2 } from "./_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.mjs";
|
|
3
|
+
import { String, StringPrimitive } from "./primitives/String.mjs";
|
|
4
|
+
import { Struct, StructPrimitive } from "./primitives/Struct.mjs";
|
|
5
|
+
import { Boolean, BooleanPrimitive } from "./primitives/Boolean.mjs";
|
|
6
|
+
import { Number, NumberPrimitive } from "./primitives/Number.mjs";
|
|
7
|
+
import { Literal, LiteralPrimitive } from "./primitives/Literal.mjs";
|
|
8
|
+
import { Array, ArrayPrimitive } from "./primitives/Array.mjs";
|
|
9
|
+
import { LazyPrimitive } from "./primitives/Lazy.mjs";
|
|
10
|
+
import { Union, UnionPrimitive } from "./primitives/Union.mjs";
|
|
11
|
+
import { Either, EitherPrimitive } from "./primitives/Either.mjs";
|
|
12
|
+
import { TreeNode } from "./primitives/TreeNode.mjs";
|
|
13
|
+
import { Tree, TreePrimitive } from "./primitives/Tree.mjs";
|
|
14
|
+
import "./Primitive.mjs";
|
|
15
|
+
|
|
16
|
+
//#region src/SchemaJSON.ts
|
|
17
|
+
var SchemaJSON_exports = /* @__PURE__ */ __export({
|
|
18
|
+
fromJSON: () => fromJSON,
|
|
19
|
+
toJSON: () => toJSON
|
|
20
|
+
});
|
|
21
|
+
function getSchema(primitive) {
|
|
22
|
+
return primitive._schema;
|
|
23
|
+
}
|
|
24
|
+
function serializeValidators(validators) {
|
|
25
|
+
const serializable = validators.filter((v) => v.kind != null);
|
|
26
|
+
if (serializable.length === 0) return void 0;
|
|
27
|
+
return serializable.map((v) => {
|
|
28
|
+
const json = { kind: v.kind };
|
|
29
|
+
if (v.params !== void 0) return _objectSpread2(_objectSpread2({}, json), {}, { params: v.params });
|
|
30
|
+
return json;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function collectTreeNodes(node, visited) {
|
|
34
|
+
if (visited.has(node.type)) return;
|
|
35
|
+
visited.set(node.type, node);
|
|
36
|
+
for (const child of node.children) collectTreeNodes(child, visited);
|
|
37
|
+
}
|
|
38
|
+
function toJSON(primitive) {
|
|
39
|
+
if (primitive instanceof LazyPrimitive) return toJSON(primitive._resolve());
|
|
40
|
+
const schema = getSchema(primitive);
|
|
41
|
+
if (primitive instanceof StringPrimitive) {
|
|
42
|
+
const json = {
|
|
43
|
+
type: "string",
|
|
44
|
+
required: schema.required
|
|
45
|
+
};
|
|
46
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
47
|
+
const validators = serializeValidators(schema.validators);
|
|
48
|
+
if (validators) json.validators = validators;
|
|
49
|
+
return json;
|
|
50
|
+
}
|
|
51
|
+
if (primitive instanceof NumberPrimitive) {
|
|
52
|
+
const json = {
|
|
53
|
+
type: "number",
|
|
54
|
+
required: schema.required
|
|
55
|
+
};
|
|
56
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
57
|
+
const validators = serializeValidators(schema.validators);
|
|
58
|
+
if (validators) json.validators = validators;
|
|
59
|
+
return json;
|
|
60
|
+
}
|
|
61
|
+
if (primitive instanceof BooleanPrimitive) {
|
|
62
|
+
const json = {
|
|
63
|
+
type: "boolean",
|
|
64
|
+
required: schema.required
|
|
65
|
+
};
|
|
66
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
67
|
+
return json;
|
|
68
|
+
}
|
|
69
|
+
if (primitive instanceof LiteralPrimitive) {
|
|
70
|
+
const json = {
|
|
71
|
+
type: "literal",
|
|
72
|
+
value: primitive.literal,
|
|
73
|
+
required: schema.required
|
|
74
|
+
};
|
|
75
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
76
|
+
return json;
|
|
77
|
+
}
|
|
78
|
+
if (primitive instanceof StructPrimitive) {
|
|
79
|
+
const fields = {};
|
|
80
|
+
const structFields = primitive.fields;
|
|
81
|
+
for (const key in structFields) fields[key] = toJSON(structFields[key]);
|
|
82
|
+
const json = {
|
|
83
|
+
type: "struct",
|
|
84
|
+
required: schema.required,
|
|
85
|
+
fields
|
|
86
|
+
};
|
|
87
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
88
|
+
return json;
|
|
89
|
+
}
|
|
90
|
+
if (primitive instanceof ArrayPrimitive) {
|
|
91
|
+
const json = {
|
|
92
|
+
type: "array",
|
|
93
|
+
required: schema.required,
|
|
94
|
+
element: toJSON(primitive.element)
|
|
95
|
+
};
|
|
96
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
97
|
+
const validators = serializeValidators(schema.validators);
|
|
98
|
+
if (validators) json.validators = validators;
|
|
99
|
+
return json;
|
|
100
|
+
}
|
|
101
|
+
if (primitive instanceof UnionPrimitive) {
|
|
102
|
+
const variants = {};
|
|
103
|
+
const unionVariants = primitive.variants;
|
|
104
|
+
for (const key in unionVariants) variants[key] = toJSON(unionVariants[key]);
|
|
105
|
+
const json = {
|
|
106
|
+
type: "union",
|
|
107
|
+
required: schema.required,
|
|
108
|
+
discriminator: primitive.discriminator,
|
|
109
|
+
variants
|
|
110
|
+
};
|
|
111
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
112
|
+
return json;
|
|
113
|
+
}
|
|
114
|
+
if (primitive instanceof EitherPrimitive) {
|
|
115
|
+
const variants = primitive.variants;
|
|
116
|
+
const json = {
|
|
117
|
+
type: "either",
|
|
118
|
+
required: schema.required,
|
|
119
|
+
variants: variants.map((v) => toJSON(v))
|
|
120
|
+
};
|
|
121
|
+
if (schema.defaultValue !== void 0) json.default = schema.defaultValue;
|
|
122
|
+
return json;
|
|
123
|
+
}
|
|
124
|
+
if (primitive instanceof TreePrimitive) {
|
|
125
|
+
const root = primitive.root;
|
|
126
|
+
const nodeMap = /* @__PURE__ */ new Map();
|
|
127
|
+
collectTreeNodes(root, nodeMap);
|
|
128
|
+
const nodes = {};
|
|
129
|
+
for (const [nodeType, node] of nodeMap) nodes[nodeType] = {
|
|
130
|
+
type: "treeNode",
|
|
131
|
+
nodeType,
|
|
132
|
+
data: toJSON(node.data),
|
|
133
|
+
children: node.children.map((c) => c.type)
|
|
134
|
+
};
|
|
135
|
+
const json = {
|
|
136
|
+
type: "tree",
|
|
137
|
+
required: schema.required,
|
|
138
|
+
root: root.type,
|
|
139
|
+
nodes
|
|
140
|
+
};
|
|
141
|
+
if (schema.defaultInput !== void 0) json.default = schema.defaultInput;
|
|
142
|
+
return json;
|
|
143
|
+
}
|
|
144
|
+
throw new Error(`Unknown primitive type: ${primitive._tag}`);
|
|
145
|
+
}
|
|
146
|
+
function applyStringValidators(p, validators) {
|
|
147
|
+
let result = p;
|
|
148
|
+
for (const v of validators) {
|
|
149
|
+
const params = v.params;
|
|
150
|
+
switch (v.kind) {
|
|
151
|
+
case "min":
|
|
152
|
+
result = result.min(params.value);
|
|
153
|
+
break;
|
|
154
|
+
case "max":
|
|
155
|
+
result = result.max(params.value);
|
|
156
|
+
break;
|
|
157
|
+
case "length":
|
|
158
|
+
result = result.length(params.value);
|
|
159
|
+
break;
|
|
160
|
+
case "regex":
|
|
161
|
+
result = result.regex(new RegExp(params.pattern, params.flags));
|
|
162
|
+
break;
|
|
163
|
+
case "email":
|
|
164
|
+
result = result.email();
|
|
165
|
+
break;
|
|
166
|
+
case "url":
|
|
167
|
+
result = result.url();
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
function applyNumberValidators(p, validators) {
|
|
174
|
+
let result = p;
|
|
175
|
+
for (const v of validators) {
|
|
176
|
+
const params = v.params;
|
|
177
|
+
switch (v.kind) {
|
|
178
|
+
case "min":
|
|
179
|
+
result = result.min(params.value);
|
|
180
|
+
break;
|
|
181
|
+
case "max":
|
|
182
|
+
result = result.max(params.value);
|
|
183
|
+
break;
|
|
184
|
+
case "positive":
|
|
185
|
+
result = result.positive();
|
|
186
|
+
break;
|
|
187
|
+
case "negative":
|
|
188
|
+
result = result.negative();
|
|
189
|
+
break;
|
|
190
|
+
case "int":
|
|
191
|
+
result = result.int();
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
function applyArrayValidators(p, validators) {
|
|
198
|
+
let result = p;
|
|
199
|
+
for (const v of validators) {
|
|
200
|
+
const params = v.params;
|
|
201
|
+
switch (v.kind) {
|
|
202
|
+
case "minLength":
|
|
203
|
+
result = result.minLength(params.value);
|
|
204
|
+
break;
|
|
205
|
+
case "maxLength":
|
|
206
|
+
result = result.maxLength(params.value);
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
function fromJSON(json) {
|
|
213
|
+
const obj = json;
|
|
214
|
+
switch (obj.type) {
|
|
215
|
+
case "string": {
|
|
216
|
+
let p = String();
|
|
217
|
+
if (obj.validators) p = applyStringValidators(p, obj.validators);
|
|
218
|
+
if (obj.required) p = p.required();
|
|
219
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
220
|
+
return p;
|
|
221
|
+
}
|
|
222
|
+
case "number": {
|
|
223
|
+
let p = Number();
|
|
224
|
+
if (obj.validators) p = applyNumberValidators(p, obj.validators);
|
|
225
|
+
if (obj.required) p = p.required();
|
|
226
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
227
|
+
return p;
|
|
228
|
+
}
|
|
229
|
+
case "boolean": {
|
|
230
|
+
let p = Boolean();
|
|
231
|
+
if (obj.required) p = p.required();
|
|
232
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
233
|
+
return p;
|
|
234
|
+
}
|
|
235
|
+
case "literal": {
|
|
236
|
+
let p = Literal(obj.value);
|
|
237
|
+
if (obj.required) p = p.required();
|
|
238
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
239
|
+
return p;
|
|
240
|
+
}
|
|
241
|
+
case "struct": {
|
|
242
|
+
const fields = {};
|
|
243
|
+
for (const key in obj.fields) fields[key] = fromJSON(obj.fields[key]);
|
|
244
|
+
let p = Struct(fields);
|
|
245
|
+
if (obj.required) p = p.required();
|
|
246
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
247
|
+
return p;
|
|
248
|
+
}
|
|
249
|
+
case "array": {
|
|
250
|
+
const element = fromJSON(obj.element);
|
|
251
|
+
let p = Array(element);
|
|
252
|
+
if (obj.validators) p = applyArrayValidators(p, obj.validators);
|
|
253
|
+
if (obj.required) p = p.required();
|
|
254
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
255
|
+
return p;
|
|
256
|
+
}
|
|
257
|
+
case "union": {
|
|
258
|
+
const variants = {};
|
|
259
|
+
for (const key in obj.variants) variants[key] = fromJSON(obj.variants[key]);
|
|
260
|
+
let p = Union({
|
|
261
|
+
discriminator: obj.discriminator,
|
|
262
|
+
variants
|
|
263
|
+
});
|
|
264
|
+
if (obj.required) p = p.required();
|
|
265
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
266
|
+
return p;
|
|
267
|
+
}
|
|
268
|
+
case "either": {
|
|
269
|
+
const variants = obj.variants.map((v) => fromJSON(v));
|
|
270
|
+
let p = Either(...variants);
|
|
271
|
+
if (obj.required) p = p.required();
|
|
272
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
273
|
+
return p;
|
|
274
|
+
}
|
|
275
|
+
case "tree": {
|
|
276
|
+
const treeJSON = obj;
|
|
277
|
+
const nodeMap = /* @__PURE__ */ new Map();
|
|
278
|
+
const nodeJSONMap = /* @__PURE__ */ new Map();
|
|
279
|
+
for (const nodeType in treeJSON.nodes) nodeJSONMap.set(nodeType, treeJSON.nodes[nodeType]);
|
|
280
|
+
for (const [nodeType, nodeJSON] of nodeJSONMap) {
|
|
281
|
+
const data = fromJSON(nodeJSON.data);
|
|
282
|
+
const childTypes = nodeJSON.children;
|
|
283
|
+
const node = TreeNode(nodeType, {
|
|
284
|
+
data,
|
|
285
|
+
children: () => childTypes.map((ct) => nodeMap.get(ct))
|
|
286
|
+
});
|
|
287
|
+
nodeMap.set(nodeType, node);
|
|
288
|
+
}
|
|
289
|
+
const root = nodeMap.get(treeJSON.root);
|
|
290
|
+
let p = Tree({ root });
|
|
291
|
+
if (obj.required) p = p.required();
|
|
292
|
+
if (obj.default !== void 0) p = p.default(obj.default);
|
|
293
|
+
return p;
|
|
294
|
+
}
|
|
295
|
+
default: throw new Error(`Unknown JSON schema type: ${obj.type}`);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
//#endregion
|
|
300
|
+
export { SchemaJSON_exports };
|
|
301
|
+
//# sourceMappingURL=SchemaJSON.mjs.map
|