@vielzeug/spell 26.10.15 → 26.10.17

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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/dist/_dev.cjs.map +1 -1
  3. package/dist/_dev.js.map +1 -1
  4. package/dist/core.cjs.map +1 -1
  5. package/dist/core.js +1 -1
  6. package/dist/core.js.map +1 -1
  7. package/dist/errors.cjs.map +1 -1
  8. package/dist/errors.js +1 -1
  9. package/dist/errors.js.map +1 -1
  10. package/dist/formats.cjs.map +1 -1
  11. package/dist/formats.js +1 -1
  12. package/dist/formats.js.map +1 -1
  13. package/dist/json-schema.cjs.map +1 -1
  14. package/dist/json-schema.js.map +1 -1
  15. package/dist/json.js +1 -1
  16. package/dist/messages.cjs.map +1 -1
  17. package/dist/messages.js.map +1 -1
  18. package/dist/s.cjs.map +1 -1
  19. package/dist/s.js.map +1 -1
  20. package/dist/safe-object.cjs.map +1 -1
  21. package/dist/safe-object.js +1 -1
  22. package/dist/safe-object.js.map +1 -1
  23. package/dist/schemas/array.cjs.map +1 -1
  24. package/dist/schemas/array.js.map +1 -1
  25. package/dist/schemas/bigint.cjs.map +1 -1
  26. package/dist/schemas/bigint.js.map +1 -1
  27. package/dist/schemas/boolean.cjs.map +1 -1
  28. package/dist/schemas/boolean.js.map +1 -1
  29. package/dist/schemas/date.cjs.map +1 -1
  30. package/dist/schemas/date.js.map +1 -1
  31. package/dist/schemas/enum.cjs.map +1 -1
  32. package/dist/schemas/enum.js.map +1 -1
  33. package/dist/schemas/instanceof.cjs.map +1 -1
  34. package/dist/schemas/instanceof.js.map +1 -1
  35. package/dist/schemas/intersect.cjs.map +1 -1
  36. package/dist/schemas/intersect.js.map +1 -1
  37. package/dist/schemas/lazy.cjs.map +1 -1
  38. package/dist/schemas/lazy.js.map +1 -1
  39. package/dist/schemas/literal.cjs.map +1 -1
  40. package/dist/schemas/literal.js.map +1 -1
  41. package/dist/schemas/map.cjs.map +1 -1
  42. package/dist/schemas/map.js +1 -1
  43. package/dist/schemas/map.js.map +1 -1
  44. package/dist/schemas/never.cjs.map +1 -1
  45. package/dist/schemas/never.js.map +1 -1
  46. package/dist/schemas/number.cjs.map +1 -1
  47. package/dist/schemas/number.js.map +1 -1
  48. package/dist/schemas/object.cjs.map +1 -1
  49. package/dist/schemas/object.js.map +1 -1
  50. package/dist/schemas/raw-or.cjs.map +1 -1
  51. package/dist/schemas/raw-or.js.map +1 -1
  52. package/dist/schemas/record.cjs.map +1 -1
  53. package/dist/schemas/record.js.map +1 -1
  54. package/dist/schemas/set.cjs.map +1 -1
  55. package/dist/schemas/set.js +1 -1
  56. package/dist/schemas/set.js.map +1 -1
  57. package/dist/schemas/string.cjs.map +1 -1
  58. package/dist/schemas/string.js.map +1 -1
  59. package/dist/schemas/tuple.cjs.map +1 -1
  60. package/dist/schemas/tuple.js.map +1 -1
  61. package/dist/schemas/union.cjs.map +1 -1
  62. package/dist/schemas/union.js.map +1 -1
  63. package/dist/schemas/variant.cjs.map +1 -1
  64. package/dist/schemas/variant.js +1 -1
  65. package/dist/schemas/variant.js.map +1 -1
  66. package/dist/spell.cjs.map +1 -1
  67. package/dist/spell.iife.js.map +1 -1
  68. package/dist/spell.js +2235 -2
  69. package/dist/spell.js.map +1 -1
  70. package/dist/tolerate.cjs.map +1 -1
  71. package/dist/tolerate.js.map +1 -1
  72. package/dist/types.cjs.map +1 -1
  73. package/dist/types.js.map +1 -1
  74. package/dist/validators.cjs.map +1 -1
  75. package/dist/validators.js.map +1 -1
  76. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"file":"tuple.js","names":[],"sources":["../../src/schemas/tuple.ts"],"sourcesContent":["import type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, prependIssuePath, Schema } from '../core';\n\nexport type TupleSchemas = readonly [AnySchema, ...AnySchema[]];\nexport type InferTuple<T extends TupleSchemas, R extends AnySchema | null = null> = R extends AnySchema\n ? readonly [...{ [K in keyof T]: InferOutput<T[K]> }, ...InferOutput<R>[]]\n : { readonly [K in keyof T]: InferOutput<T[K]> };\ntype InferTupleInput<T extends TupleSchemas, R extends AnySchema | null = null> = R extends AnySchema\n ? readonly [...{ [K in keyof T]: InferInput<T[K]> }, ...InferInput<R>[]]\n : { readonly [K in keyof T]: InferInput<T[K]> };\n\nexport class TupleSchema<T extends TupleSchemas, R extends AnySchema | null = null> extends Schema<\n InferTuple<T, R>,\n InferTupleInput<T, R>\n> {\n readonly items: T;\n readonly restSchema: R;\n\n protected override get _kind(): string {\n return 'tuple';\n }\n\n constructor(items: T, restSchema: R = null as R) {\n super();\n this.items = items;\n this.restSchema = restSchema;\n }\n\n rest<U extends AnySchema>(schema: U): TupleSchema<T, U> {\n return this._copyStateTo(new TupleSchema(this.items, schema)) as unknown as TupleSchema<T, U>;\n }\n\n private _guardTupleInput(\n value: unknown[],\n ctx: ParseContext,\n ): { ok: true; value: unknown[] } | { issues: Issue[]; ok: false } {\n if (this.restSchema === null && value.length !== this.items.length) {\n return {\n issues: [\n {\n code: ErrorCode.invalid_length,\n message: ctx.messages.tuple.length({ exact: this.items.length }),\n params: { exact: this.items.length },\n path: [],\n },\n ],\n ok: false,\n };\n }\n\n if (this.restSchema !== null && value.length < this.items.length) {\n return {\n issues: [\n {\n code: ErrorCode.too_small,\n message: ctx.messages.tuple.min({ min: this.items.length }),\n params: { min: this.items.length },\n path: [],\n },\n ],\n ok: false,\n };\n }\n\n return { ok: true, value };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!Array.isArray(value)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.tuple.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const guarded = this._guardTupleInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const issues: Issue[] = [];\n const output: unknown[] = [];\n const tupleValue = guarded.value;\n\n for (let i = 0; i < this.items.length; i++) {\n const result = this.items[i]._parseFullSync(tupleValue[i], ctx);\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n\n if (this.restSchema !== null) {\n for (let i = this.items.length; i < tupleValue.length; i++) {\n const result = this.restSchema._parseFullSync(tupleValue[i], ctx);\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n }\n\n return { data: output, issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n if (!Array.isArray(value)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.tuple.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const guarded = this._guardTupleInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const tupleValue = guarded.value;\n const issues: Issue[] = [];\n const output: unknown[] = [];\n\n const fixedResults = await Promise.all(this.items.map((schema, i) => schema._parseFullAsync(tupleValue[i], ctx)));\n\n for (let i = 0; i < fixedResults.length; i++) {\n const result = fixedResults[i];\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n\n const rest = this.restSchema;\n\n if (rest !== null) {\n const restItems = tupleValue.slice(this.items.length);\n const restResults = await Promise.all(restItems.map((item) => rest._parseFullAsync(item, ctx)));\n\n for (let i = 0; i < restResults.length; i++) {\n const result = restResults[i];\n const idx = this.items.length + i;\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, idx));\n output.push(tupleValue[idx]);\n }\n }\n }\n\n return { data: output, issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n items: this.items.map((s) => s.definition()),\n kind: 'tuple',\n rest: this.restSchema !== null ? this.restSchema.definition() : null,\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tuple.js","names":["TupleSchema","Schema","items","restSchema","schema","value","ErrorCode","ctx","guarded","issues","output","tupleValue","i","result","prependIssuePath","fixedResults","rest","restItems","restResults","item","idx","s"],"sources":["../../src/schemas/tuple.ts"],"sourcesContent":["import type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, prependIssuePath, Schema } from '../core';\n\nexport type TupleSchemas = readonly [AnySchema, ...AnySchema[]];\nexport type InferTuple<T extends TupleSchemas, R extends AnySchema | null = null> = R extends AnySchema\n ? readonly [...{ [K in keyof T]: InferOutput<T[K]> }, ...InferOutput<R>[]]\n : { readonly [K in keyof T]: InferOutput<T[K]> };\ntype InferTupleInput<T extends TupleSchemas, R extends AnySchema | null = null> = R extends AnySchema\n ? readonly [...{ [K in keyof T]: InferInput<T[K]> }, ...InferInput<R>[]]\n : { readonly [K in keyof T]: InferInput<T[K]> };\n\nexport class TupleSchema<T extends TupleSchemas, R extends AnySchema | null = null> extends Schema<\n InferTuple<T, R>,\n InferTupleInput<T, R>\n> {\n readonly items: T;\n readonly restSchema: R;\n\n protected override get _kind(): string {\n return 'tuple';\n }\n\n constructor(items: T, restSchema: R = null as R) {\n super();\n this.items = items;\n this.restSchema = restSchema;\n }\n\n rest<U extends AnySchema>(schema: U): TupleSchema<T, U> {\n return this._copyStateTo(new TupleSchema(this.items, schema)) as unknown as TupleSchema<T, U>;\n }\n\n private _guardTupleInput(\n value: unknown[],\n ctx: ParseContext,\n ): { ok: true; value: unknown[] } | { issues: Issue[]; ok: false } {\n if (this.restSchema === null && value.length !== this.items.length) {\n return {\n issues: [\n {\n code: ErrorCode.invalid_length,\n message: ctx.messages.tuple.length({ exact: this.items.length }),\n params: { exact: this.items.length },\n path: [],\n },\n ],\n ok: false,\n };\n }\n\n if (this.restSchema !== null && value.length < this.items.length) {\n return {\n issues: [\n {\n code: ErrorCode.too_small,\n message: ctx.messages.tuple.min({ min: this.items.length }),\n params: { min: this.items.length },\n path: [],\n },\n ],\n ok: false,\n };\n }\n\n return { ok: true, value };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!Array.isArray(value)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.tuple.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const guarded = this._guardTupleInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const issues: Issue[] = [];\n const output: unknown[] = [];\n const tupleValue = guarded.value;\n\n for (let i = 0; i < this.items.length; i++) {\n const result = this.items[i]._parseFullSync(tupleValue[i], ctx);\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n\n if (this.restSchema !== null) {\n for (let i = this.items.length; i < tupleValue.length; i++) {\n const result = this.restSchema._parseFullSync(tupleValue[i], ctx);\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n }\n\n return { data: output, issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n if (!Array.isArray(value)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.tuple.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const guarded = this._guardTupleInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const tupleValue = guarded.value;\n const issues: Issue[] = [];\n const output: unknown[] = [];\n\n const fixedResults = await Promise.all(this.items.map((schema, i) => schema._parseFullAsync(tupleValue[i], ctx)));\n\n for (let i = 0; i < fixedResults.length; i++) {\n const result = fixedResults[i];\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n output.push(tupleValue[i]);\n }\n }\n\n const rest = this.restSchema;\n\n if (rest !== null) {\n const restItems = tupleValue.slice(this.items.length);\n const restResults = await Promise.all(restItems.map((item) => rest._parseFullAsync(item, ctx)));\n\n for (let i = 0; i < restResults.length; i++) {\n const result = restResults[i];\n const idx = this.items.length + i;\n\n if (result.issues.length === 0) {\n output.push(result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, idx));\n output.push(tupleValue[idx]);\n }\n }\n }\n\n return { data: output, issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n items: this.items.map((s) => s.definition()),\n kind: 'tuple',\n rest: this.restSchema !== null ? this.restSchema.definition() : null,\n };\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"union.cjs","names":[],"sources":["../../src/schemas/union.ts"],"sourcesContent":["import type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class UnionSchema<T extends readonly AnySchema[]> extends Schema<InferOutput<T[number]>, InferInput<T[number]>> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'union';\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = schema._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n branchErrors.push(result.issues);\n }\n\n return {\n data: value,\n issues: [\n {\n code: ErrorCode.invalid_union,\n message: ctx.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ],\n typeOk: false,\n };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = await schema._parseFullAsync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n branchErrors.push(result.issues);\n }\n\n return {\n data: value,\n issues: [\n {\n code: ErrorCode.invalid_union,\n message: ctx.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ],\n typeOk: false,\n };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'union' };\n }\n}\n"],"mappings":"yDAIA,IAAa,EAAb,cAAiE,EAAA,MAAsD,CACrH,QAEA,IAAuB,OAAgB,CACrC,MAAO,OACT,CAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,OAAO,OAAO,CAAC,GAAG,CAAO,CAAC,CAC3C,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAM,EAA0B,CAAC,EAEjC,IAAK,IAAM,KAAU,KAAK,QAAS,CACjC,IAAM,EAAS,EAAO,eAAe,EAAO,CAAG,EAE/C,GAAI,EAAO,OAAO,SAAW,EAAG,MAAO,CAAE,KAAM,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAErF,EAAa,KAAK,EAAO,MAAM,CACjC,CAEA,MAAO,CACL,KAAM,EACN,OAAQ,CACN,CACE,KAAM,EAAA,UAAU,cAChB,QAAS,EAAI,SAAS,MAAM,QAAQ,EACpC,OAAQ,CAAE,OAAQ,CAAa,EAC/B,KAAM,CAAC,CACT,CACF,EACA,OAAQ,EACV,CACF,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAM,EAA0B,CAAC,EAEjC,IAAK,IAAM,KAAU,KAAK,QAAS,CACjC,IAAM,EAAS,MAAM,EAAO,gBAAgB,EAAO,CAAG,EAEtD,GAAI,EAAO,OAAO,SAAW,EAAG,MAAO,CAAE,KAAM,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAErF,EAAa,KAAK,EAAO,MAAM,CACjC,CAEA,MAAO,CACL,KAAM,EACN,OAAQ,CACN,CACE,KAAM,EAAA,UAAU,cAChB,QAAS,EAAI,SAAS,MAAM,QAAQ,EACpC,OAAQ,CAAE,OAAQ,CAAa,EAC/B,KAAM,CAAC,CACT,CACF,EACA,OAAQ,EACV,CACF,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAM,EAAE,WAAW,CAAC,EAAG,KAAM,OAAQ,CACrG,CACF"}
1
+ {"version":3,"file":"union.cjs","names":["Schema","ErrorCode","require_types","require_core","UnionSchema","schemas","branchErrors","schema","result","value","ctx","s"],"sources":["../../src/schemas/union.ts"],"sourcesContent":["import type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class UnionSchema<T extends readonly AnySchema[]> extends Schema<InferOutput<T[number]>, InferInput<T[number]>> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'union';\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = schema._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n branchErrors.push(result.issues);\n }\n\n return {\n data: value,\n issues: [\n {\n code: ErrorCode.invalid_union,\n message: ctx.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ],\n typeOk: false,\n };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = await schema._parseFullAsync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n branchErrors.push(result.issues);\n }\n\n return {\n data: value,\n issues: [\n {\n code: ErrorCode.invalid_union,\n message: ctx.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ],\n typeOk: false,\n };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'union' };\n }\n}\n"],"mappings":"A,yDAIA,IAAaI,EAAb,cAAiEJ,EAAAA,MAAsD,CACrH,QAEA,IAAuB,OAAgB,CACrC,MAAO,OACT,CAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,OAAO,OAAO,CAAC,GAAGK,CAAO,CAAC,CAC3C,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMC,EAA0B,CAAC,EAEjC,IAAK,IAAMC,KAAU,KAAK,QAAS,CACjC,IAAMC,EAASD,EAAO,eAAeE,EAAOC,CAAG,EAE/C,GAAIF,EAAO,OAAO,SAAW,EAAG,MAAO,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAErFF,EAAa,KAAKE,EAAO,MAAM,CACjC,CAEA,MAAO,CACL,KAAMC,EACN,OAAQ,CACN,CACE,KAAMR,EAAAA,UAAU,cAChB,QAASS,EAAI,SAAS,MAAM,QAAQ,EACpC,OAAQ,CAAE,OAAQJ,CAAa,EAC/B,KAAM,CAAC,CACT,CACF,EACA,OAAQ,EACV,CACF,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMA,EAA0B,CAAC,EAEjC,IAAK,IAAMC,KAAU,KAAK,QAAS,CACjC,IAAMC,EAAS,MAAMD,EAAO,gBAAgBE,EAAOC,CAAG,EAEtD,GAAIF,EAAO,OAAO,SAAW,EAAG,MAAO,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAErFF,EAAa,KAAKE,EAAO,MAAM,CACjC,CAEA,MAAO,CACL,KAAMC,EACN,OAAQ,CACN,CACE,KAAMR,EAAAA,UAAU,cAChB,QAASS,EAAI,SAAS,MAAM,QAAQ,EACpC,OAAQ,CAAE,OAAQJ,CAAa,EAC/B,KAAM,CAAC,CACT,CACF,EACA,OAAQ,EACV,CACF,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAMK,EAAE,WAAW,CAAC,EAAG,KAAM,OAAQ,CACrG,CACF,E"}
@@ -1 +1 @@
1
- {"version":3,"file":"union.js","names":[],"sources":["../../src/schemas/union.ts"],"sourcesContent":["import type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class UnionSchema<T extends readonly AnySchema[]> extends Schema<InferOutput<T[number]>, InferInput<T[number]>> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'union';\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = schema._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n branchErrors.push(result.issues);\n }\n\n return {\n data: value,\n issues: [\n {\n code: ErrorCode.invalid_union,\n message: ctx.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ],\n typeOk: false,\n };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = await schema._parseFullAsync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n branchErrors.push(result.issues);\n }\n\n return {\n data: value,\n issues: [\n {\n code: ErrorCode.invalid_union,\n message: ctx.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ],\n typeOk: false,\n };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'union' };\n }\n}\n"],"mappings":"4EAIA,IAAa,EAAb,cAAiE,CAAsD,CACrH,QAEA,IAAuB,OAAgB,CACrC,MAAO,OACT,CAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,OAAO,OAAO,CAAC,GAAG,CAAO,CAAC,CAC3C,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAM,EAA0B,CAAC,EAEjC,IAAK,IAAM,KAAU,KAAK,QAAS,CACjC,IAAM,EAAS,EAAO,eAAe,EAAO,CAAG,EAE/C,GAAI,EAAO,OAAO,SAAW,EAAG,MAAO,CAAE,KAAM,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAErF,EAAa,KAAK,EAAO,MAAM,CACjC,CAEA,MAAO,CACL,KAAM,EACN,OAAQ,CACN,CACE,KAAM,EAAU,cAChB,QAAS,EAAI,SAAS,MAAM,QAAQ,EACpC,OAAQ,CAAE,OAAQ,CAAa,EAC/B,KAAM,CAAC,CACT,CACF,EACA,OAAQ,EACV,CACF,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAM,EAA0B,CAAC,EAEjC,IAAK,IAAM,KAAU,KAAK,QAAS,CACjC,IAAM,EAAS,MAAM,EAAO,gBAAgB,EAAO,CAAG,EAEtD,GAAI,EAAO,OAAO,SAAW,EAAG,MAAO,CAAE,KAAM,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAErF,EAAa,KAAK,EAAO,MAAM,CACjC,CAEA,MAAO,CACL,KAAM,EACN,OAAQ,CACN,CACE,KAAM,EAAU,cAChB,QAAS,EAAI,SAAS,MAAM,QAAQ,EACpC,OAAQ,CAAE,OAAQ,CAAa,EAC/B,KAAM,CAAC,CACT,CACF,EACA,OAAQ,EACV,CACF,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAM,EAAE,WAAW,CAAC,EAAG,KAAM,OAAQ,CACrG,CACF"}
1
+ {"version":3,"file":"union.js","names":["UnionSchema","Schema","schemas","branchErrors","schema","result","value","ctx","ErrorCode","s"],"sources":["../../src/schemas/union.ts"],"sourcesContent":["import type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class UnionSchema<T extends readonly AnySchema[]> extends Schema<InferOutput<T[number]>, InferInput<T[number]>> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'union';\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = schema._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n branchErrors.push(result.issues);\n }\n\n return {\n data: value,\n issues: [\n {\n code: ErrorCode.invalid_union,\n message: ctx.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ],\n typeOk: false,\n };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const branchErrors: Issue[][] = [];\n\n for (const schema of this.schemas) {\n const result = await schema._parseFullAsync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n branchErrors.push(result.issues);\n }\n\n return {\n data: value,\n issues: [\n {\n code: ErrorCode.invalid_union,\n message: ctx.messages.union.invalid(),\n params: { errors: branchErrors },\n path: [],\n },\n ],\n typeOk: false,\n };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'union' };\n }\n}\n"],"mappings":"A,4EAIA,IAAaA,EAAb,cAAiEC,CAAsD,CACrH,QAEA,IAAuB,OAAgB,CACrC,MAAO,OACT,CAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,OAAO,OAAO,CAAC,GAAGC,CAAO,CAAC,CAC3C,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMC,EAA0B,CAAC,EAEjC,IAAK,IAAMC,KAAU,KAAK,QAAS,CACjC,IAAMC,EAASD,EAAO,eAAeE,EAAOC,CAAG,EAE/C,GAAIF,EAAO,OAAO,SAAW,EAAG,MAAO,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAErFF,EAAa,KAAKE,EAAO,MAAM,CACjC,CAEA,MAAO,CACL,KAAMC,EACN,OAAQ,CACN,CACE,KAAME,EAAU,cAChB,QAASD,EAAI,SAAS,MAAM,QAAQ,EACpC,OAAQ,CAAE,OAAQJ,CAAa,EAC/B,KAAM,CAAC,CACT,CACF,EACA,OAAQ,EACV,CACF,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMA,EAA0B,CAAC,EAEjC,IAAK,IAAMC,KAAU,KAAK,QAAS,CACjC,IAAMC,EAAS,MAAMD,EAAO,gBAAgBE,EAAOC,CAAG,EAEtD,GAAIF,EAAO,OAAO,SAAW,EAAG,MAAO,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAErFF,EAAa,KAAKE,EAAO,MAAM,CACjC,CAEA,MAAO,CACL,KAAMC,EACN,OAAQ,CACN,CACE,KAAME,EAAU,cAChB,QAASD,EAAI,SAAS,MAAM,QAAQ,EACpC,OAAQ,CAAE,OAAQJ,CAAa,EAC/B,KAAM,CAAC,CACT,CACF,EACA,OAAQ,EACV,CACF,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAMM,EAAE,WAAW,CAAC,EAAG,KAAM,OAAQ,CACrG,CACF,E"}
@@ -1 +1 @@
1
- {"version":3,"file":"variant.cjs","names":[],"sources":["../../src/schemas/variant.ts"],"sourcesContent":["import type { AnySchema, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\nimport { SpellError } from '../errors';\nimport { defineOwnProperty } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport type { InferObject, InferObjectInput, ObjectSchema, ObjectShape } from './object';\n\ntype VariantMap = Record<string, ObjectSchema<any>>;\ntype Simplify<T> = { [P in keyof T]: T[P] };\ntype InferVariantMap<K extends string, M extends VariantMap> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? InferObject<S> & { [P in K]: Tag }\n : never;\n}[keyof M & string];\ntype InferVariantInputMap<K extends string, M extends VariantMap> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? Simplify<InferObjectInput<S> & { [P in K]: Tag }>\n : never;\n}[keyof M & string];\n\nexport class VariantSchema<K extends string, M extends VariantMap> extends Schema<\n InferVariantMap<K, M>,\n InferVariantInputMap<K, M>\n> {\n private readonly _map: Map<string, VariantMap[string]>;\n private readonly _discriminator: K;\n\n protected override get _kind(): string {\n return 'variant';\n }\n\n constructor(discriminator: K, variantMap: M) {\n const map = new Map<string, VariantMap[string]>();\n\n for (const [tag, schema] of Object.entries(variantMap)) {\n const discriminatorSchema = new LiteralSchema(tag);\n const existingDiscriminator = schema.shape[discriminator];\n\n if (\n existingDiscriminator &&\n (!(existingDiscriminator instanceof LiteralSchema) || existingDiscriminator.value !== tag)\n ) {\n throw new SpellError(\n `s.discriminatedUnion(): branch \"${tag}\" defines a conflicting discriminator schema for \"${discriminator}\".`,\n );\n }\n\n const discriminatorShape = {\n [discriminator]: discriminatorSchema,\n } as unknown as Record<K, AnySchema>;\n\n map.set(tag, existingDiscriminator ? schema : schema.extend(discriminatorShape));\n }\n\n super();\n this._discriminator = discriminator;\n this._map = map;\n }\n\n /** The discriminator field key used to select the matching variant. */\n get discriminator(): K {\n return this._discriminator;\n }\n\n /** Map from discriminator tag value to the extended ObjectSchema for that variant. */\n get variantMap(): ReadonlyMap<string, VariantMap[string]> {\n return new Map(this._map);\n }\n\n private _resolveVariant(\n value: unknown,\n ctx: ParseContext,\n ): { matched: VariantMap[string]; obj: Record<string, unknown> } | { issues: Issue[] } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.variant.type(), path: [] }],\n };\n }\n\n const obj = value as Record<string, unknown>;\n const discValue = obj[this._discriminator] as string;\n const matched = this._map.get(discValue);\n\n if (!matched) {\n const expected = [...this._map.keys()];\n\n return {\n issues: [\n {\n code: ErrorCode.invalid_variant,\n message: ctx.messages.variant.invalidDiscriminator({\n discriminator: this._discriminator,\n expected,\n }),\n params: { discriminator: this._discriminator, expected },\n path: [],\n },\n ],\n };\n }\n\n return { matched, obj };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const resolved = this._resolveVariant(value, ctx);\n\n if ('issues' in resolved) return { data: value, issues: resolved.issues, typeOk: false };\n\n const result = resolved.matched._parseFullSync(value, ctx);\n\n return result.issues.length === 0\n ? { data: result.data, issues: [], typeOk: true }\n : { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const resolved = this._resolveVariant(value, ctx);\n\n if ('issues' in resolved) return { data: value, issues: resolved.issues, typeOk: false };\n\n const result = await resolved.matched._parseFullAsync(value, ctx);\n\n return result.issues.length === 0\n ? { data: result.data, issues: [], typeOk: true }\n : { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const branches: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of this._map.entries()) {\n defineOwnProperty(branches, key, schema.definition());\n }\n\n return { ...this._describeBase(), branches, discriminator: this._discriminator, kind: 'variant' };\n }\n}\n"],"mappings":"+IAqBA,IAAa,EAAb,cAA2E,EAAA,MAGzE,CACA,KACA,eAEA,IAAuB,OAAgB,CACrC,MAAO,SACT,CAEA,YAAY,EAAkB,EAAe,CAC3C,IAAM,EAAM,IAAI,IAEhB,IAAK,GAAM,CAAC,EAAK,KAAW,OAAO,QAAQ,CAAU,EAAG,CACtD,IAAM,EAAsB,IAAI,EAAA,cAAc,CAAG,EAC3C,EAAwB,EAAO,MAAM,GAE3C,GACE,IACC,EAAE,aAAiC,EAAA,gBAAkB,EAAsB,QAAU,GAEtF,MAAM,IAAI,EAAA,WACR,mCAAmC,EAAI,oDAAoD,EAAc,GAC3G,EAGF,IAAM,EAAqB,EACxB,GAAgB,CACnB,EAEA,EAAI,IAAI,EAAK,EAAwB,EAAS,EAAO,OAAO,CAAkB,CAAC,CACjF,CAEA,MAAM,EACN,KAAK,eAAiB,EACtB,KAAK,KAAO,CACd,CAGA,IAAI,eAAmB,CACrB,OAAO,KAAK,cACd,CAGA,IAAI,YAAsD,CACxD,OAAO,IAAI,IAAI,KAAK,IAAI,CAC1B,CAEA,gBACE,EACA,EACqF,CACrF,GAAqB,OAAO,GAAU,WAAlC,GAA8C,MAAM,QAAQ,CAAK,EACnE,MAAO,CACL,OAAQ,CAAC,CAAE,KAAM,EAAA,UAAU,aAAc,QAAS,EAAI,SAAS,QAAQ,KAAK,EAAG,KAAM,CAAC,CAAE,CAAC,CAC3F,EAGF,IAAM,EAAM,EACN,EAAY,EAAI,KAAK,gBACrB,EAAU,KAAK,KAAK,IAAI,CAAS,EAEvC,GAAI,CAAC,EAAS,CACZ,IAAM,EAAW,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,EAErC,MAAO,CACL,OAAQ,CACN,CACE,KAAM,EAAA,UAAU,gBAChB,QAAS,EAAI,SAAS,QAAQ,qBAAqB,CACjD,cAAe,KAAK,eACpB,UACF,CAAC,EACD,OAAQ,CAAE,cAAe,KAAK,eAAgB,UAAS,EACvD,KAAM,CAAC,CACT,CACF,CACF,CACF,CAEA,MAAO,CAAE,UAAS,KAAI,CACxB,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAM,EAAW,KAAK,gBAAgB,EAAO,CAAG,EAEhD,GAAI,WAAY,EAAU,MAAO,CAAE,KAAM,EAAO,OAAQ,EAAS,OAAQ,OAAQ,EAAM,EAEvF,IAAM,EAAS,EAAS,QAAQ,eAAe,EAAO,CAAG,EAEzD,OAAO,EAAO,OAAO,SAAW,EAC5B,CAAE,KAAM,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAC9C,CAAE,KAAM,EAAO,OAAQ,EAAO,OAAQ,OAAQ,EAAK,CACzD,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAM,EAAW,KAAK,gBAAgB,EAAO,CAAG,EAEhD,GAAI,WAAY,EAAU,MAAO,CAAE,KAAM,EAAO,OAAQ,EAAS,OAAQ,OAAQ,EAAM,EAEvF,IAAM,EAAS,MAAM,EAAS,QAAQ,gBAAgB,EAAO,CAAG,EAEhE,OAAO,EAAO,OAAO,SAAW,EAC5B,CAAE,KAAM,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAC9C,CAAE,KAAM,EAAO,OAAQ,EAAO,OAAQ,OAAQ,EAAK,CACzD,CAEA,mBAAyD,CACvD,IAAM,EAA6C,CAAC,EAEpD,IAAK,GAAM,CAAC,EAAK,KAAW,KAAK,KAAK,QAAQ,EAC5C,EAAA,kBAAkB,EAAU,EAAK,EAAO,WAAW,CAAC,EAGtD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,WAAU,cAAe,KAAK,eAAgB,KAAM,SAAU,CAClG,CACF"}
1
+ {"version":3,"file":"variant.cjs","names":["Schema","LiteralSchema","SpellError","ErrorCode","require_errors","require_safe_object","require_types","require_core","require_literal","VariantSchema","map","tag","schema","variantMap","discriminatorSchema","existingDiscriminator","discriminator","discriminatorShape","value","ctx","obj","discValue","matched","expected","resolved","result","branches","key"],"sources":["../../src/schemas/variant.ts"],"sourcesContent":["import type { AnySchema, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\nimport { SpellError } from '../errors';\nimport { defineOwnProperty } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport type { InferObject, InferObjectInput, ObjectSchema, ObjectShape } from './object';\n\ntype VariantMap = Record<string, ObjectSchema<any>>;\ntype Simplify<T> = { [P in keyof T]: T[P] };\ntype InferVariantMap<K extends string, M extends VariantMap> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? InferObject<S> & { [P in K]: Tag }\n : never;\n}[keyof M & string];\ntype InferVariantInputMap<K extends string, M extends VariantMap> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? Simplify<InferObjectInput<S> & { [P in K]: Tag }>\n : never;\n}[keyof M & string];\n\nexport class VariantSchema<K extends string, M extends VariantMap> extends Schema<\n InferVariantMap<K, M>,\n InferVariantInputMap<K, M>\n> {\n private readonly _map: Map<string, VariantMap[string]>;\n private readonly _discriminator: K;\n\n protected override get _kind(): string {\n return 'variant';\n }\n\n constructor(discriminator: K, variantMap: M) {\n const map = new Map<string, VariantMap[string]>();\n\n for (const [tag, schema] of Object.entries(variantMap)) {\n const discriminatorSchema = new LiteralSchema(tag);\n const existingDiscriminator = schema.shape[discriminator];\n\n if (\n existingDiscriminator &&\n (!(existingDiscriminator instanceof LiteralSchema) || existingDiscriminator.value !== tag)\n ) {\n throw new SpellError(\n `s.discriminatedUnion(): branch \"${tag}\" defines a conflicting discriminator schema for \"${discriminator}\".`,\n );\n }\n\n const discriminatorShape = {\n [discriminator]: discriminatorSchema,\n } as unknown as Record<K, AnySchema>;\n\n map.set(tag, existingDiscriminator ? schema : schema.extend(discriminatorShape));\n }\n\n super();\n this._discriminator = discriminator;\n this._map = map;\n }\n\n /** The discriminator field key used to select the matching variant. */\n get discriminator(): K {\n return this._discriminator;\n }\n\n /** Map from discriminator tag value to the extended ObjectSchema for that variant. */\n get variantMap(): ReadonlyMap<string, VariantMap[string]> {\n return new Map(this._map);\n }\n\n private _resolveVariant(\n value: unknown,\n ctx: ParseContext,\n ): { matched: VariantMap[string]; obj: Record<string, unknown> } | { issues: Issue[] } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.variant.type(), path: [] }],\n };\n }\n\n const obj = value as Record<string, unknown>;\n const discValue = obj[this._discriminator] as string;\n const matched = this._map.get(discValue);\n\n if (!matched) {\n const expected = [...this._map.keys()];\n\n return {\n issues: [\n {\n code: ErrorCode.invalid_variant,\n message: ctx.messages.variant.invalidDiscriminator({\n discriminator: this._discriminator,\n expected,\n }),\n params: { discriminator: this._discriminator, expected },\n path: [],\n },\n ],\n };\n }\n\n return { matched, obj };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const resolved = this._resolveVariant(value, ctx);\n\n if ('issues' in resolved) return { data: value, issues: resolved.issues, typeOk: false };\n\n const result = resolved.matched._parseFullSync(value, ctx);\n\n return result.issues.length === 0\n ? { data: result.data, issues: [], typeOk: true }\n : { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const resolved = this._resolveVariant(value, ctx);\n\n if ('issues' in resolved) return { data: value, issues: resolved.issues, typeOk: false };\n\n const result = await resolved.matched._parseFullAsync(value, ctx);\n\n return result.issues.length === 0\n ? { data: result.data, issues: [], typeOk: true }\n : { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const branches: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of this._map.entries()) {\n defineOwnProperty(branches, key, schema.definition());\n }\n\n return { ...this._describeBase(), branches, discriminator: this._discriminator, kind: 'variant' };\n }\n}\n"],"mappings":"A,+IAqBA,IAAaS,EAAb,cAA2ET,EAAAA,MAGzE,CACA,KACA,eAEA,IAAuB,OAAgB,CACrC,MAAO,SACT,CAEA,YAAY,EAAkB,EAAe,CAC3C,IAAMU,EAAM,IAAI,IAEhB,IAAK,GAAM,CAACC,EAAKC,KAAW,OAAO,QAAQC,CAAU,EAAG,CACtD,IAAMC,EAAsB,IAAIb,EAAAA,cAAcU,CAAG,EAC3CI,EAAwBH,EAAO,MAAMI,GAE3C,GACED,IACC,EAAEA,aAAiCd,EAAAA,gBAAkBc,EAAsB,QAAUJ,GAEtF,MAAM,IAAIT,EAAAA,WACR,mCAAmCS,EAAI,oDAAoDK,EAAc,GAC3G,EAGF,IAAMC,EAAqB,EACxBD,GAAgBF,CACnB,EAEAJ,EAAI,IAAIC,EAAKI,EAAwBH,EAASA,EAAO,OAAOK,CAAkB,CAAC,CACjF,CAEA,MAAM,EACN,KAAK,eAAiBD,EACtB,KAAK,KAAON,CACd,CAGA,IAAI,eAAmB,CACrB,OAAO,KAAK,cACd,CAGA,IAAI,YAAsD,CACxD,OAAO,IAAI,IAAI,KAAK,IAAI,CAC1B,CAEA,gBACE,EACA,EACqF,CACrF,GAAqB,OAAOQ,GAAU,WAAlCA,GAA8C,MAAM,QAAQA,CAAK,EACnE,MAAO,CACL,OAAQ,CAAC,CAAE,KAAMf,EAAAA,UAAU,aAAc,QAASgB,EAAI,SAAS,QAAQ,KAAK,EAAG,KAAM,CAAC,CAAE,CAAC,CAC3F,EAGF,IAAMC,EAAMF,EACNG,EAAYD,EAAI,KAAK,gBACrBE,EAAU,KAAK,KAAK,IAAID,CAAS,EAEvC,GAAI,CAACC,EAAS,CACZ,IAAMC,EAAW,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,EAErC,MAAO,CACL,OAAQ,CACN,CACE,KAAMpB,EAAAA,UAAU,gBAChB,QAASgB,EAAI,SAAS,QAAQ,qBAAqB,CACjD,cAAe,KAAK,eACpB,UACF,CAAC,EACD,OAAQ,CAAE,cAAe,KAAK,eAAgB,UAAS,EACvD,KAAM,CAAC,CACT,CACF,CACF,CACF,CAEA,MAAO,CAAE,UAAS,KAAI,CACxB,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMK,EAAW,KAAK,gBAAgBN,EAAOC,CAAG,EAEhD,GAAI,WAAYK,EAAU,MAAO,CAAE,KAAMN,EAAO,OAAQM,EAAS,OAAQ,OAAQ,EAAM,EAEvF,IAAMC,EAASD,EAAS,QAAQ,eAAeN,EAAOC,CAAG,EAEzD,OAAOM,EAAO,OAAO,SAAW,EAC5B,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAC9C,CAAE,KAAMP,EAAO,OAAQO,EAAO,OAAQ,OAAQ,EAAK,CACzD,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMD,EAAW,KAAK,gBAAgBN,EAAOC,CAAG,EAEhD,GAAI,WAAYK,EAAU,MAAO,CAAE,KAAMN,EAAO,OAAQM,EAAS,OAAQ,OAAQ,EAAM,EAEvF,IAAMC,EAAS,MAAMD,EAAS,QAAQ,gBAAgBN,EAAOC,CAAG,EAEhE,OAAOM,EAAO,OAAO,SAAW,EAC5B,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAC9C,CAAE,KAAMP,EAAO,OAAQO,EAAO,OAAQ,OAAQ,EAAK,CACzD,CAEA,mBAAyD,CACvD,IAAMC,EAA6C,CAAC,EAEpD,IAAK,GAAM,CAACC,EAAKf,KAAW,KAAK,KAAK,QAAQ,EAC5CP,EAAA,kBAAkBqB,EAAUC,EAAKf,EAAO,WAAW,CAAC,EAGtD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,WAAU,cAAe,KAAK,eAAgB,KAAM,SAAU,CAClG,CACF,E"}
@@ -1,2 +1,2 @@
1
- import{SpellError as e}from"../errors.js";import{defineOwnProperty as t}from"../safe-object.js";import{ErrorCode as n}from"../types.js";import{Schema as r}from"../core.js";import{LiteralSchema as i}from"./literal.js";var a=class extends r{_map;_discriminator;get _kind(){return`variant`}constructor(t,n){let r=new Map;for(let[a,o]of Object.entries(n)){let n=new i(a),s=o.shape[t];if(s&&(!(s instanceof i)||s.value!==a))throw new e(`s.discriminatedUnion(): branch "${a}" defines a conflicting discriminator schema for "${t}".`);let c={[t]:n};r.set(a,s?o:o.extend(c))}super(),this._discriminator=t,this._map=r}get discriminator(){return this._discriminator}get variantMap(){return new Map(this._map)}_resolveVariant(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return{issues:[{code:n.invalid_type,message:t.messages.variant.type(),path:[]}]};let r=e,i=r[this._discriminator],a=this._map.get(i);if(!a){let e=[...this._map.keys()];return{issues:[{code:n.invalid_variant,message:t.messages.variant.invalidDiscriminator({discriminator:this._discriminator,expected:e}),params:{discriminator:this._discriminator,expected:e},path:[]}]}}return{matched:a,obj:r}}_parse(e,t){let n=this._resolveVariant(e,t);if(`issues`in n)return{data:e,issues:n.issues,typeOk:!1};let r=n.matched._parseFullSync(e,t);return r.issues.length===0?{data:r.data,issues:[],typeOk:!0}:{data:e,issues:r.issues,typeOk:!0}}async _parseAsync(e,t){let n=this._resolveVariant(e,t);if(`issues`in n)return{data:e,issues:n.issues,typeOk:!1};let r=await n.matched._parseFullAsync(e,t);return r.issues.length===0?{data:r.data,issues:[],typeOk:!0}:{data:e,issues:r.issues,typeOk:!0}}_toDescriptorImpl(){let e={};for(let[n,r]of this._map.entries())t(e,n,r.definition());return{...this._describeBase(),branches:e,discriminator:this._discriminator,kind:`variant`}}};export{a as VariantSchema};
1
+ import{SpellError as e}from"../errors.js";import{defineOwnProperty as t}from"../safe-object.js";import{ErrorCode as n}from"../types.js";import{Schema as r}from"../core.js";import{LiteralSchema as i}from"./literal.js";var a=class extends r{_map;_discriminator;get _kind(){return`variant`}constructor(t,n){let r=/* @__PURE__ */ new Map;for(let[a,o]of Object.entries(n)){let n=new i(a),s=o.shape[t];if(s&&(!(s instanceof i)||s.value!==a))throw new e(`s.discriminatedUnion(): branch "${a}" defines a conflicting discriminator schema for "${t}".`);let c={[t]:n};r.set(a,s?o:o.extend(c))}super(),this._discriminator=t,this._map=r}get discriminator(){return this._discriminator}get variantMap(){return new Map(this._map)}_resolveVariant(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return{issues:[{code:n.invalid_type,message:t.messages.variant.type(),path:[]}]};let r=e,i=r[this._discriminator],a=this._map.get(i);if(!a){let e=[...this._map.keys()];return{issues:[{code:n.invalid_variant,message:t.messages.variant.invalidDiscriminator({discriminator:this._discriminator,expected:e}),params:{discriminator:this._discriminator,expected:e},path:[]}]}}return{matched:a,obj:r}}_parse(e,t){let n=this._resolveVariant(e,t);if(`issues`in n)return{data:e,issues:n.issues,typeOk:!1};let r=n.matched._parseFullSync(e,t);return r.issues.length===0?{data:r.data,issues:[],typeOk:!0}:{data:e,issues:r.issues,typeOk:!0}}async _parseAsync(e,t){let n=this._resolveVariant(e,t);if(`issues`in n)return{data:e,issues:n.issues,typeOk:!1};let r=await n.matched._parseFullAsync(e,t);return r.issues.length===0?{data:r.data,issues:[],typeOk:!0}:{data:e,issues:r.issues,typeOk:!0}}_toDescriptorImpl(){let e={};for(let[n,r]of this._map.entries())t(e,n,r.definition());return{...this._describeBase(),branches:e,discriminator:this._discriminator,kind:`variant`}}};export{a as VariantSchema};
2
2
  //# sourceMappingURL=variant.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"variant.js","names":[],"sources":["../../src/schemas/variant.ts"],"sourcesContent":["import type { AnySchema, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\nimport { SpellError } from '../errors';\nimport { defineOwnProperty } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport type { InferObject, InferObjectInput, ObjectSchema, ObjectShape } from './object';\n\ntype VariantMap = Record<string, ObjectSchema<any>>;\ntype Simplify<T> = { [P in keyof T]: T[P] };\ntype InferVariantMap<K extends string, M extends VariantMap> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? InferObject<S> & { [P in K]: Tag }\n : never;\n}[keyof M & string];\ntype InferVariantInputMap<K extends string, M extends VariantMap> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? Simplify<InferObjectInput<S> & { [P in K]: Tag }>\n : never;\n}[keyof M & string];\n\nexport class VariantSchema<K extends string, M extends VariantMap> extends Schema<\n InferVariantMap<K, M>,\n InferVariantInputMap<K, M>\n> {\n private readonly _map: Map<string, VariantMap[string]>;\n private readonly _discriminator: K;\n\n protected override get _kind(): string {\n return 'variant';\n }\n\n constructor(discriminator: K, variantMap: M) {\n const map = new Map<string, VariantMap[string]>();\n\n for (const [tag, schema] of Object.entries(variantMap)) {\n const discriminatorSchema = new LiteralSchema(tag);\n const existingDiscriminator = schema.shape[discriminator];\n\n if (\n existingDiscriminator &&\n (!(existingDiscriminator instanceof LiteralSchema) || existingDiscriminator.value !== tag)\n ) {\n throw new SpellError(\n `s.discriminatedUnion(): branch \"${tag}\" defines a conflicting discriminator schema for \"${discriminator}\".`,\n );\n }\n\n const discriminatorShape = {\n [discriminator]: discriminatorSchema,\n } as unknown as Record<K, AnySchema>;\n\n map.set(tag, existingDiscriminator ? schema : schema.extend(discriminatorShape));\n }\n\n super();\n this._discriminator = discriminator;\n this._map = map;\n }\n\n /** The discriminator field key used to select the matching variant. */\n get discriminator(): K {\n return this._discriminator;\n }\n\n /** Map from discriminator tag value to the extended ObjectSchema for that variant. */\n get variantMap(): ReadonlyMap<string, VariantMap[string]> {\n return new Map(this._map);\n }\n\n private _resolveVariant(\n value: unknown,\n ctx: ParseContext,\n ): { matched: VariantMap[string]; obj: Record<string, unknown> } | { issues: Issue[] } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.variant.type(), path: [] }],\n };\n }\n\n const obj = value as Record<string, unknown>;\n const discValue = obj[this._discriminator] as string;\n const matched = this._map.get(discValue);\n\n if (!matched) {\n const expected = [...this._map.keys()];\n\n return {\n issues: [\n {\n code: ErrorCode.invalid_variant,\n message: ctx.messages.variant.invalidDiscriminator({\n discriminator: this._discriminator,\n expected,\n }),\n params: { discriminator: this._discriminator, expected },\n path: [],\n },\n ],\n };\n }\n\n return { matched, obj };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const resolved = this._resolveVariant(value, ctx);\n\n if ('issues' in resolved) return { data: value, issues: resolved.issues, typeOk: false };\n\n const result = resolved.matched._parseFullSync(value, ctx);\n\n return result.issues.length === 0\n ? { data: result.data, issues: [], typeOk: true }\n : { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const resolved = this._resolveVariant(value, ctx);\n\n if ('issues' in resolved) return { data: value, issues: resolved.issues, typeOk: false };\n\n const result = await resolved.matched._parseFullAsync(value, ctx);\n\n return result.issues.length === 0\n ? { data: result.data, issues: [], typeOk: true }\n : { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const branches: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of this._map.entries()) {\n defineOwnProperty(branches, key, schema.definition());\n }\n\n return { ...this._describeBase(), branches, discriminator: this._discriminator, kind: 'variant' };\n }\n}\n"],"mappings":"yNAqBA,IAAa,EAAb,cAA2E,CAGzE,CACA,KACA,eAEA,IAAuB,OAAgB,CACrC,MAAO,SACT,CAEA,YAAY,EAAkB,EAAe,CAC3C,IAAM,EAAM,IAAI,IAEhB,IAAK,GAAM,CAAC,EAAK,KAAW,OAAO,QAAQ,CAAU,EAAG,CACtD,IAAM,EAAsB,IAAI,EAAc,CAAG,EAC3C,EAAwB,EAAO,MAAM,GAE3C,GACE,IACC,EAAE,aAAiC,IAAkB,EAAsB,QAAU,GAEtF,MAAM,IAAI,EACR,mCAAmC,EAAI,oDAAoD,EAAc,GAC3G,EAGF,IAAM,EAAqB,EACxB,GAAgB,CACnB,EAEA,EAAI,IAAI,EAAK,EAAwB,EAAS,EAAO,OAAO,CAAkB,CAAC,CACjF,CAEA,MAAM,EACN,KAAK,eAAiB,EACtB,KAAK,KAAO,CACd,CAGA,IAAI,eAAmB,CACrB,OAAO,KAAK,cACd,CAGA,IAAI,YAAsD,CACxD,OAAO,IAAI,IAAI,KAAK,IAAI,CAC1B,CAEA,gBACE,EACA,EACqF,CACrF,GAAqB,OAAO,GAAU,WAAlC,GAA8C,MAAM,QAAQ,CAAK,EACnE,MAAO,CACL,OAAQ,CAAC,CAAE,KAAM,EAAU,aAAc,QAAS,EAAI,SAAS,QAAQ,KAAK,EAAG,KAAM,CAAC,CAAE,CAAC,CAC3F,EAGF,IAAM,EAAM,EACN,EAAY,EAAI,KAAK,gBACrB,EAAU,KAAK,KAAK,IAAI,CAAS,EAEvC,GAAI,CAAC,EAAS,CACZ,IAAM,EAAW,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,EAErC,MAAO,CACL,OAAQ,CACN,CACE,KAAM,EAAU,gBAChB,QAAS,EAAI,SAAS,QAAQ,qBAAqB,CACjD,cAAe,KAAK,eACpB,UACF,CAAC,EACD,OAAQ,CAAE,cAAe,KAAK,eAAgB,UAAS,EACvD,KAAM,CAAC,CACT,CACF,CACF,CACF,CAEA,MAAO,CAAE,UAAS,KAAI,CACxB,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAM,EAAW,KAAK,gBAAgB,EAAO,CAAG,EAEhD,GAAI,WAAY,EAAU,MAAO,CAAE,KAAM,EAAO,OAAQ,EAAS,OAAQ,OAAQ,EAAM,EAEvF,IAAM,EAAS,EAAS,QAAQ,eAAe,EAAO,CAAG,EAEzD,OAAO,EAAO,OAAO,SAAW,EAC5B,CAAE,KAAM,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAC9C,CAAE,KAAM,EAAO,OAAQ,EAAO,OAAQ,OAAQ,EAAK,CACzD,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAM,EAAW,KAAK,gBAAgB,EAAO,CAAG,EAEhD,GAAI,WAAY,EAAU,MAAO,CAAE,KAAM,EAAO,OAAQ,EAAS,OAAQ,OAAQ,EAAM,EAEvF,IAAM,EAAS,MAAM,EAAS,QAAQ,gBAAgB,EAAO,CAAG,EAEhE,OAAO,EAAO,OAAO,SAAW,EAC5B,CAAE,KAAM,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAC9C,CAAE,KAAM,EAAO,OAAQ,EAAO,OAAQ,OAAQ,EAAK,CACzD,CAEA,mBAAyD,CACvD,IAAM,EAA6C,CAAC,EAEpD,IAAK,GAAM,CAAC,EAAK,KAAW,KAAK,KAAK,QAAQ,EAC5C,EAAkB,EAAU,EAAK,EAAO,WAAW,CAAC,EAGtD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,WAAU,cAAe,KAAK,eAAgB,KAAM,SAAU,CAClG,CACF"}
1
+ {"version":3,"file":"variant.js","names":["VariantSchema","Schema","map","tag","schema","variantMap","discriminatorSchema","LiteralSchema","existingDiscriminator","discriminator","SpellError","discriminatorShape","value","ErrorCode","ctx","obj","discValue","matched","expected","resolved","result","branches","key","defineOwnProperty"],"sources":["../../src/schemas/variant.ts"],"sourcesContent":["import type { AnySchema, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\nimport { SpellError } from '../errors';\nimport { defineOwnProperty } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport type { InferObject, InferObjectInput, ObjectSchema, ObjectShape } from './object';\n\ntype VariantMap = Record<string, ObjectSchema<any>>;\ntype Simplify<T> = { [P in keyof T]: T[P] };\ntype InferVariantMap<K extends string, M extends VariantMap> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? InferObject<S> & { [P in K]: Tag }\n : never;\n}[keyof M & string];\ntype InferVariantInputMap<K extends string, M extends VariantMap> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? Simplify<InferObjectInput<S> & { [P in K]: Tag }>\n : never;\n}[keyof M & string];\n\nexport class VariantSchema<K extends string, M extends VariantMap> extends Schema<\n InferVariantMap<K, M>,\n InferVariantInputMap<K, M>\n> {\n private readonly _map: Map<string, VariantMap[string]>;\n private readonly _discriminator: K;\n\n protected override get _kind(): string {\n return 'variant';\n }\n\n constructor(discriminator: K, variantMap: M) {\n const map = new Map<string, VariantMap[string]>();\n\n for (const [tag, schema] of Object.entries(variantMap)) {\n const discriminatorSchema = new LiteralSchema(tag);\n const existingDiscriminator = schema.shape[discriminator];\n\n if (\n existingDiscriminator &&\n (!(existingDiscriminator instanceof LiteralSchema) || existingDiscriminator.value !== tag)\n ) {\n throw new SpellError(\n `s.discriminatedUnion(): branch \"${tag}\" defines a conflicting discriminator schema for \"${discriminator}\".`,\n );\n }\n\n const discriminatorShape = {\n [discriminator]: discriminatorSchema,\n } as unknown as Record<K, AnySchema>;\n\n map.set(tag, existingDiscriminator ? schema : schema.extend(discriminatorShape));\n }\n\n super();\n this._discriminator = discriminator;\n this._map = map;\n }\n\n /** The discriminator field key used to select the matching variant. */\n get discriminator(): K {\n return this._discriminator;\n }\n\n /** Map from discriminator tag value to the extended ObjectSchema for that variant. */\n get variantMap(): ReadonlyMap<string, VariantMap[string]> {\n return new Map(this._map);\n }\n\n private _resolveVariant(\n value: unknown,\n ctx: ParseContext,\n ): { matched: VariantMap[string]; obj: Record<string, unknown> } | { issues: Issue[] } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.variant.type(), path: [] }],\n };\n }\n\n const obj = value as Record<string, unknown>;\n const discValue = obj[this._discriminator] as string;\n const matched = this._map.get(discValue);\n\n if (!matched) {\n const expected = [...this._map.keys()];\n\n return {\n issues: [\n {\n code: ErrorCode.invalid_variant,\n message: ctx.messages.variant.invalidDiscriminator({\n discriminator: this._discriminator,\n expected,\n }),\n params: { discriminator: this._discriminator, expected },\n path: [],\n },\n ],\n };\n }\n\n return { matched, obj };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const resolved = this._resolveVariant(value, ctx);\n\n if ('issues' in resolved) return { data: value, issues: resolved.issues, typeOk: false };\n\n const result = resolved.matched._parseFullSync(value, ctx);\n\n return result.issues.length === 0\n ? { data: result.data, issues: [], typeOk: true }\n : { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const resolved = this._resolveVariant(value, ctx);\n\n if ('issues' in resolved) return { data: value, issues: resolved.issues, typeOk: false };\n\n const result = await resolved.matched._parseFullAsync(value, ctx);\n\n return result.issues.length === 0\n ? { data: result.data, issues: [], typeOk: true }\n : { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const branches: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of this._map.entries()) {\n defineOwnProperty(branches, key, schema.definition());\n }\n\n return { ...this._describeBase(), branches, discriminator: this._discriminator, kind: 'variant' };\n }\n}\n"],"mappings":"A,yNAqBA,IAAaA,EAAb,cAA2EC,CAGzE,CACA,KACA,eAEA,IAAuB,OAAgB,CACrC,MAAO,SACT,CAEA,YAAY,EAAkB,EAAe,CAC3C,IAAMC,kBAAM,IAAI,IAEhB,IAAK,GAAM,CAACC,EAAKC,KAAW,OAAO,QAAQC,CAAU,EAAG,CACtD,IAAMC,EAAsB,IAAIC,EAAcJ,CAAG,EAC3CK,EAAwBJ,EAAO,MAAMK,GAE3C,GACED,IACC,EAAEA,aAAiCD,IAAkBC,EAAsB,QAAUL,GAEtF,MAAM,IAAIO,EACR,mCAAmCP,EAAI,oDAAoDM,EAAc,GAC3G,EAGF,IAAME,EAAqB,EACxBF,GAAgBH,CACnB,EAEAJ,EAAI,IAAIC,EAAKK,EAAwBJ,EAASA,EAAO,OAAOO,CAAkB,CAAC,CACjF,CAEA,MAAM,EACN,KAAK,eAAiBF,EACtB,KAAK,KAAOP,CACd,CAGA,IAAI,eAAmB,CACrB,OAAO,KAAK,cACd,CAGA,IAAI,YAAsD,CACxD,OAAO,IAAI,IAAI,KAAK,IAAI,CAC1B,CAEA,gBACE,EACA,EACqF,CACrF,GAAqB,OAAOU,GAAU,WAAlCA,GAA8C,MAAM,QAAQA,CAAK,EACnE,MAAO,CACL,OAAQ,CAAC,CAAE,KAAMC,EAAU,aAAc,QAASC,EAAI,SAAS,QAAQ,KAAK,EAAG,KAAM,CAAC,CAAE,CAAC,CAC3F,EAGF,IAAMC,EAAMH,EACNI,EAAYD,EAAI,KAAK,gBACrBE,EAAU,KAAK,KAAK,IAAID,CAAS,EAEvC,GAAI,CAACC,EAAS,CACZ,IAAMC,EAAW,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,EAErC,MAAO,CACL,OAAQ,CACN,CACE,KAAML,EAAU,gBAChB,QAASC,EAAI,SAAS,QAAQ,qBAAqB,CACjD,cAAe,KAAK,eACpB,UACF,CAAC,EACD,OAAQ,CAAE,cAAe,KAAK,eAAgB,UAAS,EACvD,KAAM,CAAC,CACT,CACF,CACF,CACF,CAEA,MAAO,CAAE,UAAS,KAAI,CACxB,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMK,EAAW,KAAK,gBAAgBP,EAAOE,CAAG,EAEhD,GAAI,WAAYK,EAAU,MAAO,CAAE,KAAMP,EAAO,OAAQO,EAAS,OAAQ,OAAQ,EAAM,EAEvF,IAAMC,EAASD,EAAS,QAAQ,eAAeP,EAAOE,CAAG,EAEzD,OAAOM,EAAO,OAAO,SAAW,EAC5B,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAC9C,CAAE,KAAMR,EAAO,OAAQQ,EAAO,OAAQ,OAAQ,EAAK,CACzD,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMD,EAAW,KAAK,gBAAgBP,EAAOE,CAAG,EAEhD,GAAI,WAAYK,EAAU,MAAO,CAAE,KAAMP,EAAO,OAAQO,EAAS,OAAQ,OAAQ,EAAM,EAEvF,IAAMC,EAAS,MAAMD,EAAS,QAAQ,gBAAgBP,EAAOE,CAAG,EAEhE,OAAOM,EAAO,OAAO,SAAW,EAC5B,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAC9C,CAAE,KAAMR,EAAO,OAAQQ,EAAO,OAAQ,OAAQ,EAAK,CACzD,CAEA,mBAAyD,CACvD,IAAMC,EAA6C,CAAC,EAEpD,IAAK,GAAM,CAACC,EAAKlB,KAAW,KAAK,KAAK,QAAQ,EAC5CmB,EAAkBF,EAAUC,EAAKlB,EAAO,WAAW,CAAC,EAGtD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,WAAU,cAAe,KAAK,eAAgB,KAAM,SAAU,CAClG,CACF,E"}