@cleverbrush/schema 1.1.10 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +1314 -101
  2. package/dist/builders/AnySchemaBuilder.d.ts +55 -15
  3. package/dist/builders/AnySchemaBuilder.js +2 -112
  4. package/dist/builders/AnySchemaBuilder.js.map +1 -0
  5. package/dist/builders/ArraySchemaBuilder.d.ts +124 -23
  6. package/dist/builders/ArraySchemaBuilder.js +2 -284
  7. package/dist/builders/ArraySchemaBuilder.js.map +1 -0
  8. package/dist/builders/BooleanSchemaBuilder.d.ts +95 -20
  9. package/dist/builders/BooleanSchemaBuilder.js +2 -150
  10. package/dist/builders/BooleanSchemaBuilder.js.map +1 -0
  11. package/dist/builders/DateSchemaBuilder.d.ts +135 -37
  12. package/dist/builders/DateSchemaBuilder.js +2 -433
  13. package/dist/builders/DateSchemaBuilder.js.map +1 -0
  14. package/dist/builders/ExternSchemaBuilder.d.ts +200 -0
  15. package/dist/builders/ExternSchemaBuilder.js +2 -0
  16. package/dist/builders/ExternSchemaBuilder.js.map +1 -0
  17. package/dist/builders/FunctionSchemaBuilder.d.ts +58 -15
  18. package/dist/builders/FunctionSchemaBuilder.js +2 -113
  19. package/dist/builders/FunctionSchemaBuilder.js.map +1 -0
  20. package/dist/builders/LazySchemaBuilder.d.ts +167 -0
  21. package/dist/builders/NullSchemaBuilder.d.ts +162 -0
  22. package/dist/builders/NumberSchemaBuilder.d.ts +143 -31
  23. package/dist/builders/NumberSchemaBuilder.js +2 -386
  24. package/dist/builders/NumberSchemaBuilder.js.map +1 -0
  25. package/dist/builders/ObjectSchemaBuilder.d.ts +266 -61
  26. package/dist/builders/ObjectSchemaBuilder.js +2 -589
  27. package/dist/builders/ObjectSchemaBuilder.js.map +1 -0
  28. package/dist/builders/PropertyValidationResult.d.ts +68 -0
  29. package/dist/builders/RecordSchemaBuilder.d.ts +341 -0
  30. package/dist/builders/RecordSchemaBuilder.js +2 -0
  31. package/dist/builders/RecordSchemaBuilder.js.map +1 -0
  32. package/dist/builders/SchemaBuilder.d.ts +818 -30
  33. package/dist/builders/StringSchemaBuilder.d.ts +152 -37
  34. package/dist/builders/StringSchemaBuilder.js +2 -414
  35. package/dist/builders/StringSchemaBuilder.js.map +1 -0
  36. package/dist/builders/TupleSchemaBuilder.d.ts +248 -0
  37. package/dist/builders/TupleSchemaBuilder.js +2 -0
  38. package/dist/builders/TupleSchemaBuilder.js.map +1 -0
  39. package/dist/builders/UnionSchemaBuilder.d.ts +133 -39
  40. package/dist/builders/UnionSchemaBuilder.js +2 -216
  41. package/dist/builders/UnionSchemaBuilder.js.map +1 -0
  42. package/dist/chunk-BFCMDDTX.js +2 -0
  43. package/dist/chunk-BFCMDDTX.js.map +1 -0
  44. package/dist/chunk-CTP4RHDG.js +2 -0
  45. package/dist/chunk-CTP4RHDG.js.map +1 -0
  46. package/dist/chunk-EUQ5AE3H.js +2 -0
  47. package/dist/chunk-EUQ5AE3H.js.map +1 -0
  48. package/dist/chunk-FWUEUW2N.js +2 -0
  49. package/dist/chunk-FWUEUW2N.js.map +1 -0
  50. package/dist/chunk-IJ6FO37G.js +2 -0
  51. package/dist/chunk-IJ6FO37G.js.map +1 -0
  52. package/dist/chunk-KESLT5EE.js +2 -0
  53. package/dist/chunk-KESLT5EE.js.map +1 -0
  54. package/dist/chunk-KFTO7TMB.js +2 -0
  55. package/dist/chunk-KFTO7TMB.js.map +1 -0
  56. package/dist/chunk-MKAYFPAR.js +2 -0
  57. package/dist/chunk-MKAYFPAR.js.map +1 -0
  58. package/dist/chunk-NXPH3ZUW.js +2 -0
  59. package/dist/chunk-NXPH3ZUW.js.map +1 -0
  60. package/dist/chunk-S5TC6NSU.js +2 -0
  61. package/dist/chunk-S5TC6NSU.js.map +1 -0
  62. package/dist/chunk-YWBNVHR6.js +2 -0
  63. package/dist/chunk-YWBNVHR6.js.map +1 -0
  64. package/dist/chunk-Z7QZ7IXT.js +2 -0
  65. package/dist/chunk-Z7QZ7IXT.js.map +1 -0
  66. package/dist/chunk-ZAN4ZHCJ.js +2 -0
  67. package/dist/chunk-ZAN4ZHCJ.js.map +1 -0
  68. package/dist/chunk-ZUPYV5TI.js +2 -0
  69. package/dist/chunk-ZUPYV5TI.js.map +1 -0
  70. package/dist/core.d.ts +23 -0
  71. package/dist/core.js +2 -0
  72. package/dist/core.js.map +1 -0
  73. package/dist/extension.d.ts +413 -0
  74. package/dist/extensions/array.d.ts +112 -0
  75. package/dist/extensions/enum.d.ts +190 -0
  76. package/dist/extensions/index.d.ts +108 -0
  77. package/dist/extensions/nullable.d.ts +26 -0
  78. package/dist/extensions/number.d.ts +228 -0
  79. package/dist/extensions/string.d.ts +332 -0
  80. package/dist/extensions/util.d.ts +45 -0
  81. package/dist/index.d.ts +7 -20
  82. package/dist/index.js +2 -19
  83. package/dist/index.js.map +1 -0
  84. package/dist/utils/transaction.d.ts +27 -4
  85. package/package.json +74 -6
  86. package/dist/builders/SchemaBuilder.js +0 -275
  87. package/dist/utils/transaction.js +0 -178
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builders/TupleSchemaBuilder.ts"],"sourcesContent":["import type {\n ObjectSchemaBuilder,\n ObjectSchemaValidationResult\n} from './ObjectSchemaBuilder.js';\nimport {\n type BRAND,\n createHybridErrorArray,\n type InferType,\n type NestedValidationResult,\n type PropertyDescriptor,\n SchemaBuilder,\n SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR,\n type ValidationContext,\n type ValidationErrorMessageProvider,\n type ValidationResult\n} from './SchemaBuilder.js';\nimport type {\n UnionSchemaBuilder,\n UnionSchemaValidationResult\n} from './UnionSchemaBuilder.js';\n\n/**\n * Maps a tuple of schema builders to a tuple of their per-position\n * validation result types.\n * Union schema elements get `UnionSchemaValidationResult`,\n * object schema elements get `ObjectSchemaValidationResult`,\n * other types get `ValidationResult`.\n */\nexport type TupleElementValidationResults<\n TElements extends readonly SchemaBuilder<any, any, any, any, any>[]\n> = {\n [K in keyof TElements]: TElements[K] extends UnionSchemaBuilder<\n infer UOptions extends readonly SchemaBuilder<\n any,\n any,\n any,\n any,\n any\n >[],\n any,\n any\n >\n ? UnionSchemaValidationResult<InferType<TElements[K]>, UOptions>\n : TElements[K] extends ObjectSchemaBuilder<any, any, any, any, any>\n ? ObjectSchemaValidationResult<InferType<TElements[K]>, TElements[K]>\n : ValidationResult<InferType<TElements[K]>>;\n};\n\n/**\n * Validation result type returned by `TupleSchemaBuilder.validate()`.\n * Extends `ValidationResult` with `getNestedErrors` for root-level tuple\n * errors and per-position validation results.\n */\nexport type TupleSchemaValidationResult<\n TResult,\n TElements extends readonly SchemaBuilder<any, any, any, any, any>[]\n> = ValidationResult<TResult> & {\n /**\n * Returns root-level tuple validation errors combined with\n * per-position validation results.\n * The returned value has both `NestedValidationResult` properties\n * (`errors`, `isValid`, `descriptor`, `seenValue`) and indexed\n * position results (`[0]`, `[1]`, etc.).\n */\n getNestedErrors(): TupleElementValidationResults<TElements> &\n NestedValidationResult<any, any, any>;\n};\n\ntype TupleSchemaBuilderCreateProps<\n TElements extends readonly SchemaBuilder<any, any, any, any, any>[],\n TRestSchema extends\n | SchemaBuilder<any, any, any, any, any>\n | undefined = undefined,\n R extends boolean = true,\n N extends boolean = false\n> = Partial<\n ReturnType<\n TupleSchemaBuilder<\n TElements,\n R,\n N,\n undefined,\n false,\n {},\n TRestSchema\n >['introspect']\n >\n>;\n\n/**\n * Fixed-length array schema builder with per-position type validation.\n * Similar to TypeScript's tuple types — each element at a specific array index\n * is validated against its own schema.\n *\n * Use it when you need to validate function arguments, CSV rows, coordinate\n * pairs, structured event payloads, or any other fixed-structure array.\n *\n * **NOTE** this class is exported only to give opportunity to extend it\n * by inheriting. It is not recommended to create an instance of this class\n * directly. Use {@link tuple | tuple()} function instead.\n *\n * @example\n * ```ts\n * const schema = tuple([string(), number(), boolean()]);\n * // Inferred TypeScript type: [string, number, boolean]\n *\n * schema.validate(['hello', 42, true]);\n * // result.valid === true\n * // result.object === ['hello', 42, true]\n *\n * schema.validate(['hello', 42]);\n * // result.valid === false (too few elements)\n *\n * schema.validate(['hello', 'oops', true]);\n * // result.valid === false (wrong type at position 1)\n * ```\n *\n * @example\n * ```ts\n * // Tuple with variadic rest elements\n * const schema = tuple([string(), number()]).rest(boolean());\n * // Inferred TypeScript type: [string, number, ...boolean[]]\n *\n * schema.validate(['hello', 42, true, false]);\n * // result.valid === true — any number of extra booleans allowed\n * ```\n *\n * @example\n * ```ts\n * // Nested tuple combining with object schemas\n * const point = tuple([number(), number()]);\n * const segment = tuple([point, point]);\n *\n * segment.validate([[0, 0], [10, 20]]);\n * // result.valid === true\n * ```\n *\n * @see {@link tuple}\n */\nexport class TupleSchemaBuilder<\n TElements extends readonly SchemaBuilder<any, any, any, any, any>[],\n TRequired extends boolean = true,\n TNullable extends boolean = false,\n TExplicitType = undefined,\n THasDefault extends boolean = false,\n TExtensions = {},\n TRestSchema extends\n | SchemaBuilder<any, any, any, any, any>\n | undefined = undefined,\n TResult = TExplicitType extends undefined\n ? TRestSchema extends SchemaBuilder<any, any, any, any, any>\n ? [\n ...{ [K in keyof TElements]: InferType<TElements[K]> },\n ...Array<InferType<TRestSchema>>\n ]\n : { [K in keyof TElements]: InferType<TElements[K]> }\n : TExplicitType\n> extends SchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n> {\n #elements!: TElements;\n #restSchema:\n | (TRestSchema & SchemaBuilder<any, any, any, any, any>)\n | undefined;\n\n /**\n * @hidden\n */\n public static create(\n props: TupleSchemaBuilderCreateProps<any, any, any, any>\n ) {\n return new TupleSchemaBuilder({\n type: 'tuple',\n ...props\n } as any);\n }\n\n protected constructor(\n props: TupleSchemaBuilderCreateProps<\n TElements,\n TRestSchema,\n TRequired,\n TNullable\n >\n ) {\n super(props as any);\n\n if (Array.isArray(props.elements)) {\n this.#elements = props.elements as TElements;\n } else {\n this.#elements = [] as unknown as TElements;\n }\n\n if (props.restSchema instanceof SchemaBuilder) {\n this.#restSchema = props.restSchema as any;\n }\n }\n\n /**\n * @inheritdoc\n */\n public hasType<T>(\n _notUsed?: T\n ): TupleSchemaBuilder<\n TElements,\n true,\n TNullable,\n T,\n THasDefault,\n TExtensions,\n TRestSchema\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n /**\n * @inheritdoc\n */\n public clearHasType(): TupleSchemaBuilder<\n TElements,\n TRequired,\n TNullable,\n undefined,\n THasDefault,\n TExtensions,\n TRestSchema\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n #getLengthError(arr: any[]): string | null {\n if (arr.length < this.#elements.length) {\n const n = this.#elements.length;\n return `expected a tuple with at least ${n} element${n === 1 ? '' : 's'}, got ${arr.length}`;\n }\n if (\n !(this.#restSchema instanceof SchemaBuilder) &&\n arr.length !== this.#elements.length\n ) {\n const n = this.#elements.length;\n return `expected a tuple of exactly ${n} element${n === 1 ? '' : 's'}, got ${arr.length}`;\n }\n return null;\n }\n\n #createValidationSetup(\n object: TResult,\n superResult: ReturnType<TupleSchemaBuilder<any, any>['preValidateSync']>\n ) {\n const {\n valid,\n context: prevalidationContext,\n errors,\n transaction: preValidationTransaction\n } = superResult;\n\n const selfDescriptor: PropertyDescriptor<any, any, any> = {\n [SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR]: {\n setValue: () => false,\n getValue: (obj: any) => ({\n success: true,\n value: obj\n }),\n getSchema: () => this,\n parent: undefined\n }\n };\n\n const rootErrors: string[] = [];\n const elementResults = createHybridErrorArray(\n [] as any[],\n () => object,\n () => rootErrors,\n () => selfDescriptor[SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR]\n );\n const getNestedErrors = (() => elementResults) as any;\n\n if (!valid) {\n rootErrors.push(\n ...(errors || []).map((e: any) => e.message || String(e))\n );\n return {\n needsElementValidation: false as const,\n result: {\n valid,\n errors,\n getNestedErrors\n } as TupleSchemaValidationResult<TResult, TElements>\n };\n }\n\n const {\n object: { validatedObject: objToValidate }\n } = preValidationTransaction!;\n\n if (\n (typeof objToValidate === 'undefined' && !this.isRequired) ||\n (objToValidate === null && (!this.isRequired || this.isNullable))\n ) {\n return {\n needsElementValidation: false as const,\n result: {\n valid: true,\n object: objToValidate,\n getNestedErrors\n } as TupleSchemaValidationResult<TResult, TElements>\n };\n }\n\n if (!Array.isArray(objToValidate)) {\n rootErrors.push('array expected');\n return {\n needsElementValidation: false as const,\n result: {\n valid: false,\n errors: [{ message: 'array expected' }],\n getNestedErrors\n } as TupleSchemaValidationResult<TResult, TElements>\n };\n }\n\n return {\n needsElementValidation: true as const,\n objToValidate,\n prevalidationContext,\n getNestedErrors,\n elementResults,\n rootErrors\n };\n }\n\n #assembleDoNotStopResults(\n results: any[],\n elementResults: any,\n getNestedErrors: any\n ) {\n let allValid = true;\n\n for (let i = 0; i < results.length; i++) {\n if (!results[i]?.valid) {\n allValid = false;\n }\n elementResults[i] = results[i] as any;\n }\n\n return Object.assign(\n {\n valid: allValid,\n getNestedErrors\n },\n allValid\n ? {}\n : {\n errors: results\n .map(r => r?.errors)\n .filter(r => r)\n .flatMap(e =>\n e?.map((r: any) => ({\n ...r\n }))\n ) as any\n },\n allValid\n ? {\n object: results.map(r => r?.object)\n }\n : {}\n ) as any;\n }\n\n /**\n * Performs synchronous validation of the schema over `object`. {@inheritDoc SchemaBuilder.validate}\n */\n public validate(\n object: TResult,\n context?: ValidationContext\n ): TupleSchemaValidationResult<TResult, TElements> {\n return super.validate(object, context) as TupleSchemaValidationResult<\n TResult,\n TElements\n >;\n }\n\n /**\n * Performs asynchronous validation of the schema over `object`. {@inheritDoc SchemaBuilder.validateAsync}\n */\n public async validateAsync(\n object: TResult,\n context?: ValidationContext\n ): Promise<TupleSchemaValidationResult<TResult, TElements>> {\n return super.validateAsync(object, context) as Promise<\n TupleSchemaValidationResult<TResult, TElements>\n >;\n }\n\n /**\n * Performs synchronous validation of the schema over `object`.\n * Throws if any preprocessor, validator, or error message provider returns a Promise.\n * @param context Optional `ValidationContext` settings.\n */\n protected _validate(\n object: TResult,\n context?: ValidationContext\n ): TupleSchemaValidationResult<TResult, TElements> {\n // Fast path: no preprocessors/validators, stop-on-first-error mode\n if (this.canSkipPreValidation && !context?.doNotStopOnFirstError) {\n // Handle undefined / null\n if (typeof object === 'undefined' || object === null) {\n if (typeof object === 'undefined' && this.hasDefault) {\n object = this.resolveDefaultValue();\n } else if (\n !this.isRequired ||\n (object === null && this.isNullable)\n ) {\n const self = this;\n return {\n valid: true,\n object,\n getNestedErrors() {\n return self\n .#validateTupleFull(object, context)\n .getNestedErrors();\n }\n } as any;\n } else {\n return this.#validateTupleFull(object, context);\n }\n }\n\n if (!Array.isArray(object)) {\n return this.#validateTupleFull(object, context);\n }\n\n const lengthError = this.#getLengthError(object as any[]);\n if (lengthError) {\n const self = this;\n return {\n valid: false,\n errors: [{ message: lengthError }],\n getNestedErrors() {\n return self\n .#validateTupleFull(object, context)\n .getNestedErrors();\n }\n } as any;\n }\n\n const resultArray = new Array((object as any[]).length);\n\n for (let i = 0; i < this.#elements.length; i++) {\n const result = this.#elements[i].validate((object as any)[i]);\n if (!result.valid) {\n const self = this;\n return {\n valid: false,\n errors:\n result.errors && result.errors.length > 0\n ? [result.errors[0]]\n : [],\n getNestedErrors() {\n return self\n .#validateTupleFull(object, context)\n .getNestedErrors();\n }\n } as any;\n }\n resultArray[i] = result.object;\n }\n\n if (this.#restSchema instanceof SchemaBuilder) {\n for (\n let i = this.#elements.length;\n i < (object as any[]).length;\n i++\n ) {\n const result = this.#restSchema.validate(\n (object as any)[i]\n );\n if (!result.valid) {\n const self = this;\n return {\n valid: false,\n errors:\n result.errors && result.errors.length > 0\n ? [result.errors[0]]\n : [],\n getNestedErrors() {\n return self\n .#validateTupleFull(object, context)\n .getNestedErrors();\n }\n } as any;\n }\n resultArray[i] = result.object;\n }\n }\n\n const self = this;\n return {\n valid: true,\n object: resultArray as TResult,\n getNestedErrors() {\n return self\n .#validateTupleFull(object, context)\n .getNestedErrors();\n }\n } as any;\n }\n\n return this.#validateTupleFull(object, context);\n }\n\n /**\n * Full validation path with complete setup, error handling, and nested\n * error support.\n */\n #validateTupleFull(\n object: TResult,\n context?: ValidationContext\n ): TupleSchemaValidationResult<TResult, TElements> {\n const setup = this.#createValidationSetup(\n object,\n this.preValidateSync(object, context)\n );\n\n if (!setup.needsElementValidation) return setup.result;\n\n const {\n objToValidate,\n prevalidationContext,\n getNestedErrors,\n elementResults,\n rootErrors\n } = setup;\n\n const lengthError = this.#getLengthError(objToValidate);\n if (lengthError) {\n rootErrors.push(lengthError);\n return {\n valid: false,\n errors: [{ message: lengthError }],\n getNestedErrors\n };\n }\n\n const totalLength =\n this.#restSchema instanceof SchemaBuilder\n ? objToValidate.length\n : this.#elements.length;\n\n if (prevalidationContext.doNotStopOnFirstError) {\n const results: any[] = new Array(totalLength);\n\n for (let i = 0; i < this.#elements.length; i++) {\n results[i] = this.#elements[i].validate(objToValidate[i], {\n ...prevalidationContext\n });\n }\n\n if (this.#restSchema instanceof SchemaBuilder) {\n for (\n let i = this.#elements.length;\n i < objToValidate.length;\n i++\n ) {\n results[i] = this.#restSchema.validate(objToValidate[i], {\n ...prevalidationContext\n });\n }\n }\n\n return this.#assembleDoNotStopResults(\n results,\n elementResults,\n getNestedErrors\n );\n } else {\n const resultArray = new Array(totalLength);\n\n for (let i = 0; i < this.#elements.length; i++) {\n const result = this.#elements[i].validate(objToValidate[i], {\n ...prevalidationContext\n });\n elementResults[i] = result as any;\n if (result.valid) {\n resultArray[i] = result.object;\n } else {\n return {\n valid: false,\n errors:\n Array.isArray(result.errors) &&\n result.errors.length > 0\n ? [result.errors[0]]\n : [],\n getNestedErrors\n };\n }\n }\n\n if (this.#restSchema instanceof SchemaBuilder) {\n for (\n let i = this.#elements.length;\n i < objToValidate.length;\n i++\n ) {\n const result = this.#restSchema.validate(objToValidate[i], {\n ...prevalidationContext\n });\n elementResults[i] = result as any;\n if (result.valid) {\n resultArray[i] = result.object;\n } else {\n return {\n valid: false,\n errors:\n Array.isArray(result.errors) &&\n result.errors.length > 0\n ? [result.errors[0]]\n : [],\n getNestedErrors\n };\n }\n }\n }\n\n return {\n valid: true,\n object: resultArray as TResult,\n getNestedErrors\n };\n }\n }\n\n /**\n * Performs async validation of the schema over `object`.\n * Supports async preprocessors, validators, and error message providers.\n * @param context Optional `ValidationContext` settings.\n */\n protected async _validateAsync(\n object: TResult,\n context?: ValidationContext\n ): Promise<TupleSchemaValidationResult<TResult, TElements>> {\n const setup = this.#createValidationSetup(\n object,\n await super.preValidateAsync(object, context)\n );\n\n if (!setup.needsElementValidation) return setup.result;\n\n const {\n objToValidate,\n prevalidationContext,\n getNestedErrors,\n elementResults,\n rootErrors\n } = setup;\n\n const lengthError = this.#getLengthError(objToValidate);\n if (lengthError) {\n rootErrors.push(lengthError);\n return {\n valid: false,\n errors: [{ message: lengthError }],\n getNestedErrors\n };\n }\n\n const totalLength =\n this.#restSchema instanceof SchemaBuilder\n ? objToValidate.length\n : this.#elements.length;\n\n if (prevalidationContext.doNotStopOnFirstError) {\n const promises: Promise<any>[] = new Array(totalLength);\n\n for (let i = 0; i < this.#elements.length; i++) {\n promises[i] = this.#elements[i].validateAsync(\n objToValidate[i],\n { ...prevalidationContext }\n );\n }\n\n if (this.#restSchema instanceof SchemaBuilder) {\n for (\n let i = this.#elements.length;\n i < objToValidate.length;\n i++\n ) {\n promises[i] = this.#restSchema.validateAsync(\n objToValidate[i],\n { ...prevalidationContext }\n );\n }\n }\n\n const results = await Promise.all(promises);\n return this.#assembleDoNotStopResults(\n results,\n elementResults,\n getNestedErrors\n );\n } else {\n const resultArray = new Array(totalLength);\n\n for (let i = 0; i < this.#elements.length; i++) {\n const result = await this.#elements[i].validateAsync(\n objToValidate[i],\n { ...prevalidationContext }\n );\n elementResults[i] = result as any;\n if (result.valid) {\n resultArray[i] = result.object;\n } else {\n return {\n valid: false,\n errors:\n Array.isArray(result.errors) &&\n result.errors.length > 0\n ? [result.errors[0]]\n : [],\n getNestedErrors\n };\n }\n }\n\n if (this.#restSchema instanceof SchemaBuilder) {\n for (\n let i = this.#elements.length;\n i < objToValidate.length;\n i++\n ) {\n const result = await this.#restSchema.validateAsync(\n objToValidate[i],\n { ...prevalidationContext }\n );\n elementResults[i] = result as any;\n if (result.valid) {\n resultArray[i] = result.object;\n } else {\n return {\n valid: false,\n errors:\n Array.isArray(result.errors) &&\n result.errors.length > 0\n ? [result.errors[0]]\n : [],\n getNestedErrors\n };\n }\n }\n }\n\n return {\n valid: true,\n object: resultArray as TResult,\n getNestedErrors\n };\n }\n }\n\n /**\n * @hidden\n */\n protected createFromProps<TReq extends boolean>(\n props: TupleSchemaBuilderCreateProps<TElements, TRestSchema, TReq>\n ): this {\n return TupleSchemaBuilder.create(props as any) as any;\n }\n\n /**\n * @hidden\n */\n public required(\n errorMessage?: ValidationErrorMessageProvider\n ): TupleSchemaBuilder<\n TElements,\n true,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions,\n TRestSchema\n > &\n TExtensions {\n return super.required(errorMessage);\n }\n\n /**\n * @hidden\n */\n public optional(): TupleSchemaBuilder<\n TElements,\n false,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions,\n TRestSchema\n > &\n TExtensions {\n return super.optional();\n }\n\n /**\n * @hidden\n */\n public default(\n value: TResult | (() => TResult)\n ): TupleSchemaBuilder<\n TElements,\n true,\n TNullable,\n TExplicitType,\n true,\n TExtensions,\n TRestSchema\n > &\n TExtensions {\n return super.default(value) as any;\n }\n\n /**\n * @hidden\n */\n public clearDefault(): TupleSchemaBuilder<\n TElements,\n TRequired,\n TNullable,\n TExplicitType,\n false,\n TExtensions,\n TRestSchema\n > &\n TExtensions {\n return super.clearDefault() as any;\n }\n\n /**\n * @hidden\n */\n public brand<TBrand extends string | symbol>(\n _name?: TBrand\n ): TupleSchemaBuilder<\n TElements,\n TRequired,\n TNullable,\n TResult & { readonly [K in BRAND]: TBrand },\n THasDefault,\n TExtensions,\n TRestSchema\n > &\n TExtensions {\n return super.brand(_name);\n }\n\n public introspect() {\n return {\n ...super.introspect(),\n /**\n * Per-position element schemas defining the fixed tuple structure.\n */\n elements: this.#elements,\n /**\n * Optional schema for elements beyond the fixed positions.\n * When set, additional elements are validated against this schema.\n * Mirrors TypeScript's rest element syntax: `[string, number, ...boolean[]]`.\n */\n restSchema: this.#restSchema\n };\n }\n\n /**\n * Sets a schema that all elements beyond the fixed positions must satisfy.\n * Mirrors TypeScript's variadic tuple tail: `[string, number, ...boolean[]]`.\n *\n * When set, the tuple length must be at least equal to the number of fixed\n * elements, and any additional elements are validated against `schema`.\n * When not set, the tuple length must be exactly equal to the fixed count.\n *\n * @param schema Schema that extra array elements must satisfy.\n *\n * @example\n * ```ts\n * const schema = tuple([string(), number()]).rest(boolean());\n * // Inferred TypeScript type: [string, number, ...boolean[]]\n *\n * schema.validate(['hello', 42]); // valid\n * schema.validate(['hello', 42, true]); // valid\n * schema.validate(['hello', 42, true, false]); // valid\n * schema.validate(['hello', 42, 'extra']); // invalid — 'extra' not boolean\n * ```\n */\n public rest<TSchema extends SchemaBuilder<any, any, any, any, any>>(\n schema: TSchema\n ): TupleSchemaBuilder<\n TElements,\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions,\n TSchema\n > &\n TExtensions {\n return TupleSchemaBuilder.create({\n ...this.introspect(),\n restSchema: schema\n } as any) as any;\n }\n\n /**\n * Removes the rest schema set by `rest()`. After this call, the tuple\n * length must be exactly equal to the number of fixed element schemas.\n */\n public clearRest(): TupleSchemaBuilder<\n TElements,\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions,\n undefined\n > &\n TExtensions {\n return TupleSchemaBuilder.create({\n ...this.introspect(),\n restSchema: undefined\n } as any) as any;\n }\n\n /**\n * @hidden\n */\n public nullable(): TupleSchemaBuilder<\n TElements,\n TRequired,\n true,\n TExplicitType,\n THasDefault,\n TExtensions,\n TRestSchema\n > &\n TExtensions {\n return super.nullable() as any;\n }\n\n /**\n * @hidden\n */\n public notNullable(): TupleSchemaBuilder<\n TElements,\n TRequired,\n false,\n TExplicitType,\n THasDefault,\n TExtensions,\n TRestSchema\n > &\n TExtensions {\n return super.notNullable() as any;\n }\n}\n\n/**\n * Creates a fixed-length array schema (tuple) where each element at a\n * specific index is validated against its own schema.\n *\n * @param elements Array of per-position schemas. The length of this array\n * determines the required tuple length (unless `.rest()` is used).\n *\n * @example\n * ```ts\n * import { tuple, string, number, boolean } from '@cleverbrush/schema';\n *\n * const schema = tuple([string(), number(), boolean()]);\n * // Inferred TypeScript type: [string, number, boolean]\n *\n * schema.validate(['hello', 42, true]); // valid\n * schema.validate(['hello', 42]); // invalid — too few elements\n * schema.validate(['hello', 'oops', true]); // invalid — wrong type at [1]\n * ```\n *\n * @example\n * ```ts\n * // 2-D coordinate pair\n * const point = tuple([number(), number()]);\n * const result = point.validate([10.5, 20.3]);\n * // result.valid === true\n * // result.object === [10.5, 20.3]\n * ```\n *\n * @example\n * ```ts\n * // Optional tuple with default value\n * const schema = tuple([string(), number()])\n * .optional()\n * .default(() => ['', 0]);\n * ```\n */\nexport const tuple = <\n const TElements extends readonly SchemaBuilder<any, any, any, any, any>[]\n>(\n elements: [...TElements]\n) =>\n TupleSchemaBuilder.create({\n isRequired: true,\n elements\n }) as unknown as TupleSchemaBuilder<TElements, true>;\n"],"mappings":"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","names":["TupleSchemaBuilder","_TupleSchemaBuilder","SchemaBuilder","#elements","#restSchema","props","_notUsed","#getLengthError","arr","n","#createValidationSetup","object","superResult","valid","prevalidationContext","errors","preValidationTransaction","selfDescriptor","SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR","obj","rootErrors","elementResults","createHybridErrorArray","getNestedErrors","e","objToValidate","#assembleDoNotStopResults","results","allValid","i","r","context","self","#validateTupleFull","lengthError","resultArray","result","setup","totalLength","promises","errorMessage","value","_name","schema","tuple","elements"]}
@@ -0,0 +1,2 @@
1
+ import{a as u,f as l}from"./chunk-CTP4RHDG.js";var d=r=>{if(typeof r>"u")return r;if(typeof r=="string"){let e=Date.parse(r);return Number.isNaN(e)?r:new Date(e)}return r},T=r=>{if(typeof r>"u")return r;if(typeof r=="number"){let e=new Date(r);return Number.isNaN(e.getTime())?r:e}return r},o=class r extends l{#e;#c=function(){return`is expected to be after ${this.#e} (${this.#e?.getTime()})`};#i=this.#c;#r;#h=function(){return`is expected to be before ${this.#r} (${this.#r?.getTime()})`};#n=this.#h;#t;#m=function(){return`is expected to be equal ${this.#t} (${this.#t?.getTime()})`};#u=this.#m;#o=!1;#f=function(){return"is expected to be in future"};#l=this.#f;#d=!1;#p=function(){return"is expected to be in past"};#T=this.#p;#s=!1;#a=!1;#E=!0;static create(e){return new r({type:"date",...e})}constructor(e){super(e),e.min instanceof Date&&(this.#e=e.min),this.#i=this.assureValidationErrorMessageProvider(e.minValidationErrorMessageProvider,this.#c),e.max instanceof Date&&(this.#r=e.max),this.#n=this.assureValidationErrorMessageProvider(e.maxValidationErrorMessageProvider,this.#h),typeof e.ensureIsInFuture=="boolean"&&(this.#o=e.ensureIsInFuture),this.#l=this.assureValidationErrorMessageProvider(e.ensureIsInFutureValidationErrorMessageProvider,this.#f),typeof e.ensureIsInPast=="boolean"&&(this.#d=e.ensureIsInPast),this.#T=this.assureValidationErrorMessageProvider(e.ensureIsInPastValidationErrorMessageProvider,this.#p),typeof e.parseFromJson=="boolean"&&(this.#s=e.parseFromJson),typeof e.parseFromEpoch=="boolean"&&(this.#a=e.parseFromEpoch),(e.equalsTo instanceof Date||typeof e.equalsTo>"u")&&(this.#t=e.equalsTo),this.#u=this.assureValidationErrorMessageProvider(e.equalsToValidationErrorMessageProvider,this.#m),this.#E=this.canSkipPreValidation&&!this.#s&&!this.#a}introspect(){return{...super.introspect(),min:this.#e,minValidationErrorMessageProvider:this.#i,max:this.#r,maxValidationErrorMessageProvider:this.#n,ensureIsInFuture:this.#o,ensureIsInFutureValidationErrorMessageProvider:this.#l,ensureIsInPast:this.#d,ensureIsInPastValidationErrorMessageProvider:this.#T,equalsTo:this.#t,equalsToValidationErrorMessageProvider:this.#u,parseFromEpoch:this.#a,parseFromJson:this.#s,preprocessors:this.preprocessors,validators:this.validators}}hasType(e){return this.createFromProps({...this.introspect()})}clearHasType(){return this.createFromProps({...this.introspect()})}#R(e){return e instanceof Date?typeof this.#t<"u"&&e.getTime()!==this.#t.getTime()?{provider:this.#u}:this.#o&&e<=new Date?{provider:this.#l}:this.#d&&e>=new Date?{provider:this.#T}:typeof this.#e<"u"&&e<this.#e?{provider:this.#i}:typeof this.#r<"u"&&e>this.#r?{provider:this.#n}:null:{message:`expected instance of Date, but saw ${typeof e}`}}#D(e){let{valid:t,errors:s}=e;if(!t)return{done:!0,result:{valid:t,errors:s}};let{transaction:a}=e,{object:{validatedObject:i}}=a;if(typeof i>"u"&&!this.isRequired||i===null&&(!this.isRequired||this.isNullable))return{done:!0,result:{valid:!0,object:i}};this.#s&&(a=u({validatedObject:d(i)}),i=a.object.validatedObject),this.#a&&(a=u({validatedObject:T(i)}),i=a.object.validatedObject);let n=this.#R(i);return n?"message"in n?{done:!0,result:{valid:!1,errors:[{message:n.message}]}}:{done:!1,provider:n.provider,objToValidate:i}:{done:!0,result:{valid:!0,object:a.commit().validatedObject}}}validate(e,t){return super.validate(e,t)}async validateAsync(e,t){return super.validateAsync(e,t)}_validate(e,t){if(this.#E){if(typeof e>"u"||e===null)if(typeof e>"u"&&this.hasDefault)e=this.resolveDefaultValue();else return!this.isRequired||e===null&&this.isNullable?{valid:!0,object:e}:{valid:!1,errors:[{message:this.getValidationErrorMessageSync(this.requiredErrorMessage,e)}]};let a=this.#R(e);return a?"message"in a?{valid:!1,errors:[{message:a.message}]}:{valid:!1,errors:[{message:this.getValidationErrorMessageSync(a.provider,e)}]}:{valid:!0,object:e}}let s=this.#D(this.preValidateSync(e,t));return s.done?s.result:{valid:!1,errors:[{message:this.getValidationErrorMessageSync(s.provider,s.objToValidate)}]}}async _validateAsync(e,t){let s=this.#D(await super.preValidateAsync(e,t));return s.done?s.result:{valid:!1,errors:[{message:await this.getValidationErrorMessage(s.provider,s.objToValidate)}]}}createFromProps(e){return r.create(e)}equals(e,t){if(!(e instanceof Date))throw new Error("Date expected");return this.createFromProps({...this.introspect(),equalsTo:e,equalsToValidationErrorMessageProvider:t})}clearEquals(){return this.createFromProps({...this.introspect(),equalsTo:void 0})}required(e){return super.required(e)}optional(){return super.optional()}default(e){return super.default(e)}clearDefault(){return super.clearDefault()}brand(e){return super.brand(e)}readonly(){return super.readonly()}isInFuture(e){return this.createFromProps({...this.introspect(),ensureIsInFuture:!0,ensureIsInFutureValidationErrorMessageProvider:e})}clearIsInFuture(){return this.createFromProps({...this.introspect(),ensureIsInFuture:!1})}isInPast(e){return this.createFromProps({...this.introspect(),ensureIsInPast:!0,ensureIsInPastValidationErrorMessageProvider:e})}clearIsInPast(){return this.createFromProps({...this.introspect(),ensureIsInPast:!1})}min(e,t){if(!(e instanceof Date))throw new Error("minValue must be a Date");return this.createFromProps({...this.introspect(),min:e,minValidationErrorMessageProvider:t})}clearMin(){let e=this.introspect();return delete e.min,this.createFromProps({...e})}max(e,t){if(!(e instanceof Date))throw new Error("maxValue must be a Date");return this.createFromProps({...this.introspect(),max:e,maxValidationErrorMessageProvider:t})}clearMax(){let e=this.introspect();return delete e.max,this.createFromProps({...e})}acceptJsonString(){return this.createFromProps({...this.introspect(),parseFromJson:!0})}doNotAcceptJsonString(){return this.createFromProps({...this.introspect(),parseFromJson:!1})}acceptEpoch(){return this.createFromProps({...this.introspect(),parseFromEpoch:!0})}doNotAcceptEpoch(){return this.createFromProps({...this.introspect(),parseFromEpoch:!1})}nullable(){return super.nullable()}notNullable(){return super.notNullable()}},m=()=>o.create({isRequired:!0});export{o as a,m as b};
2
+ //# sourceMappingURL=chunk-YWBNVHR6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builders/DateSchemaBuilder.ts"],"sourcesContent":["import { transaction } from '../utils/transaction.js';\nimport {\n type BRAND,\n type PreprocessorEntry,\n SchemaBuilder,\n type ValidationContext,\n type ValidationErrorMessageProvider,\n type ValidationResult,\n type ValidatorEntry\n} from './SchemaBuilder.js';\n\ntype DateSchemaBuilderCreateProps<T = Date, R extends boolean = true> = Partial<\n ReturnType<DateSchemaBuilder<T, R, any>['introspect']>\n>;\n\nconst parseFromJsonPreprocessor = (value: any) => {\n if (typeof value === 'undefined') return value;\n if (typeof value === 'string') {\n const time = Date.parse(value);\n if (Number.isNaN(time)) return value;\n return new Date(time);\n }\n return value;\n};\n\nconst parseFromEpochPreprocessor = (value: any) => {\n if (typeof value === 'undefined') return value;\n if (typeof value === 'number') {\n const time = new Date(value);\n if (Number.isNaN(time.getTime())) return value;\n return time;\n }\n return value;\n};\n\n/**\n * Allows to create Date schema. It can be required or optional.\n * It can be restricted to be: equal to a certain value, in future, in past, in a certain range.\n * Supports parsing from JSON string and UNIX epoch (using preprocessors).\n *\n * **NOTE** this class is exported only to give opportunity to extend it\n * by inheriting. It is not recommended to create an instance of this class\n * directly. Use {@link date | date()} function instead.\n *\n * @example ```ts\n * const date = new Date(2020, 0, 2);\n * const schema = date().min(new Date(2020, 0, 1));\n * const result = schema.validate(date);\n * // result.valid === true\n * // result.object === date\n * ```\n *\n * @example ```ts\n * const schema = date();\n * const result = schema.validate('2020-01-01');\n * // result.valid === false\n * // result.errors[0].message === 'is expected to be a date'\n * ```\n *\n * @example ```ts\n * const schema = date().parseFromJson();\n * const result = schema.validate('2020-01-01T00:00:00.000Z');\n * // result.valid === true\n * // result.object is equal to corresponding Date object\n * ```\n *\n * @example ```ts\n * const schema = date().parseFromEpoch();\n * const result = schema.validate(1577836800000);\n * // result.valid === true\n * // result.object is equal to corresponding Date object\n * ```\n *\n * @see {@link date}\n */\nexport class DateSchemaBuilder<\n TResult = Date,\n TRequired extends boolean = true,\n TNullable extends boolean = false,\n THasDefault extends boolean = false,\n TExtensions = {}\n> extends SchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n> {\n #min?: Date;\n #defaultMinErrorMessageProvider: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n > = function (this: DateSchemaBuilder) {\n return `is expected to be after ${this.#min} (${this.#min?.getTime()})`;\n };\n #minErrorMessageProvider: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n > = this.#defaultMinErrorMessageProvider;\n\n #max?: Date;\n #defaultMaxErrorMessageProvider: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n > = function (this: DateSchemaBuilder) {\n return `is expected to be before ${this.#max} (${this.#max?.getTime()})`;\n };\n #maxErrorMessageProvider: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n > = this.#defaultMaxErrorMessageProvider;\n\n #equalsTo?: Date;\n #defaultEqualsToErrorMessageProvider: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n > = function (this: DateSchemaBuilder) {\n return `is expected to be equal ${this.#equalsTo} (${this.#equalsTo?.getTime()})`;\n };\n #equalsToErrorMessageProvider: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n > = this.#defaultEqualsToErrorMessageProvider;\n\n #ensureIsInFuture = false;\n #defaultEnsureIsInFutureErrorMessageProvider: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n > = function (this: DateSchemaBuilder) {\n return 'is expected to be in future';\n };\n #ensureIsInFutureErrorMessageProvider: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n > = this.#defaultEnsureIsInFutureErrorMessageProvider;\n\n #ensureIsInPast = false;\n #defaultEnsureIsInPastErrorMessageProvider: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n > = function (this: DateSchemaBuilder) {\n return 'is expected to be in past';\n };\n #ensureIsInPastErrorMessageProvider: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n > = this.#defaultEnsureIsInPastErrorMessageProvider;\n\n #parseFromJson = false;\n #parseFromEpoch = false;\n #canFastPath = true;\n\n /**\n * @hidden\n */\n public static create(props: DateSchemaBuilderCreateProps) {\n return new DateSchemaBuilder({\n type: 'date',\n ...props\n });\n }\n\n protected constructor(props: DateSchemaBuilderCreateProps) {\n super(props as any);\n\n if (props.min instanceof Date) {\n this.#min = props.min;\n }\n\n this.#minErrorMessageProvider =\n this.assureValidationErrorMessageProvider(\n props.minValidationErrorMessageProvider,\n this.#defaultMinErrorMessageProvider\n );\n\n if (props.max instanceof Date) {\n this.#max = props.max;\n }\n\n this.#maxErrorMessageProvider =\n this.assureValidationErrorMessageProvider(\n props.maxValidationErrorMessageProvider,\n this.#defaultMaxErrorMessageProvider\n );\n\n if (typeof props.ensureIsInFuture === 'boolean') {\n this.#ensureIsInFuture = props.ensureIsInFuture;\n }\n\n this.#ensureIsInFutureErrorMessageProvider =\n this.assureValidationErrorMessageProvider(\n props.ensureIsInFutureValidationErrorMessageProvider,\n this.#defaultEnsureIsInFutureErrorMessageProvider\n );\n\n if (typeof props.ensureIsInPast === 'boolean') {\n this.#ensureIsInPast = props.ensureIsInPast;\n }\n\n this.#ensureIsInPastErrorMessageProvider =\n this.assureValidationErrorMessageProvider(\n props.ensureIsInPastValidationErrorMessageProvider,\n this.#defaultEnsureIsInPastErrorMessageProvider\n );\n\n if (typeof props.parseFromJson === 'boolean') {\n this.#parseFromJson = props.parseFromJson;\n }\n\n if (typeof props.parseFromEpoch === 'boolean') {\n this.#parseFromEpoch = props.parseFromEpoch;\n }\n\n if (\n props.equalsTo instanceof Date ||\n typeof props.equalsTo === 'undefined'\n ) {\n this.#equalsTo = props.equalsTo;\n }\n\n this.#equalsToErrorMessageProvider =\n this.assureValidationErrorMessageProvider(\n props.equalsToValidationErrorMessageProvider,\n this.#defaultEqualsToErrorMessageProvider\n );\n\n this.#canFastPath =\n this.canSkipPreValidation &&\n !this.#parseFromJson &&\n !this.#parseFromEpoch;\n }\n\n public introspect() {\n return {\n ...super.introspect(),\n /**\n * Min valid value (if defined).\n */\n min: this.#min,\n\n /**\n * Min value validation error message provider.\n * If not provided, default error message will be used.\n */\n minValidationErrorMessageProvider: this.#minErrorMessageProvider,\n\n /**\n * Max valid value (if defined).\n */\n max: this.#max,\n\n /**\n * Max value validation error message provider.\n * If not provided, default error message will be used.\n */\n maxValidationErrorMessageProvider: this.#maxErrorMessageProvider,\n\n /**\n * Make sure that date is in future. `false` by default.\n */\n ensureIsInFuture: this.#ensureIsInFuture,\n\n /**\n * Ensure in future validation error message provider.\n * If not provided, default error message will be used.\n */\n ensureIsInFutureValidationErrorMessageProvider:\n this.#ensureIsInFutureErrorMessageProvider,\n\n /**\n * Make sure that date is in past. `false` by default.\n */\n ensureIsInPast: this.#ensureIsInPast,\n\n /**\n * Ensure in past validation error message provider.\n * If not provided, default error message will be used.\n */\n ensureIsInPastValidationErrorMessageProvider:\n this.#ensureIsInPastErrorMessageProvider,\n\n /**\n * If set, restrict date to be equal to a certain value.\n */\n equalsTo: this.#equalsTo,\n\n /**\n * Equals to validation error message provider.\n * If not provided, default error message will be used.\n */\n equalsToValidationErrorMessageProvider:\n this.#equalsToErrorMessageProvider,\n\n /**\n * If set, schema will try to parse date from the UNIX epoch (number).\n * `false` by default.\n */\n parseFromEpoch: this.#parseFromEpoch,\n /**\n * If set, schema will try to parse date from JSON string.\n * `false` by default.\n */\n parseFromJson: this.#parseFromJson,\n /**\n * Array of preprocessor functions\n */\n preprocessors: this.preprocessors as PreprocessorEntry<TResult>[],\n /**\n * Array of validator functions\n */\n validators: this.validators as ValidatorEntry<TResult>[]\n };\n }\n\n /**\n * @inheritdoc\n */\n public hasType<T>(\n _notUsed?: T\n ): DateSchemaBuilder<T, true, TNullable, THasDefault, TExtensions> &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n /**\n * @inheritdoc\n */\n public clearHasType(): DateSchemaBuilder<\n Date,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n #getConstraintViolation(\n objToValidate: any\n ): { message: string } | { provider: any } | null {\n if (!(objToValidate instanceof Date)) {\n return {\n message: `expected instance of Date, but saw ${typeof objToValidate}`\n };\n }\n\n if (\n typeof this.#equalsTo !== 'undefined' &&\n objToValidate.getTime() !== this.#equalsTo.getTime()\n ) {\n return { provider: this.#equalsToErrorMessageProvider };\n }\n\n if (this.#ensureIsInFuture && objToValidate <= new Date()) {\n return { provider: this.#ensureIsInFutureErrorMessageProvider };\n }\n\n if (this.#ensureIsInPast && objToValidate >= new Date()) {\n return { provider: this.#ensureIsInPastErrorMessageProvider };\n }\n\n if (typeof this.#min !== 'undefined') {\n if (objToValidate < this.#min)\n return { provider: this.#minErrorMessageProvider };\n }\n\n if (typeof this.#max !== 'undefined') {\n if (objToValidate > this.#max)\n return { provider: this.#maxErrorMessageProvider };\n }\n\n return null;\n }\n\n #buildResult(superResult: ReturnType<DateSchemaBuilder['preValidateSync']>):\n | { done: true; result: ValidationResult<TResult> }\n | {\n done: false;\n provider: any;\n objToValidate: any;\n } {\n const { valid, errors } = superResult;\n\n if (!valid) {\n return { done: true, result: { valid, errors } };\n }\n\n let { transaction: preValidationTransaction } = superResult;\n\n let {\n object: { validatedObject: objToValidate }\n } = preValidationTransaction!;\n\n if (\n (typeof objToValidate === 'undefined' && !this.isRequired) ||\n (objToValidate === null && (!this.isRequired || this.isNullable))\n ) {\n return {\n done: true,\n result: { valid: true, object: objToValidate }\n };\n }\n\n if (this.#parseFromJson) {\n preValidationTransaction = transaction({\n validatedObject: parseFromJsonPreprocessor(objToValidate)\n });\n objToValidate = preValidationTransaction.object.validatedObject;\n }\n\n if (this.#parseFromEpoch) {\n preValidationTransaction = transaction({\n validatedObject: parseFromEpochPreprocessor(objToValidate)\n });\n objToValidate = preValidationTransaction.object.validatedObject;\n }\n\n const violation = this.#getConstraintViolation(objToValidate);\n\n if (!violation) {\n return {\n done: true,\n result: {\n valid: true,\n object: preValidationTransaction!.commit()\n .validatedObject as TResult\n }\n };\n }\n\n if ('message' in violation) {\n return {\n done: true,\n result: {\n valid: false,\n errors: [{ message: violation.message }]\n }\n };\n }\n\n return {\n done: false,\n provider: violation.provider,\n objToValidate\n };\n }\n\n /** {@inheritDoc SchemaBuilder.validate} */\n public validate(\n object: TResult,\n context?: ValidationContext\n ): ValidationResult<TResult> {\n return super.validate(object, context) as ValidationResult<TResult>;\n }\n\n /** {@inheritDoc SchemaBuilder.validateAsync} */\n public async validateAsync(\n object: TResult,\n context?: ValidationContext\n ): Promise<ValidationResult<TResult>> {\n return super.validateAsync(object, context) as Promise<\n ValidationResult<TResult>\n >;\n }\n\n /**\n * Performs synchronous validation of Date schema over `object`.\n * Throws if any preprocessor, validator, or error message provider returns a Promise.\n * @param context Optional `ValidationContext` settings.\n */\n protected _validate(\n object: TResult,\n context?: ValidationContext\n ): ValidationResult<TResult> {\n // Fast path: no preprocessors, validators, or parse-from transformations\n if (this.#canFastPath) {\n if (typeof object === 'undefined' || object === null) {\n if (typeof object === 'undefined' && this.hasDefault) {\n object = this.resolveDefaultValue();\n } else if (\n !this.isRequired ||\n (object === null && this.isNullable)\n ) {\n return { valid: true, object: object };\n } else {\n return {\n valid: false,\n errors: [\n {\n message: this.getValidationErrorMessageSync(\n this.requiredErrorMessage,\n object\n )\n }\n ]\n };\n }\n }\n\n const violation = this.#getConstraintViolation(object);\n\n if (!violation) {\n return { valid: true, object: object as TResult };\n }\n\n if ('message' in violation) {\n return {\n valid: false,\n errors: [{ message: violation.message }]\n };\n }\n\n return {\n valid: false,\n errors: [\n {\n message: this.getValidationErrorMessageSync(\n violation.provider,\n object as TResult\n )\n }\n ]\n };\n }\n\n const r = this.#buildResult(this.preValidateSync(object, context));\n if (r.done) return r.result;\n return {\n valid: false,\n errors: [\n {\n message: this.getValidationErrorMessageSync(\n r.provider,\n r.objToValidate as TResult\n )\n }\n ]\n };\n }\n\n /**\n * Performs async validation of Date schema over `object`.\n * Supports async preprocessors, validators, and error message providers.\n * @param context Optional `ValidationContext` settings.\n */\n protected async _validateAsync(\n object: TResult,\n context?: ValidationContext\n ): Promise<ValidationResult<TResult>> {\n const r = this.#buildResult(\n await super.preValidateAsync(object, context)\n );\n if (r.done) return r.result;\n return {\n valid: false,\n errors: [\n {\n message: await this.getValidationErrorMessage(\n r.provider,\n r.objToValidate as TResult\n )\n }\n ]\n };\n }\n\n /**\n * @hidden\n */\n protected createFromProps<T, TReq extends boolean>(\n props: DateSchemaBuilderCreateProps<T, TReq>\n ): this {\n return DateSchemaBuilder.create(props as any) as any;\n }\n\n /**\n * Restricts Date to be equal to `value`.\n */\n public equals<T extends Date>(\n value: T,\n /**\n * Custom error message provider.\n */\n errorMessage?: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n >\n ): DateSchemaBuilder<T, TRequired, TNullable, THasDefault, TExtensions> &\n TExtensions {\n if (!(value instanceof Date)) throw new Error('Date expected');\n return this.createFromProps({\n ...this.introspect(),\n equalsTo: value,\n equalsToValidationErrorMessageProvider: errorMessage\n }) as any as DateSchemaBuilder<\n T,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions;\n }\n\n /**\n * Clears `equals()` call.\n */\n public clearEquals(): DateSchemaBuilder<\n Date,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n equalsTo: undefined\n }) as any;\n }\n\n /**\n * @hidden\n */\n public required(\n errorMessage?: ValidationErrorMessageProvider\n ): DateSchemaBuilder<TResult, true, TNullable, THasDefault, TExtensions> &\n TExtensions {\n return super.required(errorMessage);\n }\n\n /**\n * @hidden\n */\n public optional(): DateSchemaBuilder<\n TResult,\n false,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.optional();\n }\n\n /**\n * @hidden\n */\n public default(\n value: TResult | (() => TResult)\n ): DateSchemaBuilder<TResult, true, TNullable, true, TExtensions> &\n TExtensions {\n return super.default(value) as any;\n }\n\n /**\n * @hidden\n */\n public clearDefault(): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n false,\n TExtensions\n > &\n TExtensions {\n return super.clearDefault() as any;\n }\n\n /**\n * @hidden\n */\n public brand<TBrand extends string | symbol>(\n _name?: TBrand\n ): DateSchemaBuilder<\n TResult & { readonly [K in BRAND]: TBrand },\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.brand(_name);\n }\n\n /**\n * Marks the inferred type as `Readonly<Date>` — prevents mutation of\n * Date methods like `setFullYear()` at the type level. Validation\n * behaviour is unchanged.\n *\n * @see {@link SchemaBuilder.readonly}\n */\n public readonly(): DateSchemaBuilder<\n Readonly<TResult>,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.readonly();\n }\n\n /**\n * Accept only dates in the future.\n */\n public isInFuture(\n /**\n * Custom error message provider.\n */\n errorMessage?: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n >\n ): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n ensureIsInFuture: true,\n ensureIsInFutureValidationErrorMessageProvider: errorMessage\n }) as any;\n }\n\n /**\n * Cancel `isInFuture()` call.\n */\n public clearIsInFuture(): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n ensureIsInFuture: false\n }) as any;\n }\n\n /**\n * Accept only dates in the past.\n */\n public isInPast(\n /**\n * Custom error message provider.\n */\n errorMessage?: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n >\n ): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n ensureIsInPast: true,\n ensureIsInPastValidationErrorMessageProvider: errorMessage\n }) as any;\n }\n\n /**\n * Cancel `isInPast()` call.\n */\n public clearIsInPast(): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n ensureIsInPast: false\n }) as any;\n }\n\n /**\n * Set minimal valid Date value for schema.\n */\n public min(\n minValue: Date,\n /**\n * Custom error message provider.\n */\n errorMessage?: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n >\n ): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n if (!(minValue instanceof Date))\n throw new Error('minValue must be a Date');\n return this.createFromProps({\n ...this.introspect(),\n min: minValue,\n minValidationErrorMessageProvider: errorMessage\n }) as any;\n }\n\n /**\n * Clear `min()` call.\n */\n public clearMin(): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n const schema = this.introspect();\n delete schema.min;\n return this.createFromProps({\n ...schema\n }) as any;\n }\n\n /**\n * Set maximal valid Date value for schema.\n */\n public max(\n maxValue: Date,\n /**\n * Custom error message provider.\n */\n errorMessage?: ValidationErrorMessageProvider<\n DateSchemaBuilder<TResult, TRequired>\n >\n ): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n if (!(maxValue instanceof Date))\n throw new Error('maxValue must be a Date');\n return this.createFromProps({\n ...this.introspect(),\n max: maxValue,\n maxValidationErrorMessageProvider: errorMessage\n }) as any;\n }\n\n /**\n * Clear `max()` call.\n */\n public clearMax(): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n const schema = this.introspect();\n delete schema.max;\n return this.createFromProps({\n ...schema\n }) as any;\n }\n\n /**\n * Accepts JSON string as a valid Date.\n * String must be in ISO format and will be parsed using `JSON.parse()`.\n */\n public acceptJsonString(): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n parseFromJson: true\n }) as any;\n }\n\n /**\n * Cancel `acceptJsonString()` call.\n */\n public doNotAcceptJsonString(): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n parseFromJson: false\n }) as any;\n }\n\n /**\n * Accepts epoch number as a valid Date.\n * Epoch number will be parsed using `new Date(epoch)`.\n */\n public acceptEpoch(): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n parseFromEpoch: true\n }) as any;\n }\n\n /**\n * Cancel `acceptEpoch()` call.\n */\n public doNotAcceptEpoch(): DateSchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n parseFromEpoch: false\n }) as any;\n }\n\n /**\n * @hidden\n */\n public nullable(): DateSchemaBuilder<\n TResult,\n TRequired,\n true,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.nullable() as any;\n }\n\n /**\n * @hidden\n */\n public notNullable(): DateSchemaBuilder<\n TResult,\n TRequired,\n false,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.notNullable() as any;\n }\n}\n\n/**\n * Creates a Date schema.\n */\nexport const date = () =>\n DateSchemaBuilder.create({\n isRequired: true\n });\n"],"mappings":"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","names":["parseFromJsonPreprocessor","value","time","parseFromEpochPreprocessor","DateSchemaBuilder","_DateSchemaBuilder","SchemaBuilder","#min","#defaultMinErrorMessageProvider","#minErrorMessageProvider","#max","#defaultMaxErrorMessageProvider","#maxErrorMessageProvider","#equalsTo","#defaultEqualsToErrorMessageProvider","#equalsToErrorMessageProvider","#ensureIsInFuture","#defaultEnsureIsInFutureErrorMessageProvider","#ensureIsInFutureErrorMessageProvider","#ensureIsInPast","#defaultEnsureIsInPastErrorMessageProvider","#ensureIsInPastErrorMessageProvider","#parseFromJson","#parseFromEpoch","#canFastPath","props","_notUsed","#getConstraintViolation","objToValidate","#buildResult","superResult","valid","errors","preValidationTransaction","transaction","violation","object","context","r","errorMessage","_name","minValue","schema","maxValue","date"]}
@@ -0,0 +1,2 @@
1
+ import{c as T,e as p,f as h}from"./chunk-CTP4RHDG.js";var y=class m extends h{#r;#l=function(){return`is expected to have no less than ${this.#r} elements`};#n=this.#l;#t;#u=function(){return`is expected to have no more than ${this.#t} elements`};#s=this.#u;#e;static create(e){return new m({type:"array",...e})}constructor(e){super(e),typeof e.minLength=="number"&&(this.#r=e.minLength),this.#n=this.assureValidationErrorMessageProvider(e.minLengthValidationErrorMessageProvider,this.#l),typeof e.maxLength=="number"&&(this.#t=e.maxLength),this.#s=this.assureValidationErrorMessageProvider(e.maxLengthValidationErrorMessageProvider,this.#u),e.elementSchema instanceof h&&(this.#e=e.elementSchema)}hasType(e){return this.createFromProps({...this.introspect()})}clearHasType(){return this.createFromProps({...this.introspect()})}#o(e,t){let{valid:u,context:r,errors:a,transaction:l}=t,d={[T]:{setValue:()=>!1,getValue:i=>({success:!0,value:i}),getSchema:()=>this,parent:void 0}},o=[],c=p([],()=>e,()=>o,()=>d[T]),s=(()=>c);if(!u)return o.push(...(a||[]).map(i=>i.message||String(i))),{needsElementValidation:!1,result:{valid:u,errors:a,getNestedErrors:s}};let{object:{validatedObject:n}}=l;return typeof n>"u"&&!this.isRequired||n===null&&(!this.isRequired||this.isNullable)?{needsElementValidation:!1,result:{valid:!0,object:n,getNestedErrors:s}}:Array.isArray(n)?{needsElementValidation:!0,objToValidate:n,prevalidationContext:r,getNestedErrors:s,elementResults:c,rootErrors:o}:(o.push("array expected"),{needsElementValidation:!1,result:{valid:!1,errors:[{message:"array expected"}],getNestedErrors:s}})}#i(e){return typeof this.#t=="number"&&e.length>this.#t?{provider:this.#s}:typeof this.#r=="number"&&e.length<this.#r?{provider:this.#n}:null}#d(e,t,u){let r=!0;for(let a=0;a<e.length;a++)e[a]?.valid||(r=!1),t[a]=e[a];return Object.assign({valid:r,getNestedErrors:u},r?{}:{errors:e.map(a=>a?.errors).filter(a=>a).flatMap(a=>a?.map(l=>({...l})))},r?{object:e.map(a=>a?.object)}:{})}validate(e,t){return super.validate(e,t)}async validateAsync(e,t){return super.validateAsync(e,t)}_validate(e,t){if(this.canSkipPreValidation&&!t?.doNotStopOnFirstError&&this.#e instanceof h){if(typeof e>"u"||e===null)if(typeof e>"u"&&this.hasDefault)e=this.resolveDefaultValue();else if(!this.isRequired||e===null&&this.isNullable){let a=this;return{valid:!0,object:e,getNestedErrors(){return a.#a(e,t).getNestedErrors()}}}else return this.#a(e,t);if(!Array.isArray(e))return this.#a(e,t);if(this.#i(e))return this.#a(e,t);let u=e.length;if(u>0){let a=new Array(u);for(let d=0;d<u;d++){let o=this.#e.validate(e[d]);if(!o.valid){let c=this;return{valid:!1,errors:o.errors&&o.errors.length>0?[o.errors[0]]:[],getNestedErrors(){return c.#a(e,t).getNestedErrors()}}}a[d]=o.object}let l=this;return{valid:!0,object:a,getNestedErrors(){return l.#a(e,t).getNestedErrors()}}}let r=this;return{valid:!0,object:e,getNestedErrors(){return r.#a(e,t).getNestedErrors()}}}return this.#a(e,t)}#a(e,t){let u=this.#o(e,this.preValidateSync(e,t));if(!u.needsElementValidation)return u.result;let{objToValidate:r,prevalidationContext:a,getNestedErrors:l,elementResults:d,rootErrors:o}=u,c=this.#i(r);if(c){let s=this.getValidationErrorMessageSync(c.provider,r);return o.push(s),{valid:!1,errors:[{message:s}],getNestedErrors:l}}if(r.length>0&&this.#e instanceof h)if(a.doNotStopOnFirstError){let s=[];for(let n=0;n<r.length;n++)s.push(this.#e.validate(r[n],{...a}));return this.#d(s,d,l)}else{let s=new Array(r.length);for(let n=0;n<r.length;n++){let i=this.#e.validate(r[n],{...a});if(d[n]=i,i.valid)s[n]=i.object;else return{valid:!1,errors:Array.isArray(i.errors)&&i.errors.length>0?[i.errors[0]]:[],getNestedErrors:l}}return{valid:!0,object:s,getNestedErrors:l}}return{valid:!0,object:r,getNestedErrors:l}}async _validateAsync(e,t){let u=this.#o(e,await super.preValidateAsync(e,t));if(!u.needsElementValidation)return u.result;let{objToValidate:r,prevalidationContext:a,getNestedErrors:l,elementResults:d,rootErrors:o}=u,c=this.#i(r);if(c){let s=await this.getValidationErrorMessage(c.provider,r);return o.push(s),{valid:!1,errors:[{message:s}],getNestedErrors:l}}if(r.length>0&&this.#e instanceof h)if(a.doNotStopOnFirstError){let s=await Promise.all(r.map(n=>this.#e?.validateAsync(n,a)));return this.#d(s,d,l)}else{let s=new Array(r.length);for(let n=0;n<r.length;n++){let i=await this.#e.validateAsync(r[n],{...a});if(d[n]=i,i.valid)s[n]=i.object;else return{valid:!1,errors:Array.isArray(i.errors)&&i.errors.length>0?[i.errors[0]]:[],getNestedErrors:l}}return{valid:!0,object:s,getNestedErrors:l}}return{valid:!0,object:r,getNestedErrors:l}}createFromProps(e){return m.create(e)}required(e){return super.required(e)}optional(){return super.optional()}default(e){return super.default(e)}clearDefault(){return super.clearDefault()}brand(e){return super.brand(e)}readonly(){return super.readonly()}introspect(){return{...super.introspect(),elementSchema:this.#e,minLength:this.#r,minLengthValidationErrorMessageProvider:this.#n,maxLength:this.#t,maxLengthValidationErrorMessageProvider:this.#s}}of(e){return m.create({...this.introspect(),elementSchema:e})}clearOf(){return m.create({...this.introspect(),elementSchema:void 0})}minLength(e,t){if(typeof e!="number"||e<0)throw new Error("length is expected to be a number which is >= 0");return m.create({...this.introspect(),minLength:e,minLengthValidationErrorMessageProvider:t})}clearMinLength(){let e=this.introspect();return delete e.minLength,this.createFromProps({...e})}maxLength(e,t){if(typeof e!="number"||e<0)throw new Error("length is expected to be a number which is >= 0");return m.create({...this.introspect(),maxLength:e,maxLengthValidationErrorMessageProvider:t})}clearMaxLength(){let e=this.introspect();return delete e.maxLength,this.createFromProps({...e})}nullable(){return super.nullable()}notNullable(){return super.notNullable()}},S=m=>y.create({isRequired:!0,elementSchema:m});export{y as a,S as b};
2
+ //# sourceMappingURL=chunk-Z7QZ7IXT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builders/ArraySchemaBuilder.ts"],"sourcesContent":["import type {\n ObjectSchemaBuilder,\n ObjectSchemaValidationResult\n} from './ObjectSchemaBuilder.js';\nimport {\n type BRAND,\n createHybridErrorArray,\n type InferType,\n type NestedValidationResult,\n type PropertyDescriptor,\n SchemaBuilder,\n SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR,\n type ValidationContext,\n type ValidationErrorMessageProvider,\n type ValidationResult\n} from './SchemaBuilder.js';\n\nimport type {\n UnionSchemaBuilder,\n UnionSchemaValidationResult\n} from './UnionSchemaBuilder.js';\n\n/**\n * Maps an element schema type to the appropriate validation result type.\n * Union schema elements get `UnionSchemaValidationResult`,\n * Object schema elements get `ObjectSchemaValidationResult`,\n * other types get `ValidationResult`.\n */\nexport type ElementValidationResult<\n TElementSchema extends SchemaBuilder<any, any, any, any, any>\n> =\n TElementSchema extends UnionSchemaBuilder<\n infer UOptions extends readonly SchemaBuilder<\n any,\n any,\n any,\n any,\n any\n >[],\n any,\n any\n >\n ? UnionSchemaValidationResult<InferType<TElementSchema>, UOptions>\n : TElementSchema extends ObjectSchemaBuilder<any, any, any, any, any>\n ? ObjectSchemaValidationResult<\n InferType<TElementSchema>,\n TElementSchema\n >\n : ValidationResult<InferType<TElementSchema>>;\n\n/**\n * Validation result type returned by `ArraySchemaBuilder.validate()`.\n * Extends `ValidationResult` with `getNestedErrors` for root-level array\n * errors and per-element validation results.\n */\nexport type ArraySchemaValidationResult<\n TResult,\n TElementSchema extends SchemaBuilder<any, any, any, any, any>\n> = ValidationResult<TResult> & {\n /**\n * Returns root-level array validation errors combined with\n * per-element validation results.\n * The returned value has both `NestedValidationResult` properties\n * (`errors`, `isValid`, `descriptor`, `seenValue`) and indexed\n * element results (`[0]`, `[1]`, etc.).\n */\n getNestedErrors(): Array<ElementValidationResult<TElementSchema>> &\n NestedValidationResult<any, any, any>;\n};\n\ntype ArraySchemaBuilderCreateProps<\n TElementSchema extends SchemaBuilder<any, any, any, any, any>,\n R extends boolean = true\n> = Partial<ReturnType<ArraySchemaBuilder<TElementSchema, R>['introspect']>>;\n\n/**\n * Similar to the `Array` type in TypeScript. It can be used to validate arrays of any type.\n * It can also be used to validate arrays of specific type.\n * For example, if you want to validate an array of numbers,\n * you can use `array(number())` to create a schema builder.\n * If you want to validate an array of users, you can use\n * `array().of(object({ name: string(), age: number() }))` to create a schema builder.\n * If you want to validate an array of numbers or strings,\n * you can use `array(union(number()).or(string()))`.\n *\n * Also you can limit the length of the array by using `minLength`\n * and `maxLength` methods.\n *\n * **NOTE** this class is exported only to give opportunity to extend it\n * by inheriting. It is not recommended to create an instance of this class\n * directly. Use {@link array | array()} function instead.\n * @see {@link array}\n */\nexport class ArraySchemaBuilder<\n TElementSchema extends SchemaBuilder<any, any, any, any, any>,\n TRequired extends boolean = true,\n TNullable extends boolean = false,\n TExplicitType = undefined,\n THasDefault extends boolean = false,\n TExtensions = {},\n TResult = TExplicitType extends undefined\n ? TElementSchema extends undefined\n ? Array<any>\n : TElementSchema extends SchemaBuilder<infer T1, infer T2>\n ? Array<InferType<SchemaBuilder<T1, T2>>>\n : never\n : TExplicitType\n> extends SchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n> {\n #minLength?: number;\n #defaultMinLengthErrorMessageProvider: ValidationErrorMessageProvider<\n ArraySchemaBuilder<TElementSchema, TRequired, TNullable, TExplicitType>\n > = function (this: ArraySchemaBuilder<any, any, any, any, any>) {\n return `is expected to have no less than ${this.#minLength} elements`;\n };\n #minLengthErrorMessageProvider: ValidationErrorMessageProvider<\n ArraySchemaBuilder<TElementSchema, TRequired, TNullable, TExplicitType>\n > = this.#defaultMinLengthErrorMessageProvider;\n\n #maxLength?: number;\n #defaultMaxLengthErrorMessageProvider: ValidationErrorMessageProvider<\n ArraySchemaBuilder<TElementSchema, TRequired, TNullable, TExplicitType>\n > = function (this: ArraySchemaBuilder<any, any, any, any, any>) {\n return `is expected to have no more than ${this.#maxLength} elements`;\n };\n #maxLengthErrorMessageProvider: ValidationErrorMessageProvider<\n ArraySchemaBuilder<TElementSchema, TRequired, TNullable, TExplicitType>\n > = this.#defaultMaxLengthErrorMessageProvider;\n\n #elementSchema?: TElementSchema;\n\n /**\n * @hidden\n */\n public static create(props: ArraySchemaBuilderCreateProps<any, any>) {\n return new ArraySchemaBuilder({\n type: 'array',\n ...props\n } as any);\n }\n\n protected constructor(\n props: ArraySchemaBuilderCreateProps<TElementSchema, TRequired>\n ) {\n super(props as any);\n\n if (typeof props.minLength === 'number') {\n this.#minLength = props.minLength;\n }\n\n this.#minLengthErrorMessageProvider =\n this.assureValidationErrorMessageProvider(\n props.minLengthValidationErrorMessageProvider,\n this.#defaultMinLengthErrorMessageProvider\n );\n\n if (typeof props.maxLength === 'number') {\n this.#maxLength = props.maxLength;\n }\n\n this.#maxLengthErrorMessageProvider =\n this.assureValidationErrorMessageProvider(\n props.maxLengthValidationErrorMessageProvider,\n this.#defaultMaxLengthErrorMessageProvider\n );\n\n if (props.elementSchema instanceof SchemaBuilder) {\n this.#elementSchema = props.elementSchema;\n }\n }\n\n /**\n * @inheritdoc\n */\n public hasType<T>(\n _notUsed?: T\n ): ArraySchemaBuilder<\n TElementSchema,\n true,\n TNullable,\n T,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n /**\n * @inheritdoc\n */\n public clearHasType(): ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n TNullable,\n undefined,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n #createValidationSetup(\n object: TResult,\n superResult: ReturnType<ArraySchemaBuilder<any, any>['preValidateSync']>\n ) {\n const {\n valid,\n context: prevalidationContext,\n errors,\n transaction: preValidationTransaction\n } = superResult;\n\n // Self-referencing property descriptor for the array root\n const selfDescriptor: PropertyDescriptor<any, any, any> = {\n [SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR]: {\n setValue: () => false,\n getValue: (obj: any) => ({\n success: true,\n value: obj\n }),\n getSchema: () => this,\n parent: undefined\n }\n };\n\n const rootErrors: string[] = [];\n\n const elementResults = createHybridErrorArray(\n [] as any[],\n () => object,\n () => rootErrors,\n () => selfDescriptor[SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR]\n );\n\n const getNestedErrors = (() => elementResults) as any;\n\n if (!valid) {\n rootErrors.push(\n ...(errors || []).map((e: any) => e.message || String(e))\n );\n return {\n needsElementValidation: false as const,\n result: {\n valid,\n errors,\n getNestedErrors\n } as ArraySchemaValidationResult<TResult, TElementSchema>\n };\n }\n\n const {\n object: { validatedObject: objToValidate }\n } = preValidationTransaction!;\n\n if (\n (typeof objToValidate === 'undefined' && !this.isRequired) ||\n (objToValidate === null && (!this.isRequired || this.isNullable))\n ) {\n return {\n needsElementValidation: false as const,\n result: {\n valid: true,\n object: objToValidate,\n getNestedErrors\n } as ArraySchemaValidationResult<TResult, TElementSchema>\n };\n }\n\n if (!Array.isArray(objToValidate)) {\n rootErrors.push('array expected');\n return {\n needsElementValidation: false as const,\n result: {\n valid: false,\n errors: [{ message: 'array expected' }],\n getNestedErrors\n } as ArraySchemaValidationResult<TResult, TElementSchema>\n };\n }\n\n return {\n needsElementValidation: true as const,\n objToValidate,\n prevalidationContext,\n getNestedErrors,\n elementResults,\n rootErrors\n };\n }\n\n #getLengthViolation(objToValidate: any[]): { provider: any } | null {\n if (\n typeof this.#maxLength === 'number' &&\n objToValidate.length > this.#maxLength\n ) {\n return { provider: this.#maxLengthErrorMessageProvider };\n }\n\n if (\n typeof this.#minLength === 'number' &&\n objToValidate.length < this.#minLength\n ) {\n return { provider: this.#minLengthErrorMessageProvider };\n }\n\n return null;\n }\n\n #assembleDoNotStopResults(\n results: any[],\n elementResults: any,\n getNestedErrors: any\n ) {\n let allValid = true;\n\n for (let i = 0; i < results.length; i++) {\n if (!results[i]?.valid) {\n allValid = false;\n }\n elementResults[i] = results[i] as any;\n }\n\n return Object.assign(\n {\n valid: allValid,\n getNestedErrors\n },\n allValid\n ? {}\n : {\n errors: results\n .map(r => r?.errors)\n .filter(r => r)\n .flatMap(e =>\n e?.map((r: any) => ({\n ...r\n }))\n ) as any\n },\n allValid\n ? {\n object: results.map(r => r?.object)\n }\n : {}\n ) as any;\n }\n\n /**\n * Performs synchronous validation of the schema over `object`. {@inheritDoc SchemaBuilder.validate}\n */\n public validate(\n object: TResult,\n context?: ValidationContext\n ): ArraySchemaValidationResult<TResult, TElementSchema> {\n return super.validate(object, context) as ArraySchemaValidationResult<\n TResult,\n TElementSchema\n >;\n }\n\n /**\n * Performs asynchronous validation of the schema over `object`. {@inheritDoc SchemaBuilder.validateAsync}\n */\n public async validateAsync(\n object: TResult,\n context?: ValidationContext\n ): Promise<ArraySchemaValidationResult<TResult, TElementSchema>> {\n return super.validateAsync(object, context) as Promise<\n ArraySchemaValidationResult<TResult, TElementSchema>\n >;\n }\n\n /**\n * Performs synchronous validation of the schema over `object`.\n * Throws if any preprocessor, validator, or error message provider returns a Promise.\n * @param context Optional `ValidationContext` settings.\n */\n protected _validate(\n object: TResult,\n context?: ValidationContext\n ): ArraySchemaValidationResult<TResult, TElementSchema> {\n // Fast path: no preprocessors/validators, default error mode, has element schema\n if (\n this.canSkipPreValidation &&\n !context?.doNotStopOnFirstError &&\n this.#elementSchema instanceof SchemaBuilder\n ) {\n // Required / optional check\n if (typeof object === 'undefined' || object === null) {\n if (typeof object === 'undefined' && this.hasDefault) {\n object = this.resolveDefaultValue();\n } else if (\n !this.isRequired ||\n (object === null && this.isNullable)\n ) {\n const self = this;\n return {\n valid: true,\n object: object,\n getNestedErrors() {\n return self\n .#validateArrayFull(object, context)\n .getNestedErrors();\n }\n } as any;\n } else {\n return this.#validateArrayFull(object, context);\n }\n }\n\n if (!Array.isArray(object)) {\n return this.#validateArrayFull(object, context);\n }\n\n // Length constraints\n if (this.#getLengthViolation(object as any)) {\n return this.#validateArrayFull(object, context);\n }\n\n // Validate elements inline — no path passed to children\n const len = (object as any).length;\n if (len > 0) {\n const resultArray = new Array(len);\n for (let i = 0; i < len; i++) {\n const result = this.#elementSchema.validate(\n (object as any)[i]\n );\n if (!result.valid) {\n const self = this;\n return {\n valid: false,\n errors:\n result.errors && result.errors.length > 0\n ? [result.errors[0]]\n : [],\n getNestedErrors() {\n return self\n .#validateArrayFull(object, context)\n .getNestedErrors();\n }\n } as any;\n }\n resultArray[i] = result.object;\n }\n\n // Lazy getNestedErrors\n const self = this;\n return {\n valid: true,\n object: resultArray as TResult,\n getNestedErrors() {\n return self\n .#validateArrayFull(object, context)\n .getNestedErrors();\n }\n } as any;\n }\n\n const self = this;\n return {\n valid: true,\n object: object as TResult,\n getNestedErrors() {\n return self\n .#validateArrayFull(object, context)\n .getNestedErrors();\n }\n } as any;\n }\n\n return this.#validateArrayFull(object, context);\n }\n\n /**\n * Full validation path with complete setup, error handling, and nested error support.\n */\n #validateArrayFull(\n object: TResult,\n context?: ValidationContext\n ): ArraySchemaValidationResult<TResult, TElementSchema> {\n const setup = this.#createValidationSetup(\n object,\n this.preValidateSync(object, context)\n );\n\n if (!setup.needsElementValidation) return setup.result;\n\n const {\n objToValidate,\n prevalidationContext,\n getNestedErrors,\n elementResults,\n rootErrors\n } = setup;\n\n const lengthViolation = this.#getLengthViolation(objToValidate);\n if (lengthViolation) {\n const msg = this.getValidationErrorMessageSync(\n lengthViolation.provider,\n objToValidate as TResult\n );\n rootErrors.push(msg);\n return {\n valid: false,\n errors: [{ message: msg }],\n getNestedErrors\n };\n }\n\n if (\n objToValidate.length > 0 &&\n this.#elementSchema instanceof SchemaBuilder\n ) {\n if (prevalidationContext.doNotStopOnFirstError) {\n const results: any[] = [];\n\n for (let i = 0; i < objToValidate.length; i++) {\n results.push(\n this.#elementSchema.validate(objToValidate[i], {\n ...prevalidationContext\n })\n );\n }\n\n return this.#assembleDoNotStopResults(\n results,\n elementResults,\n getNestedErrors\n );\n } else {\n const resultArray = new Array(objToValidate.length);\n for (let i = 0; i < objToValidate.length; i++) {\n const result = this.#elementSchema.validate(\n objToValidate[i],\n {\n ...prevalidationContext\n }\n );\n elementResults[i] = result as any;\n if (result.valid) {\n resultArray[i] = result.object;\n } else {\n return {\n valid: false,\n errors:\n Array.isArray(result.errors) &&\n result.errors.length > 0\n ? [result.errors[0]]\n : [],\n getNestedErrors\n };\n }\n }\n\n return {\n valid: true,\n object: resultArray as TResult,\n getNestedErrors\n };\n }\n }\n\n return {\n valid: true,\n object: objToValidate as TResult,\n getNestedErrors\n };\n }\n\n /**\n * Performs async validation of the schema over `object`.\n * Supports async preprocessors, validators, and error message providers.\n * @param context Optional `ValidationContext` settings.\n */\n protected async _validateAsync(\n object: TResult,\n context?: ValidationContext\n ): Promise<ArraySchemaValidationResult<TResult, TElementSchema>> {\n const setup = this.#createValidationSetup(\n object,\n await super.preValidateAsync(object, context)\n );\n\n if (!setup.needsElementValidation) return setup.result;\n\n const {\n objToValidate,\n prevalidationContext,\n getNestedErrors,\n elementResults,\n rootErrors\n } = setup;\n\n const lengthViolation = this.#getLengthViolation(objToValidate);\n if (lengthViolation) {\n const msg = await this.getValidationErrorMessage(\n lengthViolation.provider,\n objToValidate as TResult\n );\n rootErrors.push(msg);\n return {\n valid: false,\n errors: [{ message: msg }],\n getNestedErrors\n };\n }\n\n if (\n objToValidate.length > 0 &&\n this.#elementSchema instanceof SchemaBuilder\n ) {\n if (prevalidationContext.doNotStopOnFirstError) {\n const results = await Promise.all(\n objToValidate.map(o =>\n this.#elementSchema?.validateAsync(\n o,\n prevalidationContext\n )\n )\n );\n\n return this.#assembleDoNotStopResults(\n results,\n elementResults,\n getNestedErrors\n );\n } else {\n const resultArray = new Array(objToValidate.length);\n for (let i = 0; i < objToValidate.length; i++) {\n const result = await this.#elementSchema.validateAsync(\n objToValidate[i],\n {\n ...prevalidationContext\n }\n );\n elementResults[i] = result as any;\n if (result.valid) {\n resultArray[i] = result.object;\n } else {\n return {\n valid: false,\n errors:\n Array.isArray(result.errors) &&\n result.errors.length > 0\n ? [result.errors[0]]\n : [],\n getNestedErrors\n };\n }\n }\n\n return {\n valid: true,\n object: resultArray as TResult,\n getNestedErrors\n };\n }\n }\n\n return {\n valid: true,\n object: objToValidate as TResult,\n getNestedErrors\n };\n }\n\n /**\n * @hidden\n */\n protected createFromProps<TReq extends boolean>(\n props: ArraySchemaBuilderCreateProps<TElementSchema, TReq>\n ): this {\n return ArraySchemaBuilder.create(props as any) as any;\n }\n\n /**\n * @hidden\n */\n public required(\n errorMessage?: ValidationErrorMessageProvider\n ): ArraySchemaBuilder<\n TElementSchema,\n true,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.required(errorMessage);\n }\n\n /**\n * @hidden\n */\n public optional(): ArraySchemaBuilder<\n TElementSchema,\n false,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.optional();\n }\n\n /**\n * @hidden\n */\n public default(\n value: TResult | (() => TResult)\n ): ArraySchemaBuilder<\n TElementSchema,\n true,\n TNullable,\n TExplicitType,\n true,\n TExtensions\n > &\n TExtensions {\n return super.default(value) as any;\n }\n\n /**\n * @hidden\n */\n public clearDefault(): ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n TNullable,\n TExplicitType,\n false,\n TExtensions\n > &\n TExtensions {\n return super.clearDefault() as any;\n }\n\n /**\n * @hidden\n */\n public brand<TBrand extends string | symbol>(\n _name?: TBrand\n ): ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n TNullable,\n TResult & { readonly [K in BRAND]: TBrand },\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.brand(_name);\n }\n\n /**\n * Marks the inferred type as `ReadonlyArray<T>` — disables `push`,\n * `pop`, and other mutating methods at the type level. Validation\n * behaviour is unchanged.\n *\n * @see {@link SchemaBuilder.readonly}\n */\n public readonly(): ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n TNullable,\n ReadonlyArray<\n TElementSchema extends SchemaBuilder<infer T1, infer T2>\n ? InferType<SchemaBuilder<T1, T2>>\n : any\n >,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.readonly();\n }\n\n public introspect() {\n return {\n ...super.introspect(),\n /**\n * Schema of array item (if defined)\n */\n elementSchema: this.#elementSchema,\n /**\n * Min length of a valid array\n */\n minLength: this.#minLength,\n\n /**\n * Min length validation error message provider.\n * If not provided, default error message provider is used.\n */\n minLengthValidationErrorMessageProvider:\n this.#minLengthErrorMessageProvider,\n\n /**\n * Max length of a valid array\n */\n maxLength: this.#maxLength,\n\n /**\n * Max length validation error message provider.\n * If not provided, default error message provider is used.\n */\n maxLengthValidationErrorMessageProvider:\n this.#maxLengthErrorMessageProvider\n };\n }\n\n /**\n * Set a schema that every array item has to satisfy. If it is not set,\n * Item of any type is allowed.\n * @param schema Schema that every array item has to satisfy\n */\n public of<TSchema extends SchemaBuilder<any, any, any, any, any>>(\n schema: TSchema\n ): ArraySchemaBuilder<\n TSchema,\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return ArraySchemaBuilder.create({\n ...this.introspect(),\n elementSchema: schema\n } as any) as any;\n }\n\n /**\n * Clears the element schema set by `of()`. After this call,\n * array items of any type will be accepted.\n */\n public clearOf(): ArraySchemaBuilder<\n any,\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return ArraySchemaBuilder.create({\n ...this.introspect(),\n elementSchema: undefined\n } as any) as any;\n }\n\n /**\n * Set minimal length of the valid array value for schema.\n */\n public minLength<T extends number>(\n length: T,\n /**\n * Custom error message provider.\n */\n errorMessage?: ValidationErrorMessageProvider<\n ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n TNullable,\n TExplicitType\n >\n >\n ): ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n if (typeof length !== 'number' || length < 0)\n throw new Error('length is expected to be a number which is >= 0');\n return ArraySchemaBuilder.create({\n ...this.introspect(),\n minLength: length,\n minLengthValidationErrorMessageProvider: errorMessage\n } as any) as any;\n }\n\n /**\n * Clear minimal length of the valid array value for schema.\n */\n public clearMinLength(): ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n const schema = this.introspect();\n delete schema.minLength;\n return this.createFromProps({\n ...schema\n } as any) as any;\n }\n\n /**\n * Set max length of the valid array value for schema.\n */\n public maxLength<T extends number>(\n length: T,\n /**\n * Custom error message provider.\n */\n errorMessage?: ValidationErrorMessageProvider<\n ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n TNullable,\n TExplicitType\n >\n >\n ): ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n if (typeof length !== 'number' || length < 0)\n throw new Error('length is expected to be a number which is >= 0');\n return ArraySchemaBuilder.create({\n ...this.introspect(),\n maxLength: length,\n maxLengthValidationErrorMessageProvider: errorMessage\n } as any) as any;\n }\n\n /**\n * Clear max length of the valid array value for schema.\n */\n public clearMaxLength(): ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n const schema = this.introspect();\n delete schema.maxLength;\n return this.createFromProps({\n ...schema\n } as any) as any;\n }\n\n /**\n * @hidden\n */\n public nullable(): ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n true,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.nullable() as any;\n }\n\n /**\n * @hidden\n */\n public notNullable(): ArraySchemaBuilder<\n TElementSchema,\n TRequired,\n false,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.notNullable() as any;\n }\n}\n\n/**\n * Creates a `Array` schema.\n *\n * @example\n * ```typescript\n * const schema = array().minLength(2).maxLength(5).of(string());\n * // [] - invalid\n * // ['a', 'b'] - valid\n * // ['a', 'b', 'c', 'd', 'e', 'f'] - invalid\n * // ['a', 'b', 'c', 'd', 'e'] - valid\n * // ['a', 'b', 'c', 'd', 1] - invalid\n * // ['a', 'b', null] - invalid\n * // null - invalid\n * // undefined - invalid\n * ```\n */\nexport const array = <\n TElementSchema extends SchemaBuilder<any, any, any, any, any>\n>(\n elementSchema?: TElementSchema\n) =>\n ArraySchemaBuilder.create({\n isRequired: true,\n elementSchema\n }) as unknown as ArraySchemaBuilder<TElementSchema, true>;\n"],"mappings":"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","names":["ArraySchemaBuilder","_ArraySchemaBuilder","SchemaBuilder","#minLength","#defaultMinLengthErrorMessageProvider","#minLengthErrorMessageProvider","#maxLength","#defaultMaxLengthErrorMessageProvider","#maxLengthErrorMessageProvider","#elementSchema","props","_notUsed","#createValidationSetup","object","superResult","valid","prevalidationContext","errors","preValidationTransaction","selfDescriptor","SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR","obj","rootErrors","elementResults","createHybridErrorArray","getNestedErrors","e","objToValidate","#getLengthViolation","#assembleDoNotStopResults","results","allValid","i","r","context","self","#validateArrayFull","len","resultArray","result","setup","lengthViolation","msg","o","errorMessage","value","_name","schema","length","array","elementSchema"]}
@@ -0,0 +1,2 @@
1
+ import{f as n}from"./chunk-CTP4RHDG.js";var a=class l extends n{static create(e){return new l({type:"any",...e})}constructor(e){super(e)}hasType(e){return this.createFromProps({...this.introspect()})}clearHasType(){return this.createFromProps({...this.introspect()})}#e(e){let{valid:t,transaction:s,errors:i}=e;if(!t)return{valid:t,errors:i};let{object:{validatedObject:r}}=s;return{valid:!0,object:r}}validate(e,t){return super.validate(e,t)}async validateAsync(e,t){return super.validateAsync(e,t)}_validate(e,t){return this.#e(this.preValidateSync(e,t))}async _validateAsync(e,t){return this.#e(await super.preValidateAsync(e,t))}createFromProps(e){return l.create(e)}required(e){return super.required(e)}optional(){return super.optional()}default(e){return super.default(e)}clearDefault(){return super.clearDefault()}brand(e){return super.brand(e)}readonly(){return super.readonly()}nullable(){return super.nullable()}notNullable(){return super.notNullable()}},o=()=>a.create({isRequired:!0});export{a,o as b};
2
+ //# sourceMappingURL=chunk-ZAN4ZHCJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builders/AnySchemaBuilder.ts"],"sourcesContent":["import {\n type BRAND,\n SchemaBuilder,\n type ValidationContext,\n type ValidationErrorMessageProvider,\n type ValidationResult\n} from './SchemaBuilder.js';\n\ntype AnySchemaBuilderCreateProps<R extends boolean = true> = Partial<\n ReturnType<AnySchemaBuilder<R>['introspect']>\n>;\n\n/**\n * Any schema builder class. Similar to the `any` type\n * in TypeScript. Allows to define a schema for `any` value.\n * Use it when you don't know the type of the value.\n *\n * **NOTE** this class is exported only to give opportunity to extend it\n * by inheriting. It is not recommended to create an instance of this class\n * directly. Use `any()` function instead.\n *\n * @example\n * ```ts\n * const schema = any();\n * const result = schema.validate(123);\n * // result.valid === true\n * // result.object === 123\n * ```\n */\nexport class AnySchemaBuilder<\n TRequired extends boolean = true,\n TNullable extends boolean = false,\n TExplicitType = undefined,\n THasDefault extends boolean = false,\n TExtensions = {},\n TResult = TExplicitType extends undefined ? any : TExplicitType\n> extends SchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n> {\n /**\n * @hidden\n */\n public static create(props: AnySchemaBuilderCreateProps<any>) {\n return new AnySchemaBuilder({\n type: 'any',\n ...props\n });\n }\n\n protected constructor(props: AnySchemaBuilderCreateProps<TRequired>) {\n super(props as any);\n }\n\n /**\n * @inheritdoc\n */\n public hasType<T>(\n _notUsed?: T\n ): AnySchemaBuilder<true, TNullable, T, THasDefault, TExtensions> &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n /**\n * @inheritdoc\n */\n public clearHasType(): AnySchemaBuilder<\n TRequired,\n TNullable,\n undefined,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n #buildResult(\n superResult: ReturnType<AnySchemaBuilder['preValidateSync']>\n ): ValidationResult<TResult> {\n const {\n valid,\n transaction: preValidationTransaction,\n errors\n } = superResult;\n\n if (!valid) {\n return { valid, errors };\n }\n\n const {\n object: { validatedObject: objToValidate }\n } = preValidationTransaction!;\n\n return { valid: true, object: objToValidate };\n }\n\n /** {@inheritDoc SchemaBuilder.validate} */\n public validate(\n object: TResult,\n context?: ValidationContext\n ): ValidationResult<TResult> {\n return super.validate(object, context) as ValidationResult<TResult>;\n }\n\n /** {@inheritDoc SchemaBuilder.validateAsync} */\n public async validateAsync(\n object: TResult,\n context?: ValidationContext\n ): Promise<ValidationResult<TResult>> {\n return super.validateAsync(object, context) as Promise<\n ValidationResult<TResult>\n >;\n }\n\n /**\n * Performs synchronous validation of the schema over `object`.\n * Throws if any preprocessor, validator, or error message provider returns a Promise.\n * @param context Optional `ValidationContext` settings.\n */\n protected _validate(\n object: TResult,\n context?: ValidationContext\n ): ValidationResult<TResult> {\n return this.#buildResult(this.preValidateSync(object, context));\n }\n\n /**\n * Performs async validation of the schema over `object`.\n * Supports async preprocessors, validators, and error message providers.\n * @param context Optional `ValidationContext` settings.\n */\n protected async _validateAsync(\n object: TResult,\n context?: ValidationContext\n ): Promise<ValidationResult<TResult>> {\n return this.#buildResult(await super.preValidateAsync(object, context));\n }\n\n protected createFromProps<TReq extends boolean>(\n props: AnySchemaBuilderCreateProps<TReq>\n ): this {\n return AnySchemaBuilder.create(props as any) as any;\n }\n\n /**\n * @hidden\n */\n public required(\n errorMessage?: ValidationErrorMessageProvider\n ): AnySchemaBuilder<\n true,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.required(errorMessage);\n }\n\n /**\n * @hidden\n */\n public optional(): AnySchemaBuilder<\n false,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.optional();\n }\n\n /**\n * @hidden\n */\n public default(\n value: TResult | (() => TResult)\n ): AnySchemaBuilder<true, TNullable, TExplicitType, true, TExtensions> &\n TExtensions {\n return super.default(value) as any;\n }\n\n /**\n * @hidden\n */\n public clearDefault(): AnySchemaBuilder<\n TRequired,\n TNullable,\n TExplicitType,\n false,\n TExtensions\n > &\n TExtensions {\n return super.clearDefault() as any;\n }\n\n /**\n * @hidden\n */\n public brand<TBrand extends string | symbol>(\n _name?: TBrand\n ): AnySchemaBuilder<\n TRequired,\n TNullable,\n TResult & { readonly [K in BRAND]: TBrand },\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.brand(_name);\n }\n\n /**\n * Marks the inferred type as `Readonly<T>`. Sets the `isReadonly`\n * introspection flag for tooling consistency.\n *\n * @see {@link SchemaBuilder.readonly}\n */\n public readonly(): AnySchemaBuilder<\n TRequired,\n TNullable,\n Readonly<TResult>,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.readonly();\n }\n\n /**\n * @hidden\n */\n public nullable(): AnySchemaBuilder<\n TRequired,\n true,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.nullable() as any;\n }\n\n /**\n * @hidden\n */\n public notNullable(): AnySchemaBuilder<\n TRequired,\n false,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.notNullable() as any;\n }\n}\n\n/**\n * Creates a `any` schema.\n * @example\n * ```\n * const anyObject = any();\n *\n * // null - invalid\n * // undefined - invalid\n * // string - valid\n * // {} - valid\n * // Date -valid\n * // { someProp: 123 } - valid\n * // etc\n * ```\n * @example\n * ```\n * const anyObject = any().optional();\n * // null - valid\n * // undefined - valid\n * // string - valid\n * // {} - valid\n * // Date -valid\n * // { someProp: 123 } - valid\n * ```\n */\nexport const any = () =>\n AnySchemaBuilder.create({\n isRequired: true\n }) as AnySchemaBuilder<true>;\n"],"mappings":"wCA6BO,IAAMA,EAAN,MAAMC,UAOHC,CAMR,CAIE,OAAc,OAAOC,EAAyC,CAC1D,OAAO,IAAIF,EAAiB,CACxB,KAAM,MACN,GAAGE,CACP,CAAC,CACL,CAEU,YAAYA,EAA+C,CACjE,MAAMA,CAAY,CACtB,CAKO,QACHC,EAEY,CACZ,OAAO,KAAK,gBAAgB,CACxB,GAAG,KAAK,WAAW,CACvB,CAAQ,CACZ,CAKO,cAOS,CACZ,OAAO,KAAK,gBAAgB,CACxB,GAAG,KAAK,WAAW,CACvB,CAAQ,CACZ,CAEAC,GACIC,EACyB,CACzB,GAAM,CACF,MAAAC,EACA,YAAaC,EACb,OAAAC,CACJ,EAAIH,EAEJ,GAAI,CAACC,EACD,MAAO,CAAE,MAAAA,EAAO,OAAAE,CAAO,EAG3B,GAAM,CACF,OAAQ,CAAE,gBAAiBC,CAAc,CAC7C,EAAIF,EAEJ,MAAO,CAAE,MAAO,GAAM,OAAQE,CAAc,CAChD,CAGO,SACHC,EACAC,EACyB,CACzB,OAAO,MAAM,SAASD,EAAQC,CAAO,CACzC,CAGA,MAAa,cACTD,EACAC,EACkC,CAClC,OAAO,MAAM,cAAcD,EAAQC,CAAO,CAG9C,CAOU,UACND,EACAC,EACyB,CACzB,OAAO,KAAKP,GAAa,KAAK,gBAAgBM,EAAQC,CAAO,CAAC,CAClE,CAOA,MAAgB,eACZD,EACAC,EACkC,CAClC,OAAO,KAAKP,GAAa,MAAM,MAAM,iBAAiBM,EAAQC,CAAO,CAAC,CAC1E,CAEU,gBACNT,EACI,CACJ,OAAOF,EAAiB,OAAOE,CAAY,CAC/C,CAKO,SACHU,EAQY,CACZ,OAAO,MAAM,SAASA,CAAY,CACtC,CAKO,UAOS,CACZ,OAAO,MAAM,SAAS,CAC1B,CAKO,QACHC,EAEY,CACZ,OAAO,MAAM,QAAQA,CAAK,CAC9B,CAKO,cAOS,CACZ,OAAO,MAAM,aAAa,CAC9B,CAKO,MACHC,EAQY,CACZ,OAAO,MAAM,MAAMA,CAAK,CAC5B,CAQO,UAOS,CACZ,OAAO,MAAM,SAAS,CAC1B,CAKO,UAOS,CACZ,OAAO,MAAM,SAAS,CAC1B,CAKO,aAOS,CACZ,OAAO,MAAM,YAAY,CAC7B,CACJ,EA2BaC,EAAM,IACfhB,EAAiB,OAAO,CACpB,WAAY,EAChB,CAAC","names":["AnySchemaBuilder","_AnySchemaBuilder","SchemaBuilder","props","_notUsed","#buildResult","superResult","valid","preValidationTransaction","errors","objToValidate","object","context","errorMessage","value","_name","any"]}
@@ -0,0 +1,2 @@
1
+ import{c as h,e as x,f as c}from"./chunk-CTP4RHDG.js";var f=class T extends c{#e;#n=null;#t=null;static create(e){return new T({type:"union",...e})}constructor(e){super(e),Array.isArray(e.options)&&(this.#e=e.options,this.#o())}#o(){let e=this.#e;if(!e||e.length<2)return;let n=[];for(let s of e){let t=s.introspect();if(t.type!=="object")return;n.push(t)}let i=n[0].properties;if(i)for(let s of Object.keys(i)){let t=new Map,a=!0;for(let o=0;o<n.length;o++){let d=n[o].properties;if(!d||!(s in d)){a=!1;break}let r=d[s].introspect();if(r.isRequired!==!0){a=!1;break}let l=r.equalsTo;if(l==null){a=!1;break}if(typeof l!="string"&&typeof l!="number"){a=!1;break}if(t.has(l)){a=!1;break}t.set(l,e[o])}if(a&&t.size===e.length){this.#n=s,this.#t=t;return}}}introspect(){return{...super.introspect(),options:this.#e}}get isNullRequiredViolation(){return!1}hasType(e){return this.createFromProps({...this.introspect()})}clearHasType(){return this.createFromProps({...this.introspect()})}#r(e,n){let{valid:i,transaction:s,context:t,errors:a}=n,o={[h]:{setValue:()=>!1,getValue:u=>({success:!0,value:u}),getSchema:()=>this,parent:void 0}},d=[],y=x([],()=>e,()=>d,()=>o[h]),r=(()=>y);if(!i)return d.push(...(a||[]).map(u=>u.message||String(u))),{needsOptionValidation:!1,result:{valid:i,errors:a,getNestedErrors:r}};let{object:{validatedObject:l}}=s;return typeof l>"u"&&!this.isRequired||l===null&&(!this.isRequired||this.isNullable)?{needsOptionValidation:!1,result:{valid:!0,object:l,getNestedErrors:r}}:{needsOptionValidation:!0,objToValidate:l,prevalidationContext:t,preValidationTransaction:s,getNestedErrors:r,optionResults:y,rootErrors:d}}#s(e,n,i,s,t,a){if(i[n]=e,e.valid)return{valid:!0,object:e.object,getNestedErrors:a};let o=e.errors;return Array.isArray(o)&&o.length>0&&o.length<t.minErrorsCount&&(t.resultingErrors=o,t.minErrorsCount=o.length),t.objToValidate=s.rollback().validatedObject,null}validate(e,n){return super.validate(e,n)}async validateAsync(e,n){return super.validateAsync(e,n)}_validate(e,n){if(this.canSkipPreValidation&&!n?.doNotStopOnFirstError&&!n?.rootPropertyDescriptor){if(typeof e>"u")if(this.hasDefault)e=this.resolveDefaultValue();else return this.isRequired?this.#i(!1,void 0,[{message:this.getValidationErrorMessageSync(this.requiredErrorMessage,e)}],e,n):this.#i(!0,e,void 0,e,n);else if(e===null&&(!this.isRequired||this.isNullable))return this.#i(!0,e,void 0,e,n);if(this.#n&&this.#t&&typeof e=="object"&&e!==null){let i=e[this.#n],s=this.#t.get(i);if(s){let t=s.validate(e);return this.#i(t.valid,t.valid?t.object:void 0,t.valid?void 0:t.errors,e,n)}return this.#i(!1,void 0,[{message:"value doesn't match any option in union schema"}],e,n)}if(!this.#n){let i=this.#e,s=Number.MAX_SAFE_INTEGER,t=[];for(let a=0;a<i.length;a++){let o=i[a].validate(e);if(o.valid)return this.#i(!0,o.object,void 0,e,n);let d=o.errors;Array.isArray(d)&&d.length>0&&d.length<s&&(t=d,s=d.length)}return this.#i(!1,void 0,t,e,n)}}return this.#a(e,n)}#i(e,n,i,s,t){let a=this;return e?{valid:!0,object:n,getNestedErrors(){return a.#a(s,t).getNestedErrors()}}:{valid:!1,errors:i,getNestedErrors(){return a.#a(s,t).getNestedErrors()}}}#a(e,n){let i=this.#r(e,this.preValidateSync(e,n));if(!i.needsOptionValidation)return i.result;let{prevalidationContext:s,preValidationTransaction:t,getNestedErrors:a,optionResults:o,rootErrors:d}=i;if(this.#n&&this.#t){let r=i.objToValidate;if(typeof r=="object"&&r!==null){let l=r[this.#n],u=this.#t.get(l);if(u){let p=u.validate(r,{...s,currentPropertyDescriptor:void 0,rootPropertyDescriptor:void 0});if(p.valid)return{valid:!0,object:p.object,getNestedErrors:a}}}}let y={objToValidate:i.objToValidate,minErrorsCount:Number.MAX_SAFE_INTEGER,resultingErrors:[]};for(let r=0;r<this.#e.length;r++){let l=this.#e[r].validate(y.objToValidate,{...s,currentPropertyDescriptor:void 0,rootPropertyDescriptor:void 0}),u=this.#s(l,r,o,t,y,a);if(u)return u}return d.push("value doesn't match any option in union schema"),{valid:!1,errors:y.resultingErrors,getNestedErrors:a}}async _validateAsync(e,n){let i=this.#r(e,await super.preValidateAsync(e,n));if(!i.needsOptionValidation)return i.result;let{prevalidationContext:s,preValidationTransaction:t,getNestedErrors:a,optionResults:o,rootErrors:d}=i;if(this.#n&&this.#t){let r=i.objToValidate;if(typeof r=="object"&&r!==null){let l=r[this.#n],u=this.#t.get(l);if(u){let p=await u.validateAsync(r,{...s,currentPropertyDescriptor:void 0,rootPropertyDescriptor:void 0});if(p.valid)return{valid:!0,object:p.object,getNestedErrors:a}}}}let y={objToValidate:i.objToValidate,minErrorsCount:Number.MAX_SAFE_INTEGER,resultingErrors:[]};for(let r=0;r<this.#e.length;r++){let l=await this.#e[r].validateAsync(y.objToValidate,{...s,currentPropertyDescriptor:void 0,rootPropertyDescriptor:void 0}),u=this.#s(l,r,o,t,y,a);if(u)return u}return d.push("value doesn't match any option in union schema"),{valid:!1,errors:y.resultingErrors,getNestedErrors:a}}createFromProps(e){return T.create(e)}required(e){return super.required(e)}optional(){return super.optional()}default(e){return super.default(e)}clearDefault(){return super.clearDefault()}brand(e){return super.brand(e)}readonly(){return super.readonly()}or(e){if(!(e instanceof c))throw new Error("schema must be an instance of the SchemaBuilder class");return this.createFromProps({...this.introspect(),options:[...this.#e,e]})}removeOption(e){if(typeof e!="number"||e<0||e>this.#e.length)throw new Error("index must be >= 0 and <= count of the options");return this.createFromProps({...this.introspect(),options:this.#e.filter((n,i)=>i!==e)})}removeFirstOption(){return this.removeOption(0)}reset(e){if(!(e instanceof c))throw new Error("schema must be an instance of the SchemaBuilder class");return this.createFromProps({...this.introspect(),options:[e]})}nullable(){return super.nullable()}notNullable(){return super.notNullable()}},E=T=>f.create({isRequired:!0,options:[T]});export{f as a,E as b};
2
+ //# sourceMappingURL=chunk-ZUPYV5TI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builders/UnionSchemaBuilder.ts"],"sourcesContent":["import type {\n ObjectSchemaBuilder,\n ObjectSchemaValidationResult\n} from './ObjectSchemaBuilder.js';\nimport {\n type BRAND,\n createHybridErrorArray,\n type InferType,\n type NestedValidationResult,\n type PropertyDescriptor,\n SchemaBuilder,\n SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR,\n type ValidationContext,\n type ValidationErrorMessageProvider,\n type ValidationResult\n} from './SchemaBuilder.js';\n\ntype UnionSchemaBuilderCreateProps<\n T extends readonly SchemaBuilder<any, any, any, any, any>[],\n R extends boolean = true\n> = Partial<ReturnType<UnionSchemaBuilder<T, R>['introspect']>>;\n\n/**\n * Mapped tuple type that converts a tuple of SchemaBuilder options into\n * a tuple of their corresponding validation results.\n * Union schema options get `UnionSchemaValidationResult` with recursive\n * `getNestedErrors` navigation; object schema options get\n * `ObjectSchemaValidationResult`; other types get `ValidationResult`.\n */\nexport type OptionValidationResults<\n TOptions extends readonly SchemaBuilder<any, any, any, any, any>[]\n> = {\n [K in keyof TOptions]: TOptions[K] extends UnionSchemaBuilder<\n infer UOptions extends readonly SchemaBuilder<\n any,\n any,\n any,\n any,\n any\n >[],\n any,\n any\n >\n ? UnionSchemaValidationResult<InferType<TOptions[K]>, UOptions>\n : TOptions[K] extends ObjectSchemaBuilder<any, any, any, any>\n ? ObjectSchemaValidationResult<InferType<TOptions[K]>, TOptions[K]>\n : ValidationResult<InferType<TOptions[K]>>;\n};\n\n/**\n * Validation result type returned by `UnionSchemaBuilder.validate()`.\n * Extends `ValidationResult` with:\n * - `getNestedErrors` for root-level union errors and per-branch validation results\n */\nexport type UnionSchemaValidationResult<\n T,\n TOptions extends readonly SchemaBuilder<any, any, any, any, any>[]\n> = ValidationResult<T> & {\n /**\n * Returns root-level union validation errors combined with\n * per-branch validation results.\n * The returned value has both `NestedValidationResult` properties\n * (`errors`, `isValid`, `descriptor`, `seenValue`) and tuple-indexed\n * branch results (`[0]`, `[1]`, etc.).\n */\n getNestedErrors(): OptionValidationResults<TOptions> &\n NestedValidationResult<any, any, any>;\n};\n\ntype SchemaArrayToUnion<\n TArr extends readonly SchemaBuilder<any, any, any, any, any>[]\n> = TArr['length'] extends 1\n ? InferType<TArr[0]>\n : TArr extends readonly [\n infer TFirst extends SchemaBuilder<any, any, any, any, any>,\n ...infer TRest extends SchemaBuilder<any, any, any, any, any>[]\n ]\n ? InferType<TFirst> | SchemaArrayToUnion<[...TRest]>\n : never;\n\ntype TakeBeforeIndex<\n TArr extends readonly SchemaBuilder<any, any, any, any, any>[],\n TIndex extends number\n> = TArr extends [\n ...infer TRest extends SchemaBuilder<any, any, any, any, any>[],\n infer _ extends SchemaBuilder<any, any, any, any, any>\n]\n ? TRest['length'] extends TIndex\n ? TRest\n : TakeBeforeIndex<TRest, TIndex>\n : never;\n\ntype TakeAfterIndex<\n TArr extends readonly SchemaBuilder<any, any, any, any, any>[],\n TIndex extends number,\n TAcc extends readonly SchemaBuilder<any, any, any, any, any>[] = []\n> = TArr extends [\n ...infer TRest extends SchemaBuilder<any, any, any, any, any>[],\n infer TLast extends SchemaBuilder<any, any, any, any, any>\n]\n ? TRest['length'] extends TIndex\n ? TAcc\n : TakeAfterIndex<TRest, TIndex, [TLast, ...TAcc]>\n : never;\n\ntype TakeExceptIndex<\n TArr extends readonly SchemaBuilder<any, any, any, any, any>[],\n TIndex extends number\n> = [...TakeBeforeIndex<TArr, TIndex>, ...TakeAfterIndex<TArr, TIndex>];\n\n/**\n * Union schema builder class. Allows to create schemas\n * containing alternatives. E.g. string | number | Date.\n * Use it when you want to define a schema for a value\n * that can be of different types. The type of the value\n * will be determined by the first schema that succeeds\n * validation. Any schema type can be supplied as variant.\n * Which means that you are not limited to primitive types and\n * can construct complex types as well, e.g. object | array.\n *\n * **NOTE** this class is exported only to give opportunity to extend it\n * by inheriting. It is not recommended to create an instance of this class\n * directly. Use {@link union | union()} function instead.\n *\n * @example\n * ```ts\n * const schema = union(string('foo')).or(string('bar'));\n * const result = schema.validate('foo');\n * // result.valid === true\n * // result.object === 'foo'\n * ```\n *\n * @example\n * ```ts\n * const schema = union(string('foo')).or(string('bar'));\n * const result = schema.validate('baz');\n * // result.valid === false\n * ```\n *\n * @example\n * ```ts\n * const schema = union(string('yes')).or(string('no')).or(number(0)).or(number(1));\n * // equals to 'yes' | 'no' | 0 | 1 in TS\n * const result = schema.validate('yes');\n * // result.valid === true\n * // result.object === 'yes'\n *\n * const result2 = schema.validate(0);\n * // result2.valid === true\n * // result2.object === 0\n *\n * const result3 = schema.validate('baz');\n * // result3.valid === false\n *\n * const result4 = schema.validate(2);\n * // result4.valid === false\n * ```\n *\n * @see {@link union}\n */\nexport class UnionSchemaBuilder<\n TOptions extends readonly SchemaBuilder<any, any, any, any, any>[],\n TRequired extends boolean = true,\n TNullable extends boolean = false,\n TExplicitType = undefined,\n THasDefault extends boolean = false,\n TExtensions = {}\n> extends SchemaBuilder<\n TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n> {\n #options!: TOptions;\n #discriminatorKey: string | null = null;\n #discriminatorMap: Map<\n string | number,\n SchemaBuilder<any, any, any, any, any>\n > | null = null;\n\n /**\n * @hidden\n */\n public static create(props: UnionSchemaBuilderCreateProps<any>) {\n return new UnionSchemaBuilder({\n type: 'union',\n ...props\n });\n }\n\n protected constructor(\n props: UnionSchemaBuilderCreateProps<TOptions, TRequired>\n ) {\n super(props as any);\n\n if (Array.isArray(props.options)) {\n this.#options = props.options;\n this.#detectDiscriminator();\n }\n }\n\n /**\n * Attempts to detect a discriminator property shared by all union options.\n * If all options are object schemas with a common required string/number\n * property that uses `equalsTo` with unique literal values, builds a Map\n * for O(1) dispatch.\n */\n #detectDiscriminator() {\n const options = this.#options;\n if (!options || options.length < 2) return;\n\n // All options must be object schemas\n const introspected: Array<{\n type: string;\n isRequired: boolean;\n properties?: Record<string, SchemaBuilder<any, any, any, any, any>>;\n [k: string]: any;\n }> = [];\n for (const option of options) {\n const info = option.introspect();\n if (info.type !== 'object') return;\n introspected.push(info);\n }\n\n // Find common property keys\n const firstProps = introspected[0].properties;\n if (!firstProps) return;\n\n for (const key of Object.keys(firstProps)) {\n const map = new Map<\n string | number,\n SchemaBuilder<any, any, any, any, any>\n >();\n let isDiscriminator = true;\n\n for (let i = 0; i < introspected.length; i++) {\n const props = introspected[i].properties;\n if (!props || !(key in props)) {\n isDiscriminator = false;\n break;\n }\n\n const propSchema = props[key];\n const propInfo = propSchema.introspect();\n\n // Must be a required string or number with equalsTo\n if (propInfo.isRequired !== true) {\n isDiscriminator = false;\n break;\n }\n\n const equalsTo = (propInfo as any).equalsTo;\n if (equalsTo === undefined || equalsTo === null) {\n isDiscriminator = false;\n break;\n }\n\n if (\n typeof equalsTo !== 'string' &&\n typeof equalsTo !== 'number'\n ) {\n isDiscriminator = false;\n break;\n }\n\n // Check for duplicate discriminator values\n if (map.has(equalsTo)) {\n isDiscriminator = false;\n break;\n }\n\n map.set(equalsTo, options[i]);\n }\n\n if (isDiscriminator && map.size === options.length) {\n this.#discriminatorKey = key;\n this.#discriminatorMap = map;\n return;\n }\n }\n }\n\n public introspect() {\n return {\n ...super.introspect(),\n /**\n * Array of schemas participating in the union.\n */\n options: this.#options\n };\n }\n\n /**\n * Null is a legitimate JavaScript value that a union option (e.g.\n * `NullSchemaBuilder`) may accept. Override the base-class behaviour so\n * that a required union does **not** reject `null` during pre-validation;\n * instead, each option gets the opportunity to validate it.\n * @override\n */\n protected override get isNullRequiredViolation(): boolean {\n return false;\n }\n\n /**\n * @inheritdoc\n */\n public hasType<T>(\n _notUsed?: T\n ): UnionSchemaBuilder<\n TOptions,\n true,\n TNullable,\n T,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n /**\n * @inheritdoc\n */\n public clearHasType(): UnionSchemaBuilder<\n TOptions,\n TRequired,\n TNullable,\n undefined,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n #createValidationSetup(\n object: any,\n superResult: ReturnType<UnionSchemaBuilder<any>['preValidateSync']>\n ) {\n const {\n valid,\n transaction: preValidationTransaction,\n context: prevalidationContext,\n errors\n } = superResult;\n\n // Create a self-referencing property descriptor for the union root\n const selfDescriptor: PropertyDescriptor<any, any, any> = {\n [SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR]: {\n setValue: () => false,\n getValue: (obj: any) => ({\n success: true,\n value: obj\n }),\n getSchema: () => this,\n parent: undefined\n }\n };\n\n // Root error state\n const rootErrors: string[] = [];\n\n const optionResults = createHybridErrorArray(\n [] as any[],\n () => object,\n () => rootErrors,\n () => selfDescriptor[SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR]\n );\n\n const getNestedErrors = (() => optionResults) as any;\n\n if (!valid) {\n rootErrors.push(\n ...(errors || []).map((e: any) => e.message || String(e))\n );\n return {\n needsOptionValidation: false as const,\n result: { valid, errors, getNestedErrors } as any\n };\n }\n\n const {\n object: { validatedObject: objToValidate }\n } = preValidationTransaction!;\n\n if (\n (typeof objToValidate === 'undefined' && !this.isRequired) ||\n (objToValidate === null && (!this.isRequired || this.isNullable))\n ) {\n return {\n needsOptionValidation: false as const,\n result: {\n valid: true,\n object: objToValidate,\n getNestedErrors\n } as any\n };\n }\n\n return {\n needsOptionValidation: true as const,\n objToValidate,\n prevalidationContext,\n preValidationTransaction: preValidationTransaction!,\n getNestedErrors,\n optionResults,\n rootErrors\n };\n }\n\n #processOptionResult(\n optionResult: any,\n index: number,\n optionResults: any,\n preValidationTransaction: any,\n state: {\n objToValidate: any;\n minErrorsCount: number;\n resultingErrors: any[];\n },\n getNestedErrors: any\n ): any | null {\n optionResults[index] = optionResult;\n\n if (optionResult.valid) {\n return {\n valid: true,\n object: optionResult.object as any,\n getNestedErrors\n };\n }\n\n const optErrors = optionResult.errors;\n if (\n Array.isArray(optErrors) &&\n optErrors.length > 0 &&\n optErrors.length < state.minErrorsCount\n ) {\n state.resultingErrors = optErrors as any;\n state.minErrorsCount = optErrors.length;\n }\n\n state.objToValidate =\n preValidationTransaction.rollback().validatedObject;\n return null;\n }\n\n /**\n * Performs synchronous validation of the union schema over `object`. {@inheritDoc SchemaBuilder.validate}\n */\n public validate(\n object: TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType,\n context?: ValidationContext\n ): UnionSchemaValidationResult<\n TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType,\n TOptions\n > {\n return super.validate(object, context) as any;\n }\n\n /**\n * Performs async validation of the union schema over `object`. {@inheritDoc SchemaBuilder.validateAsync}\n */\n public async validateAsync(\n object: TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType,\n context?: ValidationContext\n ): Promise<\n UnionSchemaValidationResult<\n TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType,\n TOptions\n >\n > {\n return super.validateAsync(object, context) as any;\n }\n\n /**\n * Performs synchronous validation of the union schema over `object`.\n * Throws if any preprocessor, validator, or error message provider returns a Promise.\n * @param context Optional `ValidationContext` settings.\n */\n protected _validate(\n object: TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType,\n context?: ValidationContext\n ): UnionSchemaValidationResult<\n TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType,\n TOptions\n > {\n // Fast path: skip preValidateSync + createValidationSetup when\n // there are no preprocessors/validators and context is default.\n if (\n this.canSkipPreValidation &&\n !context?.doNotStopOnFirstError &&\n !context?.rootPropertyDescriptor\n ) {\n // Required / optional check.\n // `undefined` is the canonical \"missing value\" signal — handle it\n // exactly as before (default, optional valid, required error).\n // `null` is a legitimate JavaScript value: for optional unions it is\n // valid without consulting options (original behaviour); for required\n // unions we fall through to option-checking so that a\n // NullSchemaBuilder option can accept it.\n if (typeof object === 'undefined') {\n if (this.hasDefault) {\n object = this.resolveDefaultValue();\n } else if (!this.isRequired) {\n return this.#fastResult(\n true,\n object,\n undefined,\n object,\n context\n );\n } else {\n return this.#fastResult(\n false,\n undefined,\n [\n {\n message: this.getValidationErrorMessageSync(\n this.requiredErrorMessage,\n object as any\n )\n }\n ],\n object,\n context\n );\n }\n } else if (\n object === null &&\n (!this.isRequired || this.isNullable)\n ) {\n // Optional union: null is valid without checking options.\n return this.#fastResult(\n true,\n object,\n undefined,\n object,\n context\n );\n }\n // null + required union: fall through to option checking below.\n\n // Discriminated union: O(1) lookup, no setup overhead\n if (this.#discriminatorKey && this.#discriminatorMap) {\n if (typeof object === 'object' && object !== null) {\n const discriminatorValue = (object as any)[\n this.#discriminatorKey\n ];\n const matchedSchema =\n this.#discriminatorMap.get(discriminatorValue);\n if (matchedSchema) {\n const optionResult = matchedSchema.validate(\n object as any\n );\n return this.#fastResult(\n optionResult.valid,\n optionResult.valid\n ? optionResult.object\n : undefined,\n optionResult.valid\n ? undefined\n : optionResult.errors,\n object,\n context\n );\n }\n // Discriminator value not in map — no option matches\n return this.#fastResult(\n false,\n undefined,\n [\n {\n message:\n \"value doesn't match any option in union schema\"\n }\n ],\n object,\n context\n );\n }\n }\n\n // Non-discriminated union: try options sequentially, no transaction overhead\n if (!this.#discriminatorKey) {\n const options = this.#options;\n let minErrorsCount = Number.MAX_SAFE_INTEGER;\n let resultingErrors: any[] = [];\n\n for (let i = 0; i < options.length; i++) {\n const optionResult = options[i].validate(object as any);\n if (optionResult.valid) {\n return this.#fastResult(\n true,\n optionResult.object,\n undefined,\n object,\n context\n );\n }\n\n const optErrors = optionResult.errors;\n if (\n Array.isArray(optErrors) &&\n optErrors.length > 0 &&\n optErrors.length < minErrorsCount\n ) {\n resultingErrors = optErrors as any;\n minErrorsCount = optErrors.length;\n }\n }\n\n return this.#fastResult(\n false,\n undefined,\n resultingErrors,\n object,\n context\n );\n }\n }\n\n return this.#validateFull(object, context) as any;\n }\n\n /**\n * Build a fast-path result with a lazy `getNestedErrors` that\n * defers to the full validation only when actually called.\n */\n #fastResult(\n valid: boolean,\n obj: any,\n errors: any[] | undefined,\n originalObject: any,\n context: ValidationContext | undefined\n ): any {\n const self = this;\n if (valid) {\n return {\n valid: true,\n object: obj,\n getNestedErrors() {\n return self\n .#validateFull(originalObject, context)\n .getNestedErrors();\n }\n };\n }\n return {\n valid: false,\n errors,\n getNestedErrors() {\n return self\n .#validateFull(originalObject, context)\n .getNestedErrors();\n }\n };\n }\n\n #validateFull(\n object: any,\n context?: ValidationContext\n ): UnionSchemaValidationResult<any, any> {\n const setup = this.#createValidationSetup(\n object,\n this.preValidateSync(object, context)\n );\n\n if (!setup.needsOptionValidation) return setup.result;\n\n const {\n prevalidationContext,\n preValidationTransaction,\n getNestedErrors,\n optionResults,\n rootErrors\n } = setup;\n\n // Fast path: discriminated union with O(1) lookup\n if (this.#discriminatorKey && this.#discriminatorMap) {\n const obj = setup.objToValidate;\n if (typeof obj === 'object' && obj !== null) {\n const discriminatorValue = obj[this.#discriminatorKey];\n const matchedSchema =\n this.#discriminatorMap.get(discriminatorValue);\n if (matchedSchema) {\n const optionResult = matchedSchema.validate(obj, {\n ...prevalidationContext,\n currentPropertyDescriptor: undefined,\n rootPropertyDescriptor: undefined\n } as any);\n if (optionResult.valid) {\n return {\n valid: true,\n object: optionResult.object as any,\n getNestedErrors\n };\n }\n }\n }\n }\n\n const state = {\n objToValidate: setup.objToValidate,\n minErrorsCount: Number.MAX_SAFE_INTEGER,\n resultingErrors: [] as any[]\n };\n\n for (let i = 0; i < this.#options.length; i++) {\n const optionResult = this.#options[i].validate(\n state.objToValidate,\n {\n ...prevalidationContext,\n currentPropertyDescriptor: undefined,\n rootPropertyDescriptor: undefined\n } as any\n );\n\n const earlyReturn = this.#processOptionResult(\n optionResult,\n i,\n optionResults,\n preValidationTransaction,\n state,\n getNestedErrors\n );\n if (earlyReturn) return earlyReturn;\n }\n\n rootErrors.push(\"value doesn't match any option in union schema\");\n\n return {\n valid: false,\n errors: state.resultingErrors,\n getNestedErrors\n };\n }\n\n /**\n * Performs async validation of the union schema over `object`.\n * Supports async preprocessors, validators, and error message providers.\n * @param context Optional `ValidationContext` settings.\n */\n protected async _validateAsync(\n object: TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType,\n context?: ValidationContext\n ): Promise<\n UnionSchemaValidationResult<\n TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType,\n TOptions\n >\n > {\n const setup = this.#createValidationSetup(\n object,\n await super.preValidateAsync(object, context)\n );\n\n if (!setup.needsOptionValidation) return setup.result;\n\n const {\n prevalidationContext,\n preValidationTransaction,\n getNestedErrors,\n optionResults,\n rootErrors\n } = setup;\n\n // Fast path: discriminated union with O(1) lookup\n if (this.#discriminatorKey && this.#discriminatorMap) {\n const obj = setup.objToValidate;\n if (typeof obj === 'object' && obj !== null) {\n const discriminatorValue = obj[this.#discriminatorKey];\n const matchedSchema =\n this.#discriminatorMap.get(discriminatorValue);\n if (matchedSchema) {\n const optionResult = await matchedSchema.validateAsync(\n obj,\n {\n ...prevalidationContext,\n currentPropertyDescriptor: undefined,\n rootPropertyDescriptor: undefined\n } as any\n );\n if (optionResult.valid) {\n return {\n valid: true,\n object: optionResult.object as any,\n getNestedErrors\n };\n }\n }\n }\n }\n\n const state = {\n objToValidate: setup.objToValidate,\n minErrorsCount: Number.MAX_SAFE_INTEGER,\n resultingErrors: [] as any[]\n };\n\n for (let i = 0; i < this.#options.length; i++) {\n const optionResult = await this.#options[i].validateAsync(\n state.objToValidate,\n {\n ...prevalidationContext,\n currentPropertyDescriptor: undefined,\n rootPropertyDescriptor: undefined\n } as any\n );\n\n const earlyReturn = this.#processOptionResult(\n optionResult,\n i,\n optionResults,\n preValidationTransaction,\n state,\n getNestedErrors\n );\n if (earlyReturn) return earlyReturn;\n }\n\n rootErrors.push(\"value doesn't match any option in union schema\");\n\n return {\n valid: false,\n errors: state.resultingErrors,\n getNestedErrors\n };\n }\n\n protected createFromProps<\n T extends readonly SchemaBuilder<any, any, any, any, any>[],\n TReq extends boolean\n >(props: UnionSchemaBuilderCreateProps<T, TReq>): this {\n return UnionSchemaBuilder.create(props as any) as any;\n }\n\n /**\n * @hidden\n */\n public required(\n errorMessage?: ValidationErrorMessageProvider\n ): UnionSchemaBuilder<\n TOptions,\n true,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.required(errorMessage);\n }\n\n /**\n * @hidden\n */\n public optional(): UnionSchemaBuilder<\n TOptions,\n false,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.optional();\n }\n\n /**\n * @hidden\n */\n public default(\n value:\n | (TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType)\n | (() => TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType)\n ): UnionSchemaBuilder<\n TOptions,\n true,\n TNullable,\n TExplicitType,\n true,\n TExtensions\n > &\n TExtensions {\n return super.default(value as any) as any;\n }\n\n /**\n * @hidden\n */\n public clearDefault(): UnionSchemaBuilder<\n TOptions,\n TRequired,\n TNullable,\n TExplicitType,\n false,\n TExtensions\n > &\n TExtensions {\n return super.clearDefault() as any;\n }\n\n /**\n * @hidden\n */\n public brand<TBrand extends string | symbol>(\n _name?: TBrand\n ): UnionSchemaBuilder<\n TOptions,\n TRequired,\n TNullable,\n (TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType) & { readonly [K in BRAND]: TBrand },\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.brand(_name);\n }\n\n /**\n * @hidden\n */\n public readonly(): UnionSchemaBuilder<\n TOptions,\n TRequired,\n TNullable,\n Readonly<\n TExplicitType extends undefined\n ? SchemaArrayToUnion<TOptions>\n : TExplicitType\n >,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.readonly();\n }\n\n /**\n * Adds a new schema option described by `schema`.\n * schema must be an instance of `SchemaBuilder` class ancestor.\n * @param schema schema to be added as an option.\n */\n public or<T extends SchemaBuilder<any, any, any, any, any>>(\n schema: T\n ): UnionSchemaBuilder<\n [...TOptions, T],\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n if (!(schema instanceof SchemaBuilder)) {\n throw new Error(\n 'schema must be an instance of the SchemaBuilder class'\n );\n }\n return this.createFromProps({\n ...this.introspect(),\n options: [...this.#options, schema]\n } as any) as any;\n }\n\n /**\n * Removes option by its `index`. If `index` is out of bounds,\n * an error is thrown.\n * @param index index of the option, starting from `0`.\n */\n public removeOption<T extends number>(\n index: T\n ): UnionSchemaBuilder<\n TakeExceptIndex<TOptions, T>,\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n if (\n typeof index !== 'number' ||\n index < 0 ||\n index > this.#options.length\n ) {\n throw new Error('index must be >= 0 and <= count of the options');\n }\n return this.createFromProps({\n ...this.introspect(),\n options: this.#options.filter((_v, i) => i !== index)\n } as any) as any;\n }\n\n /**\n * Removes first option from the union schema.\n */\n public removeFirstOption(): TOptions extends [\n infer _,\n ...infer TRest extends SchemaBuilder<any, any, any, any, any>[]\n ]\n ? UnionSchemaBuilder<\n TRest,\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions\n : never {\n return this.removeOption(0) as any;\n }\n\n /**\n * Removes all options and replaces them by single `schema` option.\n * Equivalent to `union(schema)` function, but could be useful in some cases.\n * @param schema schema to be added as a single option to the new schema.\n */\n public reset<T extends SchemaBuilder<any, any, any, any, any>>(\n schema: T\n ): UnionSchemaBuilder<\n [T],\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n if (!(schema instanceof SchemaBuilder)) {\n throw new Error(\n 'schema must be an instance of the SchemaBuilder class'\n );\n }\n return this.createFromProps({\n ...this.introspect(),\n options: [schema]\n } as any) as any;\n }\n\n /**\n * @hidden\n */\n public nullable(): UnionSchemaBuilder<\n TOptions,\n TRequired,\n true,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.nullable() as any;\n }\n\n /**\n * @hidden\n */\n public notNullable(): UnionSchemaBuilder<\n TOptions,\n TRequired,\n false,\n TExplicitType,\n THasDefault,\n TExtensions\n > &\n TExtensions {\n return super.notNullable() as any;\n }\n}\n\n/**\n * Creates a union schema.\n * @param schema required and will be considered as a first option for the union schema.\n */\nexport const union = <T extends SchemaBuilder<any, any, any, any, any>>(\n schema: T\n) =>\n UnionSchemaBuilder.create({\n isRequired: true,\n options: [schema]\n }) as UnionSchemaBuilder<[T]>;\n"],"mappings":"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","names":["UnionSchemaBuilder","_UnionSchemaBuilder","SchemaBuilder","#options","#discriminatorKey","#discriminatorMap","props","#detectDiscriminator","options","introspected","option","info","firstProps","key","map","isDiscriminator","i","propInfo","equalsTo","_notUsed","#createValidationSetup","object","superResult","valid","preValidationTransaction","prevalidationContext","errors","selfDescriptor","SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR","obj","rootErrors","optionResults","createHybridErrorArray","getNestedErrors","e","objToValidate","#processOptionResult","optionResult","index","state","optErrors","context","#fastResult","discriminatorValue","matchedSchema","minErrorsCount","resultingErrors","#validateFull","originalObject","self","setup","earlyReturn","errorMessage","value","_name","schema","_v","union"]}
package/dist/core.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ export type { StandardSchemaV1, StandardTypedV1 } from '@standard-schema/spec';
2
+ export { AnySchemaBuilder, any } from './builders/AnySchemaBuilder.js';
3
+ export type { ArraySchemaValidationResult, ElementValidationResult } from './builders/ArraySchemaBuilder.js';
4
+ export { ArraySchemaBuilder, array } from './builders/ArraySchemaBuilder.js';
5
+ export { BooleanSchemaBuilder, boolean } from './builders/BooleanSchemaBuilder.js';
6
+ export { DateSchemaBuilder, date } from './builders/DateSchemaBuilder.js';
7
+ export { ExternSchemaBuilder, extern } from './builders/ExternSchemaBuilder.js';
8
+ export { FunctionSchemaBuilder, func } from './builders/FunctionSchemaBuilder.js';
9
+ export { LazySchemaBuilder, lazy } from './builders/LazySchemaBuilder.js';
10
+ export { NullSchemaBuilder, nul } from './builders/NullSchemaBuilder.js';
11
+ export { NumberSchemaBuilder, number } from './builders/NumberSchemaBuilder.js';
12
+ export { ObjectSchemaBuilder, object, SchemaPropertySelector } from './builders/ObjectSchemaBuilder.js';
13
+ export type { RecordSchemaValidationResult } from './builders/RecordSchemaBuilder.js';
14
+ export { RecordSchemaBuilder, record } from './builders/RecordSchemaBuilder.js';
15
+ export type { PropertyDescriptor, PropertyDescriptorInner, PropertyDescriptorTree, PropertySetterOptions, ValidationErrorMessageProvider } from './builders/SchemaBuilder.js';
16
+ export { BRAND, Brand, InferType, MakeOptional, SchemaBuilder, SchemaValidationError, SYMBOL_HAS_PROPERTIES, SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR, ValidationError, ValidationResult } from './builders/SchemaBuilder.js';
17
+ export { StringSchemaBuilder, string } from './builders/StringSchemaBuilder.js';
18
+ export type { TupleElementValidationResults, TupleSchemaValidationResult } from './builders/TupleSchemaBuilder.js';
19
+ export { TupleSchemaBuilder, tuple } from './builders/TupleSchemaBuilder.js';
20
+ export type { OptionValidationResults, UnionSchemaValidationResult } from './builders/UnionSchemaBuilder.js';
21
+ export { UnionSchemaBuilder, union } from './builders/UnionSchemaBuilder.js';
22
+ export type { CleanExtended, ExtensionConfig, ExtensionDescriptor, FixedMethods, HiddenExtensionMethods } from './extension.js';
23
+ export { defineExtension, withExtensions } from './extension.js';
package/dist/core.js ADDED
@@ -0,0 +1,2 @@
1
+ import{a as q,b as r,c as s,d as t,e as G,f as H}from"./chunk-BFCMDDTX.js";import{a as u,b as v}from"./chunk-KESLT5EE.js";import{a as w,b as x}from"./chunk-NXPH3ZUW.js";import{a as y,b as z}from"./chunk-IJ6FO37G.js";import{a as A,b as B}from"./chunk-FWUEUW2N.js";import{a as C,b as D}from"./chunk-S5TC6NSU.js";import{a as E,b as F}from"./chunk-ZUPYV5TI.js";import{a as e,b as f}from"./chunk-ZAN4ZHCJ.js";import{a as g,b as h}from"./chunk-Z7QZ7IXT.js";import{a as i,b as j}from"./chunk-KFTO7TMB.js";import{a as k,b as l}from"./chunk-YWBNVHR6.js";import{a as m,b as n}from"./chunk-MKAYFPAR.js";import{a as o,b as p}from"./chunk-EUQ5AE3H.js";import{b as a,c as b,d as c,f as d}from"./chunk-CTP4RHDG.js";export{e as AnySchemaBuilder,g as ArraySchemaBuilder,i as BooleanSchemaBuilder,k as DateSchemaBuilder,m as ExternSchemaBuilder,o as FunctionSchemaBuilder,q as LazySchemaBuilder,s as NullSchemaBuilder,u as NumberSchemaBuilder,w as ObjectSchemaBuilder,y as RecordSchemaBuilder,c as SYMBOL_HAS_PROPERTIES,b as SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR,d as SchemaBuilder,a as SchemaValidationError,A as StringSchemaBuilder,C as TupleSchemaBuilder,E as UnionSchemaBuilder,f as any,h as array,j as boolean,l as date,G as defineExtension,n as extern,p as func,r as lazy,t as nul,v as number,x as object,z as record,B as string,D as tuple,F as union,H as withExtensions};
2
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}