@cleverbrush/schema 0.0.0-beta-20260410073748

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 (85) hide show
  1. package/README.md +1409 -0
  2. package/dist/builders/AnySchemaBuilder.d.ts +116 -0
  3. package/dist/builders/AnySchemaBuilder.js +2 -0
  4. package/dist/builders/AnySchemaBuilder.js.map +1 -0
  5. package/dist/builders/ArraySchemaBuilder.d.ts +214 -0
  6. package/dist/builders/ArraySchemaBuilder.js +2 -0
  7. package/dist/builders/ArraySchemaBuilder.js.map +1 -0
  8. package/dist/builders/BooleanSchemaBuilder.d.ts +146 -0
  9. package/dist/builders/BooleanSchemaBuilder.js +2 -0
  10. package/dist/builders/BooleanSchemaBuilder.js.map +1 -0
  11. package/dist/builders/DateSchemaBuilder.d.ts +277 -0
  12. package/dist/builders/DateSchemaBuilder.js +2 -0
  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 +246 -0
  18. package/dist/builders/FunctionSchemaBuilder.js +2 -0
  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 +273 -0
  23. package/dist/builders/NumberSchemaBuilder.js +2 -0
  24. package/dist/builders/NumberSchemaBuilder.js.map +1 -0
  25. package/dist/builders/ObjectSchemaBuilder.d.ts +517 -0
  26. package/dist/builders/ObjectSchemaBuilder.js +2 -0
  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 +947 -0
  33. package/dist/builders/StringSchemaBuilder.d.ts +291 -0
  34. package/dist/builders/StringSchemaBuilder.js +2 -0
  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 +227 -0
  40. package/dist/builders/UnionSchemaBuilder.js +2 -0
  41. package/dist/builders/UnionSchemaBuilder.js.map +1 -0
  42. package/dist/chunk-CTP4RHDG.js +2 -0
  43. package/dist/chunk-CTP4RHDG.js.map +1 -0
  44. package/dist/chunk-FWUEUW2N.js +2 -0
  45. package/dist/chunk-FWUEUW2N.js.map +1 -0
  46. package/dist/chunk-IJ6FO37G.js +2 -0
  47. package/dist/chunk-IJ6FO37G.js.map +1 -0
  48. package/dist/chunk-KESLT5EE.js +2 -0
  49. package/dist/chunk-KESLT5EE.js.map +1 -0
  50. package/dist/chunk-KFTO7TMB.js +2 -0
  51. package/dist/chunk-KFTO7TMB.js.map +1 -0
  52. package/dist/chunk-MKAYFPAR.js +2 -0
  53. package/dist/chunk-MKAYFPAR.js.map +1 -0
  54. package/dist/chunk-NXPH3ZUW.js +2 -0
  55. package/dist/chunk-NXPH3ZUW.js.map +1 -0
  56. package/dist/chunk-OOPF7RXS.js +2 -0
  57. package/dist/chunk-OOPF7RXS.js.map +1 -0
  58. package/dist/chunk-S5TC6NSU.js +2 -0
  59. package/dist/chunk-S5TC6NSU.js.map +1 -0
  60. package/dist/chunk-YWBNVHR6.js +2 -0
  61. package/dist/chunk-YWBNVHR6.js.map +1 -0
  62. package/dist/chunk-Z72HXYKX.js +2 -0
  63. package/dist/chunk-Z72HXYKX.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 -0
  82. package/dist/index.js +2 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/utils/transaction.d.ts +69 -0
  85. package/package.json +104 -0
@@ -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{f as n}from"./chunk-CTP4RHDG.js";var r=class s extends n{#e=[];#a;static create(e){return new s({type:"function",...e})}constructor(e){super(e),Array.isArray(e.parameters)&&(this.#e=e.parameters.filter(a=>a instanceof n)),e.returnType instanceof n&&(this.#a=e.returnType)}hasType(e){return this.createFromProps({...this.introspect()})}clearHasType(){return this.createFromProps({...this.introspect()})}introspect(){return{...super.introspect(),parameters:[...this.#e],returnType:this.#a}}#t(e){let{valid:a,transaction:i,errors:u}=e;if(!a)return{valid:a,errors:u};let{object:{validatedObject:t}}=i;return typeof t>"u"&&!this.isRequired||t===null&&(!this.isRequired||this.isNullable)?{valid:!0,object:t}:typeof t!="function"?{valid:!1,errors:[{message:`expected type function, but saw ${typeof t}`}]}:{valid:!0,object:t}}validate(e,a){return super.validate(e,a)}async validateAsync(e,a){return super.validateAsync(e,a)}_validate(e,a){return this.#t(this.preValidateSync(e,a))}async _validateAsync(e,a){return this.#t(await super.preValidateAsync(e,a))}createFromProps(e){return s.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()}addParameter(e){return this.createFromProps({...this.introspect(),parameters:[...this.#e,e]})}hasReturnType(e){return this.createFromProps({...this.introspect(),returnType:e})}notNullable(){return super.notNullable()}},T=()=>r.create({isRequired:!0});export{r as a,T as b};
2
+ //# sourceMappingURL=chunk-Z72HXYKX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builders/FunctionSchemaBuilder.ts"],"sourcesContent":["import {\n type BRAND,\n type InferType,\n SchemaBuilder,\n type ValidationContext,\n type ValidationErrorMessageProvider,\n type ValidationResult\n} from './SchemaBuilder.js';\n\ntype FunctionSchemaBuilderCreateProps<R extends boolean = true> = Partial<\n ReturnType<FunctionSchemaBuilder<R>['introspect']>\n>;\n\ntype InferParameters<TParams extends SchemaBuilder<any, any, any, any, any>[]> =\n {\n [K in keyof TParams]: InferType<TParams[K]>;\n };\n\n/**\n * Schema builder for functions. Allows to define a schema for a function.\n * It can be required or optional, and may carry typed parameter and return-type\n * schemas so that the inferred TypeScript function signature is fully typed.\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 func | func()} function instead.\n *\n * @example Basic validation\n * ```ts\n * const schema = func();\n * const result = schema.validate(() => {});\n * // result.valid === true\n * // result.object === () => {}\n * ```\n *\n * @example Optional function schema\n * ```ts\n * const schema = func().optional();\n * const result = schema.validate(undefined);\n * // result.valid === true\n * // result.object === undefined\n * ```\n *\n * @example Typed parameters and return type\n * ```ts\n * import { func, string, number, InferType } from '@cleverbrush/schema';\n *\n * const greet = func()\n * .addParameter(string()) // first param: string\n * .addParameter(number().optional()) // second param: number | undefined\n * .hasReturnType(string()); // return type: string\n *\n * type Greet = InferType<typeof greet>;\n * // → (param0: string, param1: number | undefined) => string\n *\n * // Introspect at runtime\n * const info = greet.introspect();\n * // info.parameters → [StringSchemaBuilder, NumberSchemaBuilder]\n * // info.returnType → StringSchemaBuilder\n * ```\n *\n * @see {@link func}\n */\nexport class FunctionSchemaBuilder<\n TRequired extends boolean = true,\n TNullable extends boolean = false,\n TExplicitType = undefined,\n THasDefault extends boolean = false,\n TExtensions = {},\n TParameters extends SchemaBuilder<any, any, any, any, any>[] = [],\n TReturnTypeSchema extends\n | SchemaBuilder<any, any, any, any, any>\n | undefined = undefined,\n TResult = TExplicitType extends undefined\n ? (\n ...args: TParameters extends []\n ? any[]\n : InferParameters<TParameters>\n ) => TReturnTypeSchema extends SchemaBuilder<any, any, any, any, any>\n ? InferType<TReturnTypeSchema>\n : any\n : TExplicitType\n> extends SchemaBuilder<\n TResult,\n TRequired,\n TNullable,\n THasDefault,\n TExtensions\n> {\n #parameters: SchemaBuilder<any, any, any, any, any>[] = [];\n #returnType?: SchemaBuilder<any, any, any, any, any>;\n\n /**\n * @hidden\n */\n public static create(props: FunctionSchemaBuilderCreateProps<any>) {\n return new FunctionSchemaBuilder({\n type: 'function',\n ...props\n });\n }\n\n protected constructor(props: FunctionSchemaBuilderCreateProps<TRequired>) {\n super(props as any);\n\n if (Array.isArray(props.parameters)) {\n this.#parameters = props.parameters.filter(\n p => p instanceof SchemaBuilder\n );\n }\n\n if (props.returnType instanceof SchemaBuilder) {\n this.#returnType = props.returnType;\n }\n }\n\n /**\n * @hidden\n */\n public hasType<T>(\n _notUsed?: T\n ): FunctionSchemaBuilder<\n true,\n TNullable,\n T,\n THasDefault,\n TExtensions,\n TParameters,\n TReturnTypeSchema\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n /**\n * @hidden\n */\n public clearHasType(): FunctionSchemaBuilder<\n TRequired,\n TNullable,\n undefined,\n THasDefault,\n TExtensions,\n TParameters,\n TReturnTypeSchema\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect()\n } as any) as any;\n }\n\n /**\n * Returns an object describing the current schema configuration.\n *\n * In addition to the base fields exposed by {@link SchemaBuilder.introspect},\n * the following fields are included:\n *\n * - `parameters` — an array of {@link SchemaBuilder} instances accumulated via\n * {@link addParameter}. Each element describes one positional parameter of the\n * function in the order they were added.\n * - `returnType` — the {@link SchemaBuilder} set via {@link hasReturnType}, or\n * `undefined` when no return-type schema has been configured.\n *\n * @example\n * ```ts\n * const schema = func()\n * .addParameter(string())\n * .addParameter(number())\n * .hasReturnType(boolean());\n *\n * const info = schema.introspect();\n * // info.parameters.length === 2\n * // info.returnType instanceof BooleanSchemaBuilder\n * ```\n */\n public introspect() {\n return {\n ...super.introspect(),\n /** List of parameter schemas added via {@link addParameter}. */\n parameters: [...this.#parameters],\n /** Return type schema set via {@link hasReturnType}, or `undefined` if not set. */\n returnType: this.#returnType\n };\n }\n\n #buildResult(\n superResult: ReturnType<FunctionSchemaBuilder['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 if (\n (typeof objToValidate === 'undefined' && !this.isRequired) ||\n (objToValidate === null && (!this.isRequired || this.isNullable))\n ) {\n return {\n valid: true,\n object: objToValidate\n };\n }\n\n if (typeof objToValidate !== 'function') {\n return {\n valid: false,\n errors: [\n {\n message: `expected type function, but saw ${typeof objToValidate}`\n }\n ]\n };\n }\n\n return {\n valid: true,\n object: 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 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: FunctionSchemaBuilderCreateProps<TReq>\n ): this {\n return FunctionSchemaBuilder.create(props as any) as any;\n }\n\n /**\n * @hidden\n */\n public required(\n errorMessage?: ValidationErrorMessageProvider\n ): FunctionSchemaBuilder<\n true,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions,\n TParameters,\n TReturnTypeSchema\n > &\n TExtensions {\n return super.required(errorMessage);\n }\n\n /**\n * @hidden\n */\n public optional(): FunctionSchemaBuilder<\n false,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions,\n TParameters,\n TReturnTypeSchema\n > &\n TExtensions {\n return super.optional();\n }\n\n /**\n * @hidden\n */\n public default(\n value: TResult | (() => TResult)\n ): FunctionSchemaBuilder<\n true,\n TNullable,\n TExplicitType,\n true,\n TExtensions,\n TParameters,\n TReturnTypeSchema\n > &\n TExtensions {\n return super.default(value) as any;\n }\n\n /**\n * @hidden\n */\n public clearDefault(): FunctionSchemaBuilder<\n TRequired,\n TNullable,\n TExplicitType,\n false,\n TExtensions,\n TParameters,\n TReturnTypeSchema\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 ): FunctionSchemaBuilder<\n TRequired,\n TNullable,\n TResult & { readonly [K in BRAND]: TBrand },\n THasDefault,\n TExtensions,\n TParameters,\n TReturnTypeSchema\n > &\n TExtensions {\n return super.brand(_name);\n }\n\n /**\n * Marks the inferred type as `Readonly<Function>`. Sets the\n * `isReadonly` introspection flag for tooling consistency.\n *\n * @see {@link SchemaBuilder.readonly}\n */\n public readonly(): FunctionSchemaBuilder<\n TRequired,\n TNullable,\n Readonly<TResult>,\n THasDefault,\n TExtensions,\n TParameters,\n TReturnTypeSchema\n > &\n TExtensions {\n return super.readonly();\n }\n\n /**\n * @hidden\n */\n public nullable(): FunctionSchemaBuilder<\n TRequired,\n true,\n TExplicitType,\n THasDefault,\n TExtensions,\n TParameters,\n TReturnTypeSchema\n > &\n TExtensions {\n return super.nullable() as any;\n }\n\n /**\n * Appends a positional parameter schema to the function schema.\n *\n * Each call extends the inferred function signature by one parameter.\n * The full list of parameter schemas is available at runtime via\n * `introspect().parameters`.\n *\n * Parameter order matches the call order — the first `addParameter()` call\n * defines the type of the first argument, the second call defines the second\n * argument, and so on.\n *\n * @param schema - The schema describing the parameter. Pass an optional schema\n * (e.g. `string().optional()`) to make the corresponding argument optional.\n *\n * @example\n * ```ts\n * const fn = func()\n * .addParameter(string()) // (a: string, ...) => any\n * .addParameter(number().optional()) // (..., b?: number) => any\n * .addParameter(boolean()); // (..., c: boolean) => any\n *\n * type Fn = InferType<typeof fn>;\n * // → (a: string, b: number | undefined, c: boolean) => any\n * ```\n */\n public addParameter<TSchema extends SchemaBuilder<any, any, any, any, any>>(\n schema: TSchema\n ): FunctionSchemaBuilder<\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions,\n [...TParameters, TSchema],\n TReturnTypeSchema\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n parameters: [...this.#parameters, schema]\n } as any) as any;\n }\n\n /**\n * Sets the return type schema for the function schema.\n *\n * Replaces any previously set return type. The inferred function signature\n * gains a concrete return type instead of `any`. The schema is accessible at\n * runtime via `introspect().returnType`.\n *\n * @param schema - The schema describing the return type of the function.\n *\n * @example\n * ```ts\n * const fn = func()\n * .addParameter(string())\n * .hasReturnType(number());\n *\n * type Fn = InferType<typeof fn>;\n * // → (param0: string) => number\n *\n * fn.introspect().returnType; // NumberSchemaBuilder\n * ```\n */\n public hasReturnType<\n TSchema extends SchemaBuilder<any, any, any, any, any>\n >(\n schema: TSchema\n ): FunctionSchemaBuilder<\n TRequired,\n TNullable,\n TExplicitType,\n THasDefault,\n TExtensions,\n TParameters,\n TSchema\n > &\n TExtensions {\n return this.createFromProps({\n ...this.introspect(),\n returnType: schema\n } as any) as any;\n }\n\n /**\n * @hidden\n */\n public notNullable(): FunctionSchemaBuilder<\n TRequired,\n false,\n TExplicitType,\n THasDefault,\n TExtensions,\n TParameters,\n TReturnTypeSchema\n > &\n TExtensions {\n return super.notNullable() as any;\n }\n}\n\n/**\n * Creates a `function` schema that validates the value is a JavaScript function.\n *\n * The returned builder is immutable and fully chainable. Use\n * {@link FunctionSchemaBuilder.addParameter} to annotate the expected parameter\n * types and {@link FunctionSchemaBuilder.hasReturnType} to annotate the return\n * type — the inferred TypeScript function signature is updated automatically.\n *\n * @returns A new {@link FunctionSchemaBuilder} with `isRequired` set to `true`.\n *\n * @example\n * ```ts\n * import { func, string, number, InferType } from '@cleverbrush/schema';\n *\n * const schema = func()\n * .addParameter(string())\n * .addParameter(number().optional())\n * .hasReturnType(string());\n *\n * type Fn = InferType<typeof schema>;\n * // → (param0: string, param1?: number) => string\n *\n * schema.validate(() => 'hello'); // { valid: true }\n * schema.validate('not a fn'); // { valid: false }\n * ```\n *\n * @see {@link FunctionSchemaBuilder}\n */\nexport const func = () =>\n FunctionSchemaBuilder.create({\n isRequired: true\n }) as FunctionSchemaBuilder<true>;\n"],"mappings":"wCA+DO,IAAMA,EAAN,MAAMC,UAmBHC,CAMR,CACEC,GAAwD,CAAC,EACzDC,GAKA,OAAc,OAAOC,EAA8C,CAC/D,OAAO,IAAIJ,EAAsB,CAC7B,KAAM,WACN,GAAGI,CACP,CAAC,CACL,CAEU,YAAYA,EAAoD,CACtE,MAAMA,CAAY,EAEd,MAAM,QAAQA,EAAM,UAAU,IAC9B,KAAKF,GAAcE,EAAM,WAAW,OAChCC,GAAKA,aAAaJ,CACtB,GAGAG,EAAM,sBAAsBH,IAC5B,KAAKE,GAAcC,EAAM,WAEjC,CAKO,QACHE,EAUY,CACZ,OAAO,KAAK,gBAAgB,CACxB,GAAG,KAAK,WAAW,CACvB,CAAQ,CACZ,CAKO,cASS,CACZ,OAAO,KAAK,gBAAgB,CACxB,GAAG,KAAK,WAAW,CACvB,CAAQ,CACZ,CA0BO,YAAa,CAChB,MAAO,CACH,GAAG,MAAM,WAAW,EAEpB,WAAY,CAAC,GAAG,KAAKJ,EAAW,EAEhC,WAAY,KAAKC,EACrB,CACJ,CAEAI,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,OACK,OAAOE,EAAkB,KAAe,CAAC,KAAK,YAC9CA,IAAkB,OAAS,CAAC,KAAK,YAAc,KAAK,YAE9C,CACH,MAAO,GACP,OAAQA,CACZ,EAGA,OAAOA,GAAkB,WAClB,CACH,MAAO,GACP,OAAQ,CACJ,CACI,QAAS,mCAAmC,OAAOA,CAAa,EACpE,CACJ,CACJ,EAGG,CACH,MAAO,GACP,OAAQA,CACZ,CACJ,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,gBACNV,EACI,CACJ,OAAOJ,EAAsB,OAAOI,CAAY,CACpD,CAKO,SACHW,EAUY,CACZ,OAAO,MAAM,SAASA,CAAY,CACtC,CAKO,UASS,CACZ,OAAO,MAAM,SAAS,CAC1B,CAKO,QACHC,EAUY,CACZ,OAAO,MAAM,QAAQA,CAAK,CAC9B,CAKO,cASS,CACZ,OAAO,MAAM,aAAa,CAC9B,CAKO,MACHC,EAUY,CACZ,OAAO,MAAM,MAAMA,CAAK,CAC5B,CAQO,UASS,CACZ,OAAO,MAAM,SAAS,CAC1B,CAKO,UASS,CACZ,OAAO,MAAM,SAAS,CAC1B,CA2BO,aACHC,EAUY,CACZ,OAAO,KAAK,gBAAgB,CACxB,GAAG,KAAK,WAAW,EACnB,WAAY,CAAC,GAAG,KAAKhB,GAAagB,CAAM,CAC5C,CAAQ,CACZ,CAuBO,cAGHA,EAUY,CACZ,OAAO,KAAK,gBAAgB,CACxB,GAAG,KAAK,WAAW,EACnB,WAAYA,CAChB,CAAQ,CACZ,CAKO,aASS,CACZ,OAAO,MAAM,YAAY,CAC7B,CACJ,EA8BaC,EAAO,IAChBpB,EAAsB,OAAO,CACzB,WAAY,EAChB,CAAC","names":["FunctionSchemaBuilder","_FunctionSchemaBuilder","SchemaBuilder","#parameters","#returnType","props","p","_notUsed","#buildResult","superResult","valid","preValidationTransaction","errors","objToValidate","object","context","errorMessage","value","_name","schema","func"]}
@@ -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-OOPF7RXS.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-Z72HXYKX.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":[]}