@vielzeug/spell 26.10.15 → 26.10.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_dev.cjs.map +1 -1
- package/dist/_dev.js.map +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/formats.cjs.map +1 -1
- package/dist/formats.js +1 -1
- package/dist/formats.js.map +1 -1
- package/dist/json-schema.cjs.map +1 -1
- package/dist/json-schema.js.map +1 -1
- package/dist/json.js +1 -1
- package/dist/messages.cjs.map +1 -1
- package/dist/messages.js.map +1 -1
- package/dist/s.cjs.map +1 -1
- package/dist/s.js.map +1 -1
- package/dist/safe-object.cjs.map +1 -1
- package/dist/safe-object.js +1 -1
- package/dist/safe-object.js.map +1 -1
- package/dist/schemas/array.cjs.map +1 -1
- package/dist/schemas/array.js.map +1 -1
- package/dist/schemas/bigint.cjs.map +1 -1
- package/dist/schemas/bigint.js.map +1 -1
- package/dist/schemas/boolean.cjs.map +1 -1
- package/dist/schemas/boolean.js.map +1 -1
- package/dist/schemas/date.cjs.map +1 -1
- package/dist/schemas/date.js.map +1 -1
- package/dist/schemas/enum.cjs.map +1 -1
- package/dist/schemas/enum.js.map +1 -1
- package/dist/schemas/instanceof.cjs.map +1 -1
- package/dist/schemas/instanceof.js.map +1 -1
- package/dist/schemas/intersect.cjs.map +1 -1
- package/dist/schemas/intersect.js.map +1 -1
- package/dist/schemas/lazy.cjs.map +1 -1
- package/dist/schemas/lazy.js.map +1 -1
- package/dist/schemas/literal.cjs.map +1 -1
- package/dist/schemas/literal.js.map +1 -1
- package/dist/schemas/map.cjs.map +1 -1
- package/dist/schemas/map.js +1 -1
- package/dist/schemas/map.js.map +1 -1
- package/dist/schemas/never.cjs.map +1 -1
- package/dist/schemas/never.js.map +1 -1
- package/dist/schemas/number.cjs.map +1 -1
- package/dist/schemas/number.js.map +1 -1
- package/dist/schemas/object.cjs.map +1 -1
- package/dist/schemas/object.js.map +1 -1
- package/dist/schemas/raw-or.cjs.map +1 -1
- package/dist/schemas/raw-or.js.map +1 -1
- package/dist/schemas/record.cjs.map +1 -1
- package/dist/schemas/record.js.map +1 -1
- package/dist/schemas/set.cjs.map +1 -1
- package/dist/schemas/set.js +1 -1
- package/dist/schemas/set.js.map +1 -1
- package/dist/schemas/string.cjs.map +1 -1
- package/dist/schemas/string.js.map +1 -1
- package/dist/schemas/tuple.cjs.map +1 -1
- package/dist/schemas/tuple.js.map +1 -1
- package/dist/schemas/union.cjs.map +1 -1
- package/dist/schemas/union.js.map +1 -1
- package/dist/schemas/variant.cjs.map +1 -1
- package/dist/schemas/variant.js +1 -1
- package/dist/schemas/variant.js.map +1 -1
- package/dist/spell.cjs.map +1 -1
- package/dist/spell.iife.js.map +1 -1
- package/dist/spell.js +2235 -2
- package/dist/spell.js.map +1 -1
- package/dist/tolerate.cjs.map +1 -1
- package/dist/tolerate.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validators.cjs.map +1 -1
- package/dist/validators.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.cjs","names":[],"sources":["../../src/schemas/date.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class DateSchema<Input = Date> extends Schema<Date, Input> {\n protected override get _kind(): string {\n return 'date';\n }\n\n constructor() {\n super((value, ctx) =>\n value instanceof Date && !Number.isNaN(value.getTime())\n ? null\n : fail(ErrorCode.invalid_date, ctx!.messages.date.type()),\n );\n }\n\n min(date: Date, message?: MessageFn<{ min: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed >= date\n ? null\n : fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.date.min, { min: date, value: typed }), {\n min: date,\n });\n });\n }\n\n max(date: Date, message?: MessageFn<{ max: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed <= date\n ? null\n : fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.date.max, { max: date, value: typed }), {\n max: date,\n });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'date' };\n }\n\n static coerce(): DateSchema<unknown> {\n return new DateSchema().preprocess((v: unknown) => {\n if (v instanceof Date) return v;\n\n if (typeof v === 'string' || typeof v === 'number') return new Date(v);\n\n return v;\n });\n }\n}\n"],"mappings":"oFAIA,
|
|
1
|
+
{"version":3,"file":"date.cjs","names":["Schema","fail","ErrorCode","resolveMessage","require_errors","require_types","require_core","DateSchema","value","ctx","typed","date","message","v"],"sources":["../../src/schemas/date.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class DateSchema<Input = Date> extends Schema<Date, Input> {\n protected override get _kind(): string {\n return 'date';\n }\n\n constructor() {\n super((value, ctx) =>\n value instanceof Date && !Number.isNaN(value.getTime())\n ? null\n : fail(ErrorCode.invalid_date, ctx!.messages.date.type()),\n );\n }\n\n min(date: Date, message?: MessageFn<{ min: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed >= date\n ? null\n : fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.date.min, { min: date, value: typed }), {\n min: date,\n });\n });\n }\n\n max(date: Date, message?: MessageFn<{ max: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed <= date\n ? null\n : fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.date.max, { max: date, value: typed }), {\n max: date,\n });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'date' };\n }\n\n static coerce(): DateSchema<unknown> {\n return new DateSchema().preprocess((v: unknown) => {\n if (v instanceof Date) return v;\n\n if (typeof v === 'string' || typeof v === 'number') return new Date(v);\n\n return v;\n });\n }\n}\n"],"mappings":"A,oFAIA,IAAaO,EAAb,MAAaA,UAAiCP,EAAAA,MAAoB,CAChE,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,aAAc,CACZ,OAAO,EAAO,IACZQ,aAAiB,MAAQ,CAAC,OAAO,MAAMA,EAAM,QAAQ,CAAC,EAClD,KACAP,EAAAA,KAAKC,EAAAA,UAAU,aAAcO,EAAK,SAAS,KAAK,KAAK,CAAC,CAC5D,CACF,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMC,EAAQF,EAEd,OAAOE,GAASC,EACZ,KACAV,EAAAA,KAAKC,EAAAA,UAAU,UAAWC,EAAAA,eAAeS,GAAWH,EAAK,SAAS,KAAK,IAAK,CAAE,IAAKE,EAAM,MAAOD,CAAM,CAAC,EAAG,CACxG,IAAKC,CACP,CAAC,CACP,CAAC,CACH,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMD,EAAQF,EAEd,OAAOE,GAASC,EACZ,KACAV,EAAAA,KAAKC,EAAAA,UAAU,QAASC,EAAAA,eAAeS,GAAWH,EAAK,SAAS,KAAK,IAAK,CAAE,IAAKE,EAAM,MAAOD,CAAM,CAAC,EAAG,CACtG,IAAKC,CACP,CAAC,CACP,CAAC,CACH,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,OAAO,QAA8B,CACnC,OAAO,IAAIJ,EAAW,CAAC,CAAC,WAAY,GAC9BM,aAAa,KAAaA,EAE1B,OAAOA,GAAM,UAAY,OAAOA,GAAM,SAAiB,IAAI,KAAKA,CAAC,EAE9DA,CACR,CACH,CACF,E"}
|
package/dist/schemas/date.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","names":[],"sources":["../../src/schemas/date.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class DateSchema<Input = Date> extends Schema<Date, Input> {\n protected override get _kind(): string {\n return 'date';\n }\n\n constructor() {\n super((value, ctx) =>\n value instanceof Date && !Number.isNaN(value.getTime())\n ? null\n : fail(ErrorCode.invalid_date, ctx!.messages.date.type()),\n );\n }\n\n min(date: Date, message?: MessageFn<{ min: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed >= date\n ? null\n : fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.date.min, { min: date, value: typed }), {\n min: date,\n });\n });\n }\n\n max(date: Date, message?: MessageFn<{ max: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed <= date\n ? null\n : fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.date.max, { max: date, value: typed }), {\n max: date,\n });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'date' };\n }\n\n static coerce(): DateSchema<unknown> {\n return new DateSchema().preprocess((v: unknown) => {\n if (v instanceof Date) return v;\n\n if (typeof v === 'string' || typeof v === 'number') return new Date(v);\n\n return v;\n });\n }\n}\n"],"mappings":"oIAIA,
|
|
1
|
+
{"version":3,"file":"date.js","names":["DateSchema","Schema","value","fail","ErrorCode","ctx","typed","date","resolveMessage","message","v"],"sources":["../../src/schemas/date.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class DateSchema<Input = Date> extends Schema<Date, Input> {\n protected override get _kind(): string {\n return 'date';\n }\n\n constructor() {\n super((value, ctx) =>\n value instanceof Date && !Number.isNaN(value.getTime())\n ? null\n : fail(ErrorCode.invalid_date, ctx!.messages.date.type()),\n );\n }\n\n min(date: Date, message?: MessageFn<{ min: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed >= date\n ? null\n : fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.date.min, { min: date, value: typed }), {\n min: date,\n });\n });\n }\n\n max(date: Date, message?: MessageFn<{ max: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed <= date\n ? null\n : fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.date.max, { max: date, value: typed }), {\n max: date,\n });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'date' };\n }\n\n static coerce(): DateSchema<unknown> {\n return new DateSchema().preprocess((v: unknown) => {\n if (v instanceof Date) return v;\n\n if (typeof v === 'string' || typeof v === 'number') return new Date(v);\n\n return v;\n });\n }\n}\n"],"mappings":"A,oIAIA,IAAaA,EAAb,MAAaA,UAAiCC,CAAoB,CAChE,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,aAAc,CACZ,OAAO,EAAO,IACZC,aAAiB,MAAQ,CAAC,OAAO,MAAMA,EAAM,QAAQ,CAAC,EAClD,KACAC,EAAKC,EAAU,aAAcC,EAAK,SAAS,KAAK,KAAK,CAAC,CAC5D,CACF,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMC,EAAQJ,EAEd,OAAOI,GAASC,EACZ,KACAJ,EAAKC,EAAU,UAAWI,EAAeC,GAAWJ,EAAK,SAAS,KAAK,IAAK,CAAE,IAAKE,EAAM,MAAOD,CAAM,CAAC,EAAG,CACxG,IAAKC,CACP,CAAC,CACP,CAAC,CACH,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMD,EAAQJ,EAEd,OAAOI,GAASC,EACZ,KACAJ,EAAKC,EAAU,QAASI,EAAeC,GAAWJ,EAAK,SAAS,KAAK,IAAK,CAAE,IAAKE,EAAM,MAAOD,CAAM,CAAC,EAAG,CACtG,IAAKC,CACP,CAAC,CACP,CAAC,CACH,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,OAAO,QAA8B,CACnC,OAAO,IAAIP,EAAW,CAAC,CAAC,WAAY,GAC9BU,aAAa,KAAaA,EAE1B,OAAOA,GAAM,UAAY,OAAOA,GAAM,SAAiB,IAAI,KAAKA,CAAC,EAE9DA,CACR,CACH,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enum.cjs","names":[],"sources":["../../src/schemas/enum.ts"],"sourcesContent":["import type { SchemaDescriptor, ValidateFn } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport type EnumValues = readonly [string | number, ...(string | number)[]];\ntype EnumType<T extends EnumValues> = T[number];\n\nfunction buildEnumValidator(values: readonly unknown[]): ValidateFn {\n const set = new Set<unknown>(values);\n\n return (value, ctx) =>\n set.has(value)\n ? null\n : [\n {\n code: ErrorCode.invalid_enum,\n message: ctx!.messages.enum.invalid({ values }),\n params: { values },\n path: [],\n },\n ];\n}\n\nexport class EnumSchema<T extends EnumValues> extends Schema<EnumType<T>, EnumType<T>> {\n readonly values: T;\n\n protected override get _kind(): string {\n return 'enum';\n }\n\n constructor(values: T) {\n super(buildEnumValidator(values));\n this.values = values;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'enum', values: this.values };\n }\n}\n"],"mappings":"yDAOA,
|
|
1
|
+
{"version":3,"file":"enum.cjs","names":["ErrorCode","Schema","require_types","require_core","buildEnumValidator","set","values","value","ctx","EnumSchema"],"sources":["../../src/schemas/enum.ts"],"sourcesContent":["import type { SchemaDescriptor, ValidateFn } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport type EnumValues = readonly [string | number, ...(string | number)[]];\ntype EnumType<T extends EnumValues> = T[number];\n\nfunction buildEnumValidator(values: readonly unknown[]): ValidateFn {\n const set = new Set<unknown>(values);\n\n return (value, ctx) =>\n set.has(value)\n ? null\n : [\n {\n code: ErrorCode.invalid_enum,\n message: ctx!.messages.enum.invalid({ values }),\n params: { values },\n path: [],\n },\n ];\n}\n\nexport class EnumSchema<T extends EnumValues> extends Schema<EnumType<T>, EnumType<T>> {\n readonly values: T;\n\n protected override get _kind(): string {\n return 'enum';\n }\n\n constructor(values: T) {\n super(buildEnumValidator(values));\n this.values = values;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'enum', values: this.values };\n }\n}\n"],"mappings":"A,yDAOA,SAASI,EAAmB,EAAwC,CAClE,IAAMC,EAAM,IAAI,IAAaC,CAAM,EAEnC,OAAQ,EAAO,IACbD,EAAI,IAAIE,CAAK,EACT,KACA,CACE,CACE,KAAMP,EAAAA,UAAU,aAChB,QAASQ,EAAK,SAAS,KAAK,QAAQ,CAAE,QAAO,CAAC,EAC9C,OAAQ,CAAE,QAAO,EACjB,KAAM,CAAC,CACT,CACF,CACR,CAEA,IAAaC,EAAb,cAAsDR,EAAAA,MAAiC,CACrF,OAEA,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,YAAY,EAAW,CACrB,MAAMG,EAAmBE,CAAM,CAAC,EAChC,KAAK,OAASA,CAChB,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,OAAQ,OAAQ,KAAK,MAAO,CACtE,CACF,E"}
|
package/dist/schemas/enum.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enum.js","names":[],"sources":["../../src/schemas/enum.ts"],"sourcesContent":["import type { SchemaDescriptor, ValidateFn } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport type EnumValues = readonly [string | number, ...(string | number)[]];\ntype EnumType<T extends EnumValues> = T[number];\n\nfunction buildEnumValidator(values: readonly unknown[]): ValidateFn {\n const set = new Set<unknown>(values);\n\n return (value, ctx) =>\n set.has(value)\n ? null\n : [\n {\n code: ErrorCode.invalid_enum,\n message: ctx!.messages.enum.invalid({ values }),\n params: { values },\n path: [],\n },\n ];\n}\n\nexport class EnumSchema<T extends EnumValues> extends Schema<EnumType<T>, EnumType<T>> {\n readonly values: T;\n\n protected override get _kind(): string {\n return 'enum';\n }\n\n constructor(values: T) {\n super(buildEnumValidator(values));\n this.values = values;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'enum', values: this.values };\n }\n}\n"],"mappings":"4EAOA,
|
|
1
|
+
{"version":3,"file":"enum.js","names":["buildEnumValidator","set","values","value","ErrorCode","ctx","EnumSchema","Schema"],"sources":["../../src/schemas/enum.ts"],"sourcesContent":["import type { SchemaDescriptor, ValidateFn } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport type EnumValues = readonly [string | number, ...(string | number)[]];\ntype EnumType<T extends EnumValues> = T[number];\n\nfunction buildEnumValidator(values: readonly unknown[]): ValidateFn {\n const set = new Set<unknown>(values);\n\n return (value, ctx) =>\n set.has(value)\n ? null\n : [\n {\n code: ErrorCode.invalid_enum,\n message: ctx!.messages.enum.invalid({ values }),\n params: { values },\n path: [],\n },\n ];\n}\n\nexport class EnumSchema<T extends EnumValues> extends Schema<EnumType<T>, EnumType<T>> {\n readonly values: T;\n\n protected override get _kind(): string {\n return 'enum';\n }\n\n constructor(values: T) {\n super(buildEnumValidator(values));\n this.values = values;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'enum', values: this.values };\n }\n}\n"],"mappings":"A,4EAOA,SAASA,EAAmB,EAAwC,CAClE,IAAMC,EAAM,IAAI,IAAaC,CAAM,EAEnC,OAAQ,EAAO,IACbD,EAAI,IAAIE,CAAK,EACT,KACA,CACE,CACE,KAAMC,EAAU,aAChB,QAASC,EAAK,SAAS,KAAK,QAAQ,CAAE,QAAO,CAAC,EAC9C,OAAQ,CAAE,QAAO,EACjB,KAAM,CAAC,CACT,CACF,CACR,CAEA,IAAaC,EAAb,cAAsDC,CAAiC,CACrF,OAEA,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,YAAY,EAAW,CACrB,MAAMP,EAAmBE,CAAM,CAAC,EAChC,KAAK,OAASA,CAChB,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,OAAQ,OAAQ,KAAK,MAAO,CACtE,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instanceof.cjs","names":[],"sources":["../../src/schemas/instanceof.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class InstanceOfSchema<T> extends Schema<T, T> {\n readonly cls: new (\n ...args: never[]\n ) => T;\n\n protected override get _kind(): string {\n return 'instanceof';\n }\n\n constructor(cls: new (...args: never[]) => T) {\n super((value, ctx) =>\n value instanceof cls\n ? null\n : [\n {\n code: ErrorCode.invalid_type,\n message: ctx!.messages.instanceof.type({ className: cls.name }),\n path: [],\n },\n ],\n );\n this.cls = cls;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), className: this.cls.name, kind: 'instanceof' };\n }\n}\n"],"mappings":"yDAIA,
|
|
1
|
+
{"version":3,"file":"instanceof.cjs","names":["Schema","ErrorCode","require_types","require_core","InstanceOfSchema","value","cls","ctx"],"sources":["../../src/schemas/instanceof.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class InstanceOfSchema<T> extends Schema<T, T> {\n readonly cls: new (\n ...args: never[]\n ) => T;\n\n protected override get _kind(): string {\n return 'instanceof';\n }\n\n constructor(cls: new (...args: never[]) => T) {\n super((value, ctx) =>\n value instanceof cls\n ? null\n : [\n {\n code: ErrorCode.invalid_type,\n message: ctx!.messages.instanceof.type({ className: cls.name }),\n path: [],\n },\n ],\n );\n this.cls = cls;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), className: this.cls.name, kind: 'instanceof' };\n }\n}\n"],"mappings":"A,yDAIA,IAAaI,EAAb,cAAyCJ,EAAAA,MAAa,CACpD,IAIA,IAAuB,OAAgB,CACrC,MAAO,YACT,CAEA,YAAY,EAAkC,CAC5C,OAAO,EAAO,IACZK,aAAiBC,EACb,KACA,CACE,CACE,KAAML,EAAAA,UAAU,aAChB,QAASM,EAAK,SAAS,WAAW,KAAK,CAAE,UAAWD,EAAI,IAAK,CAAC,EAC9D,KAAM,CAAC,CACT,CACF,CACN,EACA,KAAK,IAAMA,CACb,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,UAAW,KAAK,IAAI,KAAM,KAAM,YAAa,CACjF,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instanceof.js","names":[],"sources":["../../src/schemas/instanceof.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class InstanceOfSchema<T> extends Schema<T, T> {\n readonly cls: new (\n ...args: never[]\n ) => T;\n\n protected override get _kind(): string {\n return 'instanceof';\n }\n\n constructor(cls: new (...args: never[]) => T) {\n super((value, ctx) =>\n value instanceof cls\n ? null\n : [\n {\n code: ErrorCode.invalid_type,\n message: ctx!.messages.instanceof.type({ className: cls.name }),\n path: [],\n },\n ],\n );\n this.cls = cls;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), className: this.cls.name, kind: 'instanceof' };\n }\n}\n"],"mappings":"4EAIA,
|
|
1
|
+
{"version":3,"file":"instanceof.js","names":["InstanceOfSchema","Schema","value","cls","ErrorCode","ctx"],"sources":["../../src/schemas/instanceof.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class InstanceOfSchema<T> extends Schema<T, T> {\n readonly cls: new (\n ...args: never[]\n ) => T;\n\n protected override get _kind(): string {\n return 'instanceof';\n }\n\n constructor(cls: new (...args: never[]) => T) {\n super((value, ctx) =>\n value instanceof cls\n ? null\n : [\n {\n code: ErrorCode.invalid_type,\n message: ctx!.messages.instanceof.type({ className: cls.name }),\n path: [],\n },\n ],\n );\n this.cls = cls;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), className: this.cls.name, kind: 'instanceof' };\n }\n}\n"],"mappings":"A,4EAIA,IAAaA,EAAb,cAAyCC,CAAa,CACpD,IAIA,IAAuB,OAAgB,CACrC,MAAO,YACT,CAEA,YAAY,EAAkC,CAC5C,OAAO,EAAO,IACZC,aAAiBC,EACb,KACA,CACE,CACE,KAAMC,EAAU,aAChB,QAASC,EAAK,SAAS,WAAW,KAAK,CAAE,UAAWF,EAAI,IAAK,CAAC,EAC9D,KAAM,CAAC,CACT,CACF,CACN,EACA,KAAK,IAAMA,CACb,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,UAAW,KAAK,IAAI,KAAM,KAAM,YAAa,CACjF,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intersect.cjs","names":[],"sources":["../../src/schemas/intersect.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { Schema } from '../core';\nimport { cloneRecord, defineOwnProperty } from '../safe-object';\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/**\n * Recursively merges `source` into `target`.\n * Plain objects are merged key-by-key; all other values take the `source` value.\n */\nfunction deepMerge(target: unknown, source: unknown): unknown {\n if (isPlainObject(target) && isPlainObject(source)) {\n const result = cloneRecord(target);\n\n for (const [key, val] of Object.entries(source)) {\n defineOwnProperty(result, key, deepMerge(target[key], val));\n }\n\n return result;\n }\n\n return source;\n}\n\n/** All schemas must pass: intersection semantics. */\nexport class IntersectSchema<T extends readonly AnySchema[]> extends Schema<\n UnionToIntersection<InferOutput<T[number]>>,\n UnionToIntersection<InferInput<T[number]>>\n> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'intersect';\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = this.schemas[i]._parseFullSync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = await this.schemas[i]._parseFullAsync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'intersect' };\n }\n}\n"],"mappings":"kGAaA,
|
|
1
|
+
{"version":3,"file":"intersect.cjs","names":["isPlainObject","cloneRecord","Schema","require_safe_object","require_core","_vielzeug_arsenal","deepMerge","target","source","result","key","val","IntersectSchema","schemas","state","value","ctx","s"],"sources":["../../src/schemas/intersect.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { Schema } from '../core';\nimport { cloneRecord, defineOwnProperty } from '../safe-object';\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/**\n * Recursively merges `source` into `target`.\n * Plain objects are merged key-by-key; all other values take the `source` value.\n */\nfunction deepMerge(target: unknown, source: unknown): unknown {\n if (isPlainObject(target) && isPlainObject(source)) {\n const result = cloneRecord(target);\n\n for (const [key, val] of Object.entries(source)) {\n defineOwnProperty(result, key, deepMerge(target[key], val));\n }\n\n return result;\n }\n\n return source;\n}\n\n/** All schemas must pass: intersection semantics. */\nexport class IntersectSchema<T extends readonly AnySchema[]> extends Schema<\n UnionToIntersection<InferOutput<T[number]>>,\n UnionToIntersection<InferInput<T[number]>>\n> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'intersect';\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = this.schemas[i]._parseFullSync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = await this.schemas[i]._parseFullAsync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'intersect' };\n }\n}\n"],"mappings":"A,kGAaA,SAASM,EAAU,EAAiB,EAA0B,CAC5D,IAAA,EAAIN,EAAAA,cAAAA,CAAcO,CAAM,IAAA,EAAKP,EAAAA,cAAAA,CAAcQ,CAAM,EAAG,CAClD,IAAMC,EAASR,EAAAA,YAAYM,CAAM,EAEjC,IAAK,GAAM,CAACG,EAAKC,KAAQ,OAAO,QAAQH,CAAM,EAC5CL,EAAA,kBAAkBM,EAAQC,EAAKJ,EAAUC,EAAOG,GAAMC,CAAG,CAAC,EAG5D,OAAOF,CACT,CAEA,OAAOD,CACT,CAGA,IAAaI,EAAb,cAAqEV,EAAAA,MAGnE,CACA,QAEA,IAAuB,OAAgB,CACrC,MAAO,WACT,CAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,OAAO,OAAO,CAAC,GAAGW,CAAO,CAAC,CAC3C,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMC,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQC,CACV,EAEA,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAMN,EAAS,KAAK,QAAQ,EAAE,CAAC,eAAeM,EAAOC,CAAG,EAEpDP,EAAO,OAAO,OAAS,EACzBK,EAAM,OAAO,KAAK,GAAGL,EAAO,MAAM,EACxBK,EAAM,UAIhB,EAAM,OAASR,EAAUQ,EAAM,OAAQL,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAASA,EAAO,KAI1B,CAEA,MAAO,CAAE,KAAMK,EAAM,OAAQ,OAAQA,EAAM,OAAQ,OAAQA,EAAM,OAAO,SAAW,CAAE,CACvF,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMA,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQC,CACV,EAEA,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAMN,EAAS,MAAM,KAAK,QAAQ,EAAE,CAAC,gBAAgBM,EAAOC,CAAG,EAE3DP,EAAO,OAAO,OAAS,EACzBK,EAAM,OAAO,KAAK,GAAGL,EAAO,MAAM,EACxBK,EAAM,UAIhB,EAAM,OAASR,EAAUQ,EAAM,OAAQL,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAASA,EAAO,KAI1B,CAEA,MAAO,CAAE,KAAMK,EAAM,OAAQ,OAAQA,EAAM,OAAQ,OAAQA,EAAM,OAAO,SAAW,CAAE,CACvF,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAMG,EAAE,WAAW,CAAC,EAAG,KAAM,WAAY,CACzG,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intersect.js","names":[],"sources":["../../src/schemas/intersect.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { Schema } from '../core';\nimport { cloneRecord, defineOwnProperty } from '../safe-object';\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/**\n * Recursively merges `source` into `target`.\n * Plain objects are merged key-by-key; all other values take the `source` value.\n */\nfunction deepMerge(target: unknown, source: unknown): unknown {\n if (isPlainObject(target) && isPlainObject(source)) {\n const result = cloneRecord(target);\n\n for (const [key, val] of Object.entries(source)) {\n defineOwnProperty(result, key, deepMerge(target[key], val));\n }\n\n return result;\n }\n\n return source;\n}\n\n/** All schemas must pass: intersection semantics. */\nexport class IntersectSchema<T extends readonly AnySchema[]> extends Schema<\n UnionToIntersection<InferOutput<T[number]>>,\n UnionToIntersection<InferInput<T[number]>>\n> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'intersect';\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = this.schemas[i]._parseFullSync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = await this.schemas[i]._parseFullAsync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'intersect' };\n }\n}\n"],"mappings":"6JAaA,
|
|
1
|
+
{"version":3,"file":"intersect.js","names":["deepMerge","isPlainObject","target","source","result","cloneRecord","key","val","defineOwnProperty","IntersectSchema","Schema","schemas","state","value","i","ctx","s"],"sources":["../../src/schemas/intersect.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { Schema } from '../core';\nimport { cloneRecord, defineOwnProperty } from '../safe-object';\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/**\n * Recursively merges `source` into `target`.\n * Plain objects are merged key-by-key; all other values take the `source` value.\n */\nfunction deepMerge(target: unknown, source: unknown): unknown {\n if (isPlainObject(target) && isPlainObject(source)) {\n const result = cloneRecord(target);\n\n for (const [key, val] of Object.entries(source)) {\n defineOwnProperty(result, key, deepMerge(target[key], val));\n }\n\n return result;\n }\n\n return source;\n}\n\n/** All schemas must pass: intersection semantics. */\nexport class IntersectSchema<T extends readonly AnySchema[]> extends Schema<\n UnionToIntersection<InferOutput<T[number]>>,\n UnionToIntersection<InferInput<T[number]>>\n> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'intersect';\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = this.schemas[i]._parseFullSync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = await this.schemas[i]._parseFullAsync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'intersect' };\n }\n}\n"],"mappings":"A,6JAaA,SAASA,EAAU,EAAiB,EAA0B,CAC5D,GAAIC,EAAcC,CAAM,GAAKD,EAAcE,CAAM,EAAG,CAClD,IAAMC,EAASC,EAAYH,CAAM,EAEjC,IAAK,GAAM,CAACI,EAAKC,KAAQ,OAAO,QAAQJ,CAAM,EAC5CK,EAAkBJ,EAAQE,EAAKN,EAAUE,EAAOI,GAAMC,CAAG,CAAC,EAG5D,OAAOH,CACT,CAEA,OAAOD,CACT,CAGA,IAAaM,EAAb,cAAqEC,CAGnE,CACA,QAEA,IAAuB,OAAgB,CACrC,MAAO,WACT,CAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,OAAO,OAAO,CAAC,GAAGC,CAAO,CAAC,CAC3C,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMC,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQC,CACV,EAEA,IAAK,IAAIC,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAMV,EAAS,KAAK,QAAQU,EAAE,CAAC,eAAeD,EAAOE,CAAG,EAEpDX,EAAO,OAAO,OAAS,EACzBQ,EAAM,OAAO,KAAK,GAAGR,EAAO,MAAM,EACxBQ,EAAM,UAIhB,EAAM,OAASZ,EAAUY,EAAM,OAAQR,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAASA,EAAO,KAI1B,CAEA,MAAO,CAAE,KAAMQ,EAAM,OAAQ,OAAQA,EAAM,OAAQ,OAAQA,EAAM,OAAO,SAAW,CAAE,CACvF,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMA,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQC,CACV,EAEA,IAAK,IAAIC,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAMV,EAAS,MAAM,KAAK,QAAQU,EAAE,CAAC,gBAAgBD,EAAOE,CAAG,EAE3DX,EAAO,OAAO,OAAS,EACzBQ,EAAM,OAAO,KAAK,GAAGR,EAAO,MAAM,EACxBQ,EAAM,UAIhB,EAAM,OAASZ,EAAUY,EAAM,OAAQR,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAASA,EAAO,KAI1B,CAEA,MAAO,CAAE,KAAMQ,EAAM,OAAQ,OAAQA,EAAM,OAAQ,OAAQA,EAAM,OAAO,SAAW,CAAE,CACvF,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAMI,EAAE,WAAW,CAAC,EAAG,KAAM,WAAY,CACzG,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy.cjs","names":[],"sources":["../../src/schemas/lazy.ts"],"sourcesContent":["import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';\n\nimport { Schema } from '../core';\n\nexport class LazySchema<T, Input = T> extends Schema<T, Input> {\n private readonly _getter: () => Schema<T, Input>;\n private _resolved?: Schema<T, Input>;\n\n protected override get _kind(): string {\n return 'lazy';\n }\n\n constructor(getter: () => Schema<T, Input>) {\n super();\n this._getter = getter;\n }\n\n private _resolve(): Schema<T, Input> {\n const resolved = (this._resolved ??= this._getter());\n\n return resolved;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const result = this._resolve()._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const result = await this._resolve()._parseFullAsync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n\n protected override _construct(state: SchemaState<any>): this {\n // Do not copy _resolved: each clone re-resolves from the getter on first use.\n const next = new LazySchema(this._getter) as this;\n\n next.state = state as any;\n\n return next;\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"lazy.cjs","names":["Schema","require_core","LazySchema","getter","result","value","ctx","next","state"],"sources":["../../src/schemas/lazy.ts"],"sourcesContent":["import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';\n\nimport { Schema } from '../core';\n\nexport class LazySchema<T, Input = T> extends Schema<T, Input> {\n private readonly _getter: () => Schema<T, Input>;\n private _resolved?: Schema<T, Input>;\n\n protected override get _kind(): string {\n return 'lazy';\n }\n\n constructor(getter: () => Schema<T, Input>) {\n super();\n this._getter = getter;\n }\n\n private _resolve(): Schema<T, Input> {\n const resolved = (this._resolved ??= this._getter());\n\n return resolved;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const result = this._resolve()._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const result = await this._resolve()._parseFullAsync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n\n protected override _construct(state: SchemaState<any>): this {\n // Do not copy _resolved: each clone re-resolves from the getter on first use.\n const next = new LazySchema(this._getter) as this;\n\n next.state = state as any;\n\n return next;\n }\n}\n"],"mappings":"A,+BAIA,IAAaE,EAAb,MAAaA,UAAiCF,EAAAA,MAAiB,CAC7D,QACA,UAEA,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,YAAY,EAAgC,CAC1C,MAAM,EACN,KAAK,QAAUG,CACjB,CAEA,UAAqC,CAGnC,MAAO,MAFgB,YAAc,KAAK,QAAQ,CAGpD,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMC,EAAS,KAAK,SAAS,CAAC,CAAC,eAAeC,EAAOC,CAAG,EAIxD,OAFIF,EAAO,OAAO,SAAW,EAAU,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAE9E,CAAE,KAAMC,EAAO,OAAQD,EAAO,OAAQ,OAAQ,EAAK,CAC5D,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMA,EAAS,MAAM,KAAK,SAAS,CAAC,CAAC,gBAAgBC,EAAOC,CAAG,EAI/D,OAFIF,EAAO,OAAO,SAAW,EAAU,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAE9E,CAAE,KAAMC,EAAO,OAAQD,EAAO,OAAQ,OAAQ,EAAK,CAC5D,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,WAA8B,EAA+B,CAE3D,IAAMG,EAAO,IAAIL,EAAW,KAAK,OAAO,EAIxC,MAFA,GAAK,MAAQM,EAEND,CACT,CACF,E"}
|
package/dist/schemas/lazy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy.js","names":[],"sources":["../../src/schemas/lazy.ts"],"sourcesContent":["import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';\n\nimport { Schema } from '../core';\n\nexport class LazySchema<T, Input = T> extends Schema<T, Input> {\n private readonly _getter: () => Schema<T, Input>;\n private _resolved?: Schema<T, Input>;\n\n protected override get _kind(): string {\n return 'lazy';\n }\n\n constructor(getter: () => Schema<T, Input>) {\n super();\n this._getter = getter;\n }\n\n private _resolve(): Schema<T, Input> {\n const resolved = (this._resolved ??= this._getter());\n\n return resolved;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const result = this._resolve()._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const result = await this._resolve()._parseFullAsync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n\n protected override _construct(state: SchemaState<any>): this {\n // Do not copy _resolved: each clone re-resolves from the getter on first use.\n const next = new LazySchema(this._getter) as this;\n\n next.state = state as any;\n\n return next;\n }\n}\n"],"mappings":"oCAIA,
|
|
1
|
+
{"version":3,"file":"lazy.js","names":["LazySchema","Schema","getter","result","value","ctx","next","state"],"sources":["../../src/schemas/lazy.ts"],"sourcesContent":["import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';\n\nimport { Schema } from '../core';\n\nexport class LazySchema<T, Input = T> extends Schema<T, Input> {\n private readonly _getter: () => Schema<T, Input>;\n private _resolved?: Schema<T, Input>;\n\n protected override get _kind(): string {\n return 'lazy';\n }\n\n constructor(getter: () => Schema<T, Input>) {\n super();\n this._getter = getter;\n }\n\n private _resolve(): Schema<T, Input> {\n const resolved = (this._resolved ??= this._getter());\n\n return resolved;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const result = this._resolve()._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const result = await this._resolve()._parseFullAsync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n\n protected override _construct(state: SchemaState<any>): this {\n // Do not copy _resolved: each clone re-resolves from the getter on first use.\n const next = new LazySchema(this._getter) as this;\n\n next.state = state as any;\n\n return next;\n }\n}\n"],"mappings":"A,oCAIA,IAAaA,EAAb,MAAaA,UAAiCC,CAAiB,CAC7D,QACA,UAEA,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,YAAY,EAAgC,CAC1C,MAAM,EACN,KAAK,QAAUC,CACjB,CAEA,UAAqC,CAGnC,MAAO,MAFgB,YAAc,KAAK,QAAQ,CAGpD,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMC,EAAS,KAAK,SAAS,CAAC,CAAC,eAAeC,EAAOC,CAAG,EAIxD,OAFIF,EAAO,OAAO,SAAW,EAAU,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAE9E,CAAE,KAAMC,EAAO,OAAQD,EAAO,OAAQ,OAAQ,EAAK,CAC5D,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMA,EAAS,MAAM,KAAK,SAAS,CAAC,CAAC,gBAAgBC,EAAOC,CAAG,EAI/D,OAFIF,EAAO,OAAO,SAAW,EAAU,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAE9E,CAAE,KAAMC,EAAO,OAAQD,EAAO,OAAQ,OAAQ,EAAK,CAC5D,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,WAA8B,EAA+B,CAE3D,IAAMG,EAAO,IAAIN,EAAW,KAAK,OAAO,EAIxC,MAFA,GAAK,MAAQO,EAEND,CACT,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"literal.cjs","names":[],"sources":["../../src/schemas/literal.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class LiteralSchema<T extends string | number | boolean | null | undefined> extends Schema<T, T> {\n readonly value: T;\n\n protected override get _kind(): string {\n return 'literal';\n }\n\n constructor(value: T) {\n super((val, ctx) =>\n val === value\n ? null\n : [\n {\n code: ErrorCode.invalid_literal,\n message: ctx!.messages.literal.expected({ expected: value }),\n params: { expected: value },\n path: [],\n },\n ],\n );\n this.value = value;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'literal', value: this.value };\n }\n}\n"],"mappings":"yDAIA,
|
|
1
|
+
{"version":3,"file":"literal.cjs","names":["Schema","ErrorCode","require_types","require_core","LiteralSchema","val","value","ctx"],"sources":["../../src/schemas/literal.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class LiteralSchema<T extends string | number | boolean | null | undefined> extends Schema<T, T> {\n readonly value: T;\n\n protected override get _kind(): string {\n return 'literal';\n }\n\n constructor(value: T) {\n super((val, ctx) =>\n val === value\n ? null\n : [\n {\n code: ErrorCode.invalid_literal,\n message: ctx!.messages.literal.expected({ expected: value }),\n params: { expected: value },\n path: [],\n },\n ],\n );\n this.value = value;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'literal', value: this.value };\n }\n}\n"],"mappings":"A,yDAIA,IAAaI,EAAb,cAA2FJ,EAAAA,MAAa,CACtG,MAEA,IAAuB,OAAgB,CACrC,MAAO,SACT,CAEA,YAAY,EAAU,CACpB,OAAO,EAAK,IACVK,IAAQC,EACJ,KACA,CACE,CACE,KAAML,EAAAA,UAAU,gBAChB,QAASM,EAAK,SAAS,QAAQ,SAAS,CAAE,SAAUD,CAAM,CAAC,EAC3D,OAAQ,CAAE,SAAUA,CAAM,EAC1B,KAAM,CAAC,CACT,CACF,CACN,EACA,KAAK,MAAQA,CACf,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,UAAW,MAAO,KAAK,KAAM,CACvE,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"literal.js","names":[],"sources":["../../src/schemas/literal.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class LiteralSchema<T extends string | number | boolean | null | undefined> extends Schema<T, T> {\n readonly value: T;\n\n protected override get _kind(): string {\n return 'literal';\n }\n\n constructor(value: T) {\n super((val, ctx) =>\n val === value\n ? null\n : [\n {\n code: ErrorCode.invalid_literal,\n message: ctx!.messages.literal.expected({ expected: value }),\n params: { expected: value },\n path: [],\n },\n ],\n );\n this.value = value;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'literal', value: this.value };\n }\n}\n"],"mappings":"4EAIA,
|
|
1
|
+
{"version":3,"file":"literal.js","names":["LiteralSchema","Schema","val","value","ErrorCode","ctx"],"sources":["../../src/schemas/literal.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class LiteralSchema<T extends string | number | boolean | null | undefined> extends Schema<T, T> {\n readonly value: T;\n\n protected override get _kind(): string {\n return 'literal';\n }\n\n constructor(value: T) {\n super((val, ctx) =>\n val === value\n ? null\n : [\n {\n code: ErrorCode.invalid_literal,\n message: ctx!.messages.literal.expected({ expected: value }),\n params: { expected: value },\n path: [],\n },\n ],\n );\n this.value = value;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'literal', value: this.value };\n }\n}\n"],"mappings":"A,4EAIA,IAAaA,EAAb,cAA2FC,CAAa,CACtG,MAEA,IAAuB,OAAgB,CACrC,MAAO,SACT,CAEA,YAAY,EAAU,CACpB,OAAO,EAAK,IACVC,IAAQC,EACJ,KACA,CACE,CACE,KAAMC,EAAU,gBAChB,QAASC,EAAK,SAAS,QAAQ,SAAS,CAAE,SAAUF,CAAM,CAAC,EAC3D,OAAQ,CAAE,SAAUA,CAAM,EAC1B,KAAM,CAAC,CACT,CACF,CACN,EACA,KAAK,MAAQA,CACf,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,UAAW,MAAO,KAAK,KAAM,CACvE,CACF,E"}
|
package/dist/schemas/map.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.cjs","names":[],"sources":["../../src/schemas/map.ts"],"sourcesContent":["import type {\n AnySchema,\n InferInput,\n InferOutput,\n Issue,\n MessageFn,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n} from '../core';\n\nimport { ErrorCode, fail, prependIssuePath, resolveMessage, Schema } from '../core';\n\nexport class MapSchema<K extends AnySchema, V extends AnySchema> extends Schema<\n Map<InferOutput<K>, InferOutput<V>>,\n Map<InferInput<K>, InferInput<V>>\n> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'map';\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n const issues: Issue[] = [];\n let i = 0;\n\n for (const [key, val] of value) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n const valResult = this.valueSchema._parseFullSync(val, ctx);\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n\n i += 1;\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const entries = [...value];\n const settled = await Promise.all(\n entries.map(([key, val]) =>\n Promise.all([this.keySchema._parseFullAsync(key, ctx), this.valueSchema._parseFullAsync(val, ctx)]),\n ),\n );\n\n const issues: Issue[] = [];\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n\n for (let i = 0; i < settled.length; i++) {\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.map.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.map.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'map',\n value: this.valueSchema.definition(),\n };\n }\n}\n"],"mappings":"oFAaA,
|
|
1
|
+
{"version":3,"file":"map.cjs","names":["Schema","ErrorCode","prependIssuePath","fail","resolveMessage","typed","require_errors","require_types","require_core","MapSchema","keySchema","valueSchema","value","ctx","out","issues","i","key","val","keyResult","valResult","entries","settled","typed","size","message","exact"],"sources":["../../src/schemas/map.ts"],"sourcesContent":["import type {\n AnySchema,\n InferInput,\n InferOutput,\n Issue,\n MessageFn,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n} from '../core';\n\nimport { ErrorCode, fail, prependIssuePath, resolveMessage, Schema } from '../core';\n\nexport class MapSchema<K extends AnySchema, V extends AnySchema> extends Schema<\n Map<InferOutput<K>, InferOutput<V>>,\n Map<InferInput<K>, InferInput<V>>\n> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'map';\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n const issues: Issue[] = [];\n let i = 0;\n\n for (const [key, val] of value) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n const valResult = this.valueSchema._parseFullSync(val, ctx);\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n\n i += 1;\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const entries = [...value];\n const settled = await Promise.all(\n entries.map(([key, val]) =>\n Promise.all([this.keySchema._parseFullAsync(key, ctx), this.valueSchema._parseFullAsync(val, ctx)]),\n ),\n );\n\n const issues: Issue[] = [];\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n\n for (let i = 0; i < settled.length; i++) {\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.map.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.map.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'map',\n value: this.valueSchema.definition(),\n };\n }\n}\n"],"mappings":"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"}
|
package/dist/schemas/map.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{fail as e,prependIssuePath as t,resolveMessage as n}from"../errors.js";import{ErrorCode as r}from"../types.js";import{Schema as i}from"../core.js";var a=class extends i{keySchema;valueSchema;get _kind(){return`map`}constructor(e,t){super(),this.keySchema=e,this.valueSchema=t}_parse(e,n){if(!(e instanceof Map))return{data:e,issues:[{code:r.invalid_type,message:n.messages.map.type(),path:[]}],typeOk:!1};let i
|
|
1
|
+
import{fail as e,prependIssuePath as t,resolveMessage as n}from"../errors.js";import{ErrorCode as r}from"../types.js";import{Schema as i}from"../core.js";var a=class extends i{keySchema;valueSchema;get _kind(){return`map`}constructor(e,t){super(),this.keySchema=e,this.valueSchema=t}_parse(e,n){if(!(e instanceof Map))return{data:e,issues:[{code:r.invalid_type,message:n.messages.map.type(),path:[]}],typeOk:!1};let i=/* @__PURE__ */ new Map,a=[],o=0;for(let[r,s]of e){let e=this.keySchema._parseFullSync(r,n),c=this.valueSchema._parseFullSync(s,n);e.issues.length>0&&a.push(...t(e.issues,o)),c.issues.length>0&&a.push(...t(c.issues,o)),e.issues.length===0&&c.issues.length===0&&i.set(e.data,c.data),o+=1}return{data:i,issues:a,typeOk:!0}}async _parseAsync(e,n){if(!(e instanceof Map))return{data:e,issues:[{code:r.invalid_type,message:n.messages.map.type(),path:[]}],typeOk:!1};let i=[...e],a=await Promise.all(i.map(([e,t])=>Promise.all([this.keySchema._parseFullAsync(e,n),this.valueSchema._parseFullAsync(t,n)]))),o=[],s=/* @__PURE__ */ new Map;for(let e=0;e<a.length;e++){let[n,r]=a[e];n.issues.length>0&&o.push(...t(n.issues,e)),r.issues.length>0&&o.push(...t(r.issues,e)),n.issues.length===0&&r.issues.length===0&&s.set(n.data,r.data)}return{data:s,issues:o,typeOk:!0}}min(t,i){return this._addConstraint((a,o)=>{let s=a;return s.size>=t?null:e(r.too_small,n(i??o.messages.map.min,{min:t,value:s}),{min:t})})}max(t,i){return this._addConstraint((a,o)=>{let s=a;return s.size<=t?null:e(r.too_big,n(i??o.messages.map.max,{max:t,value:s}),{max:t})})}size(t,i){return this._addConstraint((a,o)=>{let s=a;return s.size===t?null:e(r.invalid_length,n(i??o.messages.map.size,{exact:t,value:s}),{exact:t})})}nonEmpty(t){return this._addConstraint((i,a)=>i.size>0?null:e(r.too_small,n(t??a.messages.map.nonEmpty,{min:1}),{min:1}))}_toDescriptorImpl(){return{...this._describeBase(),key:this.keySchema.definition(),kind:`map`,value:this.valueSchema.definition()}}};export{a as MapSchema};
|
|
2
2
|
//# sourceMappingURL=map.js.map
|
package/dist/schemas/map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","names":[],"sources":["../../src/schemas/map.ts"],"sourcesContent":["import type {\n AnySchema,\n InferInput,\n InferOutput,\n Issue,\n MessageFn,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n} from '../core';\n\nimport { ErrorCode, fail, prependIssuePath, resolveMessage, Schema } from '../core';\n\nexport class MapSchema<K extends AnySchema, V extends AnySchema> extends Schema<\n Map<InferOutput<K>, InferOutput<V>>,\n Map<InferInput<K>, InferInput<V>>\n> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'map';\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n const issues: Issue[] = [];\n let i = 0;\n\n for (const [key, val] of value) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n const valResult = this.valueSchema._parseFullSync(val, ctx);\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n\n i += 1;\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const entries = [...value];\n const settled = await Promise.all(\n entries.map(([key, val]) =>\n Promise.all([this.keySchema._parseFullAsync(key, ctx), this.valueSchema._parseFullAsync(val, ctx)]),\n ),\n );\n\n const issues: Issue[] = [];\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n\n for (let i = 0; i < settled.length; i++) {\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.map.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.map.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'map',\n value: this.valueSchema.definition(),\n };\n }\n}\n"],"mappings":"0JAaA,
|
|
1
|
+
{"version":3,"file":"map.js","names":["typed","MapSchema","Schema","keySchema","valueSchema","value","ErrorCode","ctx","out","issues","i","key","val","keyResult","valResult","prependIssuePath","entries","settled","typed","size","fail","resolveMessage","message","exact"],"sources":["../../src/schemas/map.ts"],"sourcesContent":["import type {\n AnySchema,\n InferInput,\n InferOutput,\n Issue,\n MessageFn,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n} from '../core';\n\nimport { ErrorCode, fail, prependIssuePath, resolveMessage, Schema } from '../core';\n\nexport class MapSchema<K extends AnySchema, V extends AnySchema> extends Schema<\n Map<InferOutput<K>, InferOutput<V>>,\n Map<InferInput<K>, InferInput<V>>\n> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'map';\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n const issues: Issue[] = [];\n let i = 0;\n\n for (const [key, val] of value) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n const valResult = this.valueSchema._parseFullSync(val, ctx);\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n\n i += 1;\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const entries = [...value];\n const settled = await Promise.all(\n entries.map(([key, val]) =>\n Promise.all([this.keySchema._parseFullAsync(key, ctx), this.valueSchema._parseFullAsync(val, ctx)]),\n ),\n );\n\n const issues: Issue[] = [];\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n\n for (let i = 0; i < settled.length; i++) {\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.map.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.map.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'map',\n value: this.valueSchema.definition(),\n };\n }\n}\n"],"mappings":"A,0JAaA,IAAaC,EAAb,cAAyEC,CAGvE,CACA,UACA,YAEA,IAAuB,OAAgB,CACrC,MAAO,KACT,CAEA,YAAY,EAAc,EAAgB,CACxC,MAAM,EACN,KAAK,UAAYC,EACjB,KAAK,YAAcC,CACrB,CAEA,OAA0B,EAAgB,EAA+B,CACvE,GAAI,EAAEC,aAAiB,KACrB,MAAO,CACL,KAAMA,EACN,OAAQ,CAAC,CAAE,KAAMC,EAAU,aAAc,QAASC,EAAI,SAAS,IAAI,KAAK,EAAG,KAAM,CAAC,CAAE,CAAC,EACrF,OAAQ,EACV,EAGF,IAAMC,kBAAM,IAAI,IACVC,EAAkB,CAAC,EACrBC,EAAI,EAER,IAAK,GAAM,CAACC,EAAKC,KAAQP,EAAO,CAC9B,IAAMQ,EAAY,KAAK,UAAU,eAAeF,EAAKJ,CAAG,EAClDO,EAAY,KAAK,YAAY,eAAeF,EAAKL,CAAG,EAEtDM,EAAU,OAAO,OAAS,GAAGJ,EAAO,KAAK,GAAGM,EAAiBF,EAAU,OAAQH,CAAC,CAAC,EAEjFI,EAAU,OAAO,OAAS,GAAGL,EAAO,KAAK,GAAGM,EAAiBD,EAAU,OAAQJ,CAAC,CAAC,EAEjFG,EAAU,OAAO,SAAW,GAAKC,EAAU,OAAO,SAAW,GAC/DN,EAAI,IAAIK,EAAU,KAAwBC,EAAU,IAAsB,EAE5E,GAAK,CACP,CAEA,MAAO,CAAE,KAAMN,EAAK,SAAQ,OAAQ,EAAK,CAC3C,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,GAAI,EAAEH,aAAiB,KACrB,MAAO,CACL,KAAMA,EACN,OAAQ,CAAC,CAAE,KAAMC,EAAU,aAAc,QAASC,EAAI,SAAS,IAAI,KAAK,EAAG,KAAM,CAAC,CAAE,CAAC,EACrF,OAAQ,EACV,EAGF,IAAMS,EAAU,CAAC,GAAGX,CAAK,EACnBY,EAAU,MAAM,QAAQ,IAC5BD,EAAQ,KAAK,CAACL,EAAKC,KACjB,QAAQ,IAAI,CAAC,KAAK,UAAU,gBAAgBD,EAAKJ,CAAG,EAAG,KAAK,YAAY,gBAAgBK,EAAKL,CAAG,CAAC,CAAC,CACpG,CACF,EAEME,EAAkB,CAAC,EACnBD,kBAAM,IAAI,IAEhB,IAAK,IAAIE,EAAI,EAAGA,EAAIO,EAAQ,OAAQ,IAAK,CACvC,GAAM,CAACJ,EAAWC,GAAaG,EAAQP,GAEnCG,EAAU,OAAO,OAAS,GAAGJ,EAAO,KAAK,GAAGM,EAAiBF,EAAU,OAAQH,CAAC,CAAC,EAEjFI,EAAU,OAAO,OAAS,GAAGL,EAAO,KAAK,GAAGM,EAAiBD,EAAU,OAAQJ,CAAC,CAAC,EAEjFG,EAAU,OAAO,SAAW,GAAKC,EAAU,OAAO,SAAW,GAC/DN,EAAI,IAAIK,EAAU,KAAwBC,EAAU,IAAsB,CAC9E,CAEA,MAAO,CAAE,KAAMN,EAAK,SAAQ,OAAQ,EAAK,CAC3C,CAEA,IAAI,EAAc,EAA0E,CAC1F,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMU,EAAQb,EAId,OAFIa,EAAM,MAAQC,EAAa,KAExBC,EAAKd,EAAU,UAAWe,EAAeC,GAAWf,EAAK,SAAS,IAAI,IAAK,CAAE,IAAKY,EAAM,MAAOD,CAAM,CAAC,EAAG,CAC9G,IAAKC,CACP,CAAC,CACH,CAAC,CACH,CAEA,IAAI,EAAc,EAA0E,CAC1F,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMD,EAAQb,EAId,OAFIa,EAAM,MAAQC,EAAa,KAExBC,EAAKd,EAAU,QAASe,EAAeC,GAAWf,EAAK,SAAS,IAAI,IAAK,CAAE,IAAKY,EAAM,MAAOD,CAAM,CAAC,EAAG,CAC5G,IAAKC,CACP,CAAC,CACH,CAAC,CACH,CAEA,KAAK,EAAe,EAA4E,CAC9F,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMD,EAAQb,EAId,OAFIa,EAAM,OAASK,EAAc,KAE1BH,EACLd,EAAU,eACVe,EAAeC,GAAWf,EAAK,SAAS,IAAI,KAAM,CAAE,QAAO,MAAOW,CAAM,CAAC,EACzE,CAAE,OAAM,CACV,CACF,CAAC,CACH,CAEA,SAAS,EAA4C,CACnD,OAAO,KAAK,gBAAgB,EAAO,IAG7BlB,EAAM,KAAO,EAAU,KAEpBoB,EAAKd,EAAU,UAAWe,EAAeC,GAAWf,EAAK,SAAS,IAAI,SAAU,CAAE,IAAK,CAAE,CAAC,EAAG,CAAE,IAAK,CAAE,CAAC,CAC/G,CACH,CAEA,mBAAyD,CACvD,MAAO,CACL,GAAG,KAAK,cAAc,EACtB,IAAK,KAAK,UAAU,WAAW,EAC/B,KAAM,MACN,MAAO,KAAK,YAAY,WAAW,CACrC,CACF,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"never.cjs","names":[],"sources":["../../src/schemas/never.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class NeverSchema extends Schema<never, never> {\n protected override get _kind(): string {\n return 'never';\n }\n\n constructor() {\n super((_value, ctx) => [{ code: ErrorCode.invalid_type, message: ctx!.messages.never.invalid(), path: [] }]);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'never' };\n }\n}\n"],"mappings":"yDAIA,
|
|
1
|
+
{"version":3,"file":"never.cjs","names":["Schema","ErrorCode","require_types","require_core","NeverSchema","ctx"],"sources":["../../src/schemas/never.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class NeverSchema extends Schema<never, never> {\n protected override get _kind(): string {\n return 'never';\n }\n\n constructor() {\n super((_value, ctx) => [{ code: ErrorCode.invalid_type, message: ctx!.messages.never.invalid(), path: [] }]);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'never' };\n }\n}\n"],"mappings":"A,yDAIA,IAAaI,EAAb,cAAiCJ,EAAAA,MAAqB,CACpD,IAAuB,OAAgB,CACrC,MAAO,OACT,CAEA,aAAc,CACZ,OAAO,EAAQ,IAAQ,CAAC,CAAE,KAAMC,EAAAA,UAAU,aAAc,QAASI,EAAK,SAAS,MAAM,QAAQ,EAAG,KAAM,CAAC,CAAE,CAAC,CAAC,CAC7G,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,OAAQ,CAClD,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"never.js","names":[],"sources":["../../src/schemas/never.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class NeverSchema extends Schema<never, never> {\n protected override get _kind(): string {\n return 'never';\n }\n\n constructor() {\n super((_value, ctx) => [{ code: ErrorCode.invalid_type, message: ctx!.messages.never.invalid(), path: [] }]);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'never' };\n }\n}\n"],"mappings":"4EAIA,
|
|
1
|
+
{"version":3,"file":"never.js","names":["NeverSchema","Schema","ErrorCode","ctx"],"sources":["../../src/schemas/never.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\n\nexport class NeverSchema extends Schema<never, never> {\n protected override get _kind(): string {\n return 'never';\n }\n\n constructor() {\n super((_value, ctx) => [{ code: ErrorCode.invalid_type, message: ctx!.messages.never.invalid(), path: [] }]);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'never' };\n }\n}\n"],"mappings":"A,4EAIA,IAAaA,EAAb,cAAiCC,CAAqB,CACpD,IAAuB,OAAgB,CACrC,MAAO,OACT,CAEA,aAAc,CACZ,OAAO,EAAQ,IAAQ,CAAC,CAAE,KAAMC,EAAU,aAAc,QAASC,EAAK,SAAS,MAAM,QAAQ,EAAG,KAAM,CAAC,CAAE,CAAC,CAAC,CAC7G,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,OAAQ,CAClD,CACF,E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.cjs","names":[],"sources":["../../src/schemas/number.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface NumberAnnotations extends Record<string, unknown> {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n}\n\nexport class NumberSchema<Input = number> extends Schema<number, Input> {\n protected override get _kind(): string {\n return 'number';\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'number' && !Number.isNaN(value)\n ? null\n : fail(ErrorCode.invalid_type, ctx!.messages.number.type()),\n );\n }\n\n min(minimum: number, message?: MessageFn<{ min: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.min, { min: minimum, value: value as number }),\n {\n min: minimum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n minimum: ann.minimum === undefined ? minimum : Math.max(ann.minimum, minimum),\n };\n },\n );\n }\n\n max(maximum: number, message?: MessageFn<{ max: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.max, { max: maximum, value: value as number }),\n {\n max: maximum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n maximum: ann.maximum === undefined ? maximum : Math.min(ann.maximum, maximum),\n };\n },\n );\n }\n\n int(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Number.isInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_integer,\n resolveMessage(message ?? ctx!.messages.number.int, { value: value as number }),\n );\n },\n (ann) => ({ ...ann, typeHint: 'integer' as const }),\n );\n }\n\n positive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.positive, { value: value as number }),\n {\n exclusive: true,\n min: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMinimum: ann.exclusiveMinimum === undefined ? 0 : Math.max(ann.exclusiveMinimum, 0),\n };\n },\n );\n }\n\n negative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) < 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.negative, { value: value as number }),\n {\n exclusive: true,\n max: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMaximum: ann.exclusiveMaximum === undefined ? 0 : Math.min(ann.exclusiveMaximum, 0),\n };\n },\n );\n }\n\n nonNegative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.nonNegative, { value: value as number }),\n { min: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, minimum: ann.minimum === undefined ? 0 : Math.max(ann.minimum, 0) };\n },\n );\n }\n\n nonPositive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.nonPositive, { value: value as number }),\n { max: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, maximum: ann.maximum === undefined ? 0 : Math.min(ann.maximum, 0) };\n },\n );\n }\n\n multipleOf(step: number, message?: MessageFn<{ step: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Math.abs(Math.round((value as number) / step) - (value as number) / step) < 1e-9) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.number.multipleOf, { step, value: value as number }),\n { step },\n );\n },\n (ann) => ({ ...ann, multipleOf: step }),\n );\n }\n\n safe(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isSafeInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_safe,\n resolveMessage(message ?? ctx!.messages.number.safe, { value: value as number }),\n );\n });\n }\n\n finite(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isFinite(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_finite,\n resolveMessage(message ?? ctx!.messages.number.finite, { value: value as number }),\n );\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as NumberAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.exclusiveMaximum !== undefined ? { exclusiveMaximum: ann.exclusiveMaximum } : {}),\n ...(ann.exclusiveMinimum !== undefined ? { exclusiveMinimum: ann.exclusiveMinimum } : {}),\n ...(ann.maximum !== undefined ? { maximum: ann.maximum } : {}),\n ...(ann.minimum !== undefined ? { minimum: ann.minimum } : {}),\n ...(ann.multipleOf !== undefined ? { multipleOf: ann.multipleOf } : {}),\n ...(ann.typeHint !== undefined ? { typeHint: ann.typeHint } : {}),\n kind: 'number',\n };\n }\n\n static coerce(): NumberSchema<unknown> {\n return new NumberSchema().preprocess((v: unknown) => {\n if (typeof v === 'number') return v;\n\n if (typeof v === 'string' || typeof v === 'boolean') {\n const n = Number(v);\n\n return Number.isNaN(n) ? v : n;\n }\n\n return v;\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"number.cjs","names":["Schema","fail","ErrorCode","resolveMessage","require_errors","require_types","require_core","NumberSchema","value","ctx","minimum","message","ann","current","maximum","step","v","n"],"sources":["../../src/schemas/number.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface NumberAnnotations extends Record<string, unknown> {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n}\n\nexport class NumberSchema<Input = number> extends Schema<number, Input> {\n protected override get _kind(): string {\n return 'number';\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'number' && !Number.isNaN(value)\n ? null\n : fail(ErrorCode.invalid_type, ctx!.messages.number.type()),\n );\n }\n\n min(minimum: number, message?: MessageFn<{ min: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.min, { min: minimum, value: value as number }),\n {\n min: minimum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n minimum: ann.minimum === undefined ? minimum : Math.max(ann.minimum, minimum),\n };\n },\n );\n }\n\n max(maximum: number, message?: MessageFn<{ max: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.max, { max: maximum, value: value as number }),\n {\n max: maximum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n maximum: ann.maximum === undefined ? maximum : Math.min(ann.maximum, maximum),\n };\n },\n );\n }\n\n int(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Number.isInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_integer,\n resolveMessage(message ?? ctx!.messages.number.int, { value: value as number }),\n );\n },\n (ann) => ({ ...ann, typeHint: 'integer' as const }),\n );\n }\n\n positive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.positive, { value: value as number }),\n {\n exclusive: true,\n min: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMinimum: ann.exclusiveMinimum === undefined ? 0 : Math.max(ann.exclusiveMinimum, 0),\n };\n },\n );\n }\n\n negative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) < 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.negative, { value: value as number }),\n {\n exclusive: true,\n max: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMaximum: ann.exclusiveMaximum === undefined ? 0 : Math.min(ann.exclusiveMaximum, 0),\n };\n },\n );\n }\n\n nonNegative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.nonNegative, { value: value as number }),\n { min: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, minimum: ann.minimum === undefined ? 0 : Math.max(ann.minimum, 0) };\n },\n );\n }\n\n nonPositive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.nonPositive, { value: value as number }),\n { max: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, maximum: ann.maximum === undefined ? 0 : Math.min(ann.maximum, 0) };\n },\n );\n }\n\n multipleOf(step: number, message?: MessageFn<{ step: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Math.abs(Math.round((value as number) / step) - (value as number) / step) < 1e-9) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.number.multipleOf, { step, value: value as number }),\n { step },\n );\n },\n (ann) => ({ ...ann, multipleOf: step }),\n );\n }\n\n safe(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isSafeInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_safe,\n resolveMessage(message ?? ctx!.messages.number.safe, { value: value as number }),\n );\n });\n }\n\n finite(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isFinite(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_finite,\n resolveMessage(message ?? ctx!.messages.number.finite, { value: value as number }),\n );\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as NumberAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.exclusiveMaximum !== undefined ? { exclusiveMaximum: ann.exclusiveMaximum } : {}),\n ...(ann.exclusiveMinimum !== undefined ? { exclusiveMinimum: ann.exclusiveMinimum } : {}),\n ...(ann.maximum !== undefined ? { maximum: ann.maximum } : {}),\n ...(ann.minimum !== undefined ? { minimum: ann.minimum } : {}),\n ...(ann.multipleOf !== undefined ? { multipleOf: ann.multipleOf } : {}),\n ...(ann.typeHint !== undefined ? { typeHint: ann.typeHint } : {}),\n kind: 'number',\n };\n }\n\n static coerce(): NumberSchema<unknown> {\n return new NumberSchema().preprocess((v: unknown) => {\n if (typeof v === 'number') return v;\n\n if (typeof v === 'string' || typeof v === 'boolean') {\n const n = Number(v);\n\n return Number.isNaN(n) ? v : n;\n }\n\n return v;\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","names":[],"sources":["../../src/schemas/number.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface NumberAnnotations extends Record<string, unknown> {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n}\n\nexport class NumberSchema<Input = number> extends Schema<number, Input> {\n protected override get _kind(): string {\n return 'number';\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'number' && !Number.isNaN(value)\n ? null\n : fail(ErrorCode.invalid_type, ctx!.messages.number.type()),\n );\n }\n\n min(minimum: number, message?: MessageFn<{ min: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.min, { min: minimum, value: value as number }),\n {\n min: minimum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n minimum: ann.minimum === undefined ? minimum : Math.max(ann.minimum, minimum),\n };\n },\n );\n }\n\n max(maximum: number, message?: MessageFn<{ max: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.max, { max: maximum, value: value as number }),\n {\n max: maximum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n maximum: ann.maximum === undefined ? maximum : Math.min(ann.maximum, maximum),\n };\n },\n );\n }\n\n int(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Number.isInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_integer,\n resolveMessage(message ?? ctx!.messages.number.int, { value: value as number }),\n );\n },\n (ann) => ({ ...ann, typeHint: 'integer' as const }),\n );\n }\n\n positive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.positive, { value: value as number }),\n {\n exclusive: true,\n min: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMinimum: ann.exclusiveMinimum === undefined ? 0 : Math.max(ann.exclusiveMinimum, 0),\n };\n },\n );\n }\n\n negative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) < 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.negative, { value: value as number }),\n {\n exclusive: true,\n max: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMaximum: ann.exclusiveMaximum === undefined ? 0 : Math.min(ann.exclusiveMaximum, 0),\n };\n },\n );\n }\n\n nonNegative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.nonNegative, { value: value as number }),\n { min: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, minimum: ann.minimum === undefined ? 0 : Math.max(ann.minimum, 0) };\n },\n );\n }\n\n nonPositive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.nonPositive, { value: value as number }),\n { max: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, maximum: ann.maximum === undefined ? 0 : Math.min(ann.maximum, 0) };\n },\n );\n }\n\n multipleOf(step: number, message?: MessageFn<{ step: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Math.abs(Math.round((value as number) / step) - (value as number) / step) < 1e-9) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.number.multipleOf, { step, value: value as number }),\n { step },\n );\n },\n (ann) => ({ ...ann, multipleOf: step }),\n );\n }\n\n safe(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isSafeInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_safe,\n resolveMessage(message ?? ctx!.messages.number.safe, { value: value as number }),\n );\n });\n }\n\n finite(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isFinite(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_finite,\n resolveMessage(message ?? ctx!.messages.number.finite, { value: value as number }),\n );\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as NumberAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.exclusiveMaximum !== undefined ? { exclusiveMaximum: ann.exclusiveMaximum } : {}),\n ...(ann.exclusiveMinimum !== undefined ? { exclusiveMinimum: ann.exclusiveMinimum } : {}),\n ...(ann.maximum !== undefined ? { maximum: ann.maximum } : {}),\n ...(ann.minimum !== undefined ? { minimum: ann.minimum } : {}),\n ...(ann.multipleOf !== undefined ? { multipleOf: ann.multipleOf } : {}),\n ...(ann.typeHint !== undefined ? { typeHint: ann.typeHint } : {}),\n kind: 'number',\n };\n }\n\n static coerce(): NumberSchema<unknown> {\n return new NumberSchema().preprocess((v: unknown) => {\n if (typeof v === 'number') return v;\n\n if (typeof v === 'string' || typeof v === 'boolean') {\n const n = Number(v);\n\n return Number.isNaN(n) ? v : n;\n }\n\n return v;\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"number.js","names":["NumberSchema","Schema","value","fail","ErrorCode","ctx","minimum","resolveMessage","message","ann","current","maximum","step","v","n"],"sources":["../../src/schemas/number.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface NumberAnnotations extends Record<string, unknown> {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n}\n\nexport class NumberSchema<Input = number> extends Schema<number, Input> {\n protected override get _kind(): string {\n return 'number';\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'number' && !Number.isNaN(value)\n ? null\n : fail(ErrorCode.invalid_type, ctx!.messages.number.type()),\n );\n }\n\n min(minimum: number, message?: MessageFn<{ min: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.min, { min: minimum, value: value as number }),\n {\n min: minimum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n minimum: ann.minimum === undefined ? minimum : Math.max(ann.minimum, minimum),\n };\n },\n );\n }\n\n max(maximum: number, message?: MessageFn<{ max: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.max, { max: maximum, value: value as number }),\n {\n max: maximum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n maximum: ann.maximum === undefined ? maximum : Math.min(ann.maximum, maximum),\n };\n },\n );\n }\n\n int(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Number.isInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_integer,\n resolveMessage(message ?? ctx!.messages.number.int, { value: value as number }),\n );\n },\n (ann) => ({ ...ann, typeHint: 'integer' as const }),\n );\n }\n\n positive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.positive, { value: value as number }),\n {\n exclusive: true,\n min: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMinimum: ann.exclusiveMinimum === undefined ? 0 : Math.max(ann.exclusiveMinimum, 0),\n };\n },\n );\n }\n\n negative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) < 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.negative, { value: value as number }),\n {\n exclusive: true,\n max: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMaximum: ann.exclusiveMaximum === undefined ? 0 : Math.min(ann.exclusiveMaximum, 0),\n };\n },\n );\n }\n\n nonNegative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.nonNegative, { value: value as number }),\n { min: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, minimum: ann.minimum === undefined ? 0 : Math.max(ann.minimum, 0) };\n },\n );\n }\n\n nonPositive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.nonPositive, { value: value as number }),\n { max: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, maximum: ann.maximum === undefined ? 0 : Math.min(ann.maximum, 0) };\n },\n );\n }\n\n multipleOf(step: number, message?: MessageFn<{ step: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Math.abs(Math.round((value as number) / step) - (value as number) / step) < 1e-9) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.number.multipleOf, { step, value: value as number }),\n { step },\n );\n },\n (ann) => ({ ...ann, multipleOf: step }),\n );\n }\n\n safe(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isSafeInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_safe,\n resolveMessage(message ?? ctx!.messages.number.safe, { value: value as number }),\n );\n });\n }\n\n finite(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isFinite(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_finite,\n resolveMessage(message ?? ctx!.messages.number.finite, { value: value as number }),\n );\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as NumberAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.exclusiveMaximum !== undefined ? { exclusiveMaximum: ann.exclusiveMaximum } : {}),\n ...(ann.exclusiveMinimum !== undefined ? { exclusiveMinimum: ann.exclusiveMinimum } : {}),\n ...(ann.maximum !== undefined ? { maximum: ann.maximum } : {}),\n ...(ann.minimum !== undefined ? { minimum: ann.minimum } : {}),\n ...(ann.multipleOf !== undefined ? { multipleOf: ann.multipleOf } : {}),\n ...(ann.typeHint !== undefined ? { typeHint: ann.typeHint } : {}),\n kind: 'number',\n };\n }\n\n static coerce(): NumberSchema<unknown> {\n return new NumberSchema().preprocess((v: unknown) => {\n if (typeof v === 'number') return v;\n\n if (typeof v === 'string' || typeof v === 'boolean') {\n const n = Number(v);\n\n return Number.isNaN(n) ? v : n;\n }\n\n return v;\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.cjs","names":[],"sources":["../../src/schemas/object.ts"],"sourcesContent":["import type {\n AcceptsMissing,\n AnySchema,\n InferInput,\n InferOutput,\n Issue,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n} from '../core';\n\nimport { ErrorCode, prependIssuePath, Schema } from '../core';\nimport { defineOwnProperty, isUnsafeObjectKey, objectFromEntries } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport { UnionSchema } from './union';\n\nexport type ObjectShape = Record<string, AnySchema>;\nexport type InferObject<T extends ObjectShape> = { [K in keyof T]: InferOutput<T[K]> };\ntype OptionalInputKeys<T extends ObjectShape> = {\n [K in keyof T]: T[K] extends AcceptsMissing ? K : never;\n}[keyof T];\ntype Simplify<T> = { [K in keyof T]: T[K] };\nexport type InferObjectInput<T extends ObjectShape> = Simplify<\n { [K in Exclude<keyof T, OptionalInputKeys<T>>]: InferInput<T[K]> } & {\n [K in OptionalInputKeys<T>]?: InferInput<T[K]>;\n }\n>;\n\nexport class ObjectSchema<T extends ObjectShape> extends Schema<InferObject<T>, InferObjectInput<T>> {\n readonly shape: T;\n private readonly _isRelaxed: boolean;\n\n protected override get _kind(): string {\n return 'object';\n }\n\n constructor(shape: T, isRelaxed = false) {\n super();\n this.shape = Object.freeze(objectFromEntries(Object.entries(shape))) as T;\n this._isRelaxed = isRelaxed;\n }\n\n private _unknownKeys(obj: Record<string, unknown>): string[] {\n return Object.keys(obj).filter((k) => !Object.hasOwn(this.shape, k));\n }\n\n private _strictUnknownKeyIssues(obj: Record<string, unknown>, ctx: ParseContext): Issue[] {\n if (this._isRelaxed) return [];\n\n const unknownKeys = this._unknownKeys(obj);\n\n if (unknownKeys.length === 0) return [];\n\n return [\n {\n code: ErrorCode.invalid_keys,\n message: ctx.messages.object.invalidKeys({ keys: unknownKeys }),\n params: { keys: unknownKeys },\n path: [],\n },\n ];\n }\n\n private _copyRelaxedUnknownKeys(obj: Record<string, unknown>, output: Record<string, unknown>): void {\n if (!this._isRelaxed) return;\n\n for (const key of this._unknownKeys(obj)) {\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(key)) continue;\n\n defineOwnProperty(output, key, obj[key]);\n }\n }\n\n private _guardObjectInput(\n value: unknown,\n ctx: ParseContext,\n ): { obj: Record<string, unknown>; ok: true } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { obj: value as Record<string, unknown>, ok: true };\n }\n\n private _createObjectParseContext(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): {\n issues: Issue[];\n output: Record<string, unknown>;\n } {\n return {\n issues: [...this._strictUnknownKeyIssues(obj, ctx)],\n output: {},\n };\n }\n\n private _rebuildWith<U extends ObjectShape>(shape: U, isRelaxed = this._isRelaxed): ObjectSchema<U> {\n return this._copyStateTo(new ObjectSchema(shape, isRelaxed)) as unknown as ObjectSchema<U>;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardObjectInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { obj } = guarded;\n const { issues, output } = this._createObjectParseContext(obj, ctx);\n\n for (const key of Object.keys(this.shape)) {\n const fieldSchema = this.shape[key];\n const result = fieldSchema._parseFullSync(obj[key], ctx);\n\n if (result.issues.length === 0) {\n defineOwnProperty(output, key, result.data);\n } else {\n // Failed field keys are intentionally omitted from parsed output so\n // object-level checks can branch on key presence.\n issues.push(...prependIssuePath(result.issues, key));\n }\n }\n\n this._copyRelaxedUnknownKeys(obj, output);\n\n return { data: output, issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const guarded = this._guardObjectInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { obj } = guarded;\n const { issues, output } = this._createObjectParseContext(obj, ctx);\n\n const keys = Object.keys(this.shape);\n const results = await Promise.all(keys.map((key) => this.shape[key]._parseFullAsync(obj[key], ctx)));\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const result = results[i];\n\n if (result.issues.length === 0) {\n defineOwnProperty(output, key, result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, key));\n }\n }\n\n this._copyRelaxedUnknownKeys(obj, output);\n\n return { data: output, issues, typeOk: true };\n }\n\n partial(): ObjectSchema<{\n [K in keyof T]: Schema<InferOutput<T[K]> | undefined, InferInput<T[K]> | undefined> & AcceptsMissing;\n }>;\n partial<K extends keyof T>(\n ...keys: K[]\n ): ObjectSchema<\n Omit<T, K> & {\n [P in K]: Schema<InferOutput<T[P]> | undefined, InferInput<T[P]> | undefined> & AcceptsMissing;\n }\n >;\n partial<K extends keyof T>(...keys: K[]): ObjectSchema<any> {\n const targetKeys = keys.length > 0 ? new Set(keys as string[]) : null;\n\n return this._rebuildWith(\n objectFromEntries(\n Object.entries(this.shape).map(([k, s]) => [k, targetKeys === null || targetKeys.has(k) ? s.optional() : s]),\n ) as any,\n this._isRelaxed,\n );\n }\n\n override optional(): ObjectSchema<T> &\n Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined> &\n AcceptsMissing {\n return super.optional() as ObjectSchema<T> &\n Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined> &\n AcceptsMissing;\n }\n\n override nullable(): ObjectSchema<T> & Schema<InferObject<T> | null, InferObjectInput<T> | null> {\n return super.nullable() as ObjectSchema<T> & Schema<InferObject<T> | null, InferObjectInput<T> | null>;\n }\n\n override nullish(): ObjectSchema<T> &\n Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined> &\n AcceptsMissing {\n return super.nullish() as ObjectSchema<T> &\n Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined> &\n AcceptsMissing;\n }\n\n override required(): ObjectSchema<T> &\n Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>> {\n return this._rebuildWith(\n objectFromEntries(Object.entries(this.shape).map(([k, s]) => [k, s.required()])) as any,\n this._isRelaxed,\n ) as ObjectSchema<T> & Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>>;\n }\n\n extend<U extends ObjectShape>(extra: U): ObjectSchema<Omit<T, keyof U> & U> {\n return this._rebuildWith(\n objectFromEntries([...Object.entries(this.shape), ...Object.entries(extra)]) as any,\n this._isRelaxed,\n );\n }\n\n pick<K extends keyof T>(...keys: K[]): ObjectSchema<Pick<T, K>> {\n const keySet = new Set(keys as string[]);\n\n return this._rebuildWith(objectFromEntries(Object.entries(this.shape).filter(([k]) => keySet.has(k))) as any);\n }\n\n omit<K extends keyof T>(...keys: K[]): ObjectSchema<Omit<T, K>> {\n const keySet = new Set(keys as string[]);\n\n return this._rebuildWith(objectFromEntries(Object.entries(this.shape).filter(([k]) => !keySet.has(k))) as any);\n }\n\n /**\n * Returns a fully default-filled object by parsing `{}` against this schema.\n * Every required field must have a `.default()` value set; if any required\n * field is missing a default, this method throws a `SpellValidationError`.\n *\n * @example\n * const Config = s.object({ host: s.string().default('localhost'), port: s.number().default(3000) });\n * Config.defaults(); // { host: 'localhost', port: 3000 }\n */\n defaults(): InferObject<T> {\n return this.parse({});\n }\n\n /**\n * Returns a partial object containing only the fields that have a default value set.\n * Fields without a `.default()` or `.catch()` are silently omitted rather than throwing.\n *\n * Useful for pre-filling forms where only some fields have defaults.\n *\n * @example\n * const Form = s.object({ name: s.string(), role: s.string().default('viewer') });\n * Form.partialDefaults(); // { role: 'viewer' }; name is omitted\n */\n partialDefaults(): Partial<InferObject<T>> {\n const result: Record<string, unknown> = {};\n\n for (const key of Object.keys(this.shape)) {\n const parsed = this.shape[key]._parseFullSync(undefined);\n\n if (parsed.issues.length === 0) {\n defineOwnProperty(result, key, parsed.data);\n }\n }\n\n return result as Partial<InferObject<T>>;\n }\n\n /**\n * Returns an array of field keys that are **required** (not optional and not nullish).\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string().optional() });\n * User.requiredFields(); // ['id']\n */\n requiredFields(): (keyof T & string)[] {\n return Object.keys(this.shape).filter((k) => !this.shape[k].isOptional) as (keyof T & string)[];\n }\n\n /**\n * Returns an array of field keys that are **optional** (accept `undefined`).\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string().optional() });\n * User.optionalFields(); // ['name']\n */\n optionalFields(): (keyof T & string)[] {\n return Object.keys(this.shape).filter((k) => this.shape[k].isOptional) as (keyof T & string)[];\n }\n\n /**\n * Allow additional unknown properties (relaxed mode).\n * Default is strict mode (rejects unknown keys).\n *\n * Returns `ObjectSchema<T>` so fluent methods like `.pick()`, `.omit()`,\n * `.extend()`, and `.partial()` remain usable after calling `.relaxed()`.\n */\n relaxed(): ObjectSchema<T> {\n return this._rebuildWith(this.shape, true);\n }\n\n /**\n * Alias for the default strict mode: rejects unknown keys.\n * Useful after calling `.relaxed()` to return a new strict schema.\n */\n strict(): ObjectSchema<T> {\n return this._rebuildWith(this.shape, false);\n }\n\n /**\n * Returns a union schema of the object's key names as literal schemas.\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string() });\n * User.keyof(); // UnionSchema: validates 'id' | 'name'\n */\n keyof(): UnionSchema<readonly [LiteralSchema<keyof T & string>, ...LiteralSchema<keyof T & string>[]]> {\n const keys = Object.keys(this.shape) as (keyof T & string)[];\n const schemas = keys.map((k) => new LiteralSchema(k)) as unknown as readonly [\n LiteralSchema<keyof T & string>,\n ...LiteralSchema<keyof T & string>[],\n ];\n\n return new UnionSchema(schemas);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const fields: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of Object.entries(this.shape)) {\n defineOwnProperty(fields, key, schema.definition());\n }\n\n return { ...this._describeBase(), fields, kind: 'object', strict: !this._isRelaxed };\n }\n\n merge<U extends ObjectShape>(other: ObjectSchema<U>): ObjectSchema<T & U> {\n return this._rebuildWith(\n objectFromEntries([...Object.entries(this.shape), ...Object.entries(other.shape)]) as any,\n other._isRelaxed,\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"object.cjs","names":["Schema","objectFromEntries","ErrorCode","isUnsafeObjectKey","prependIssuePath","LiteralSchema","UnionSchema","require_errors","require_safe_object","require_types","require_core","require_literal","require_union","ObjectSchema","shape","isRelaxed","obj","k","unknownKeys","ctx","key","output","value","guarded","result","issues","keys","results","i","targetKeys","s","extra","keySet","parsed","schemas","fields","schema","other"],"sources":["../../src/schemas/object.ts"],"sourcesContent":["import type {\n AcceptsMissing,\n AnySchema,\n InferInput,\n InferOutput,\n Issue,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n} from '../core';\n\nimport { ErrorCode, prependIssuePath, Schema } from '../core';\nimport { defineOwnProperty, isUnsafeObjectKey, objectFromEntries } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport { UnionSchema } from './union';\n\nexport type ObjectShape = Record<string, AnySchema>;\nexport type InferObject<T extends ObjectShape> = { [K in keyof T]: InferOutput<T[K]> };\ntype OptionalInputKeys<T extends ObjectShape> = {\n [K in keyof T]: T[K] extends AcceptsMissing ? K : never;\n}[keyof T];\ntype Simplify<T> = { [K in keyof T]: T[K] };\nexport type InferObjectInput<T extends ObjectShape> = Simplify<\n { [K in Exclude<keyof T, OptionalInputKeys<T>>]: InferInput<T[K]> } & {\n [K in OptionalInputKeys<T>]?: InferInput<T[K]>;\n }\n>;\n\nexport class ObjectSchema<T extends ObjectShape> extends Schema<InferObject<T>, InferObjectInput<T>> {\n readonly shape: T;\n private readonly _isRelaxed: boolean;\n\n protected override get _kind(): string {\n return 'object';\n }\n\n constructor(shape: T, isRelaxed = false) {\n super();\n this.shape = Object.freeze(objectFromEntries(Object.entries(shape))) as T;\n this._isRelaxed = isRelaxed;\n }\n\n private _unknownKeys(obj: Record<string, unknown>): string[] {\n return Object.keys(obj).filter((k) => !Object.hasOwn(this.shape, k));\n }\n\n private _strictUnknownKeyIssues(obj: Record<string, unknown>, ctx: ParseContext): Issue[] {\n if (this._isRelaxed) return [];\n\n const unknownKeys = this._unknownKeys(obj);\n\n if (unknownKeys.length === 0) return [];\n\n return [\n {\n code: ErrorCode.invalid_keys,\n message: ctx.messages.object.invalidKeys({ keys: unknownKeys }),\n params: { keys: unknownKeys },\n path: [],\n },\n ];\n }\n\n private _copyRelaxedUnknownKeys(obj: Record<string, unknown>, output: Record<string, unknown>): void {\n if (!this._isRelaxed) return;\n\n for (const key of this._unknownKeys(obj)) {\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(key)) continue;\n\n defineOwnProperty(output, key, obj[key]);\n }\n }\n\n private _guardObjectInput(\n value: unknown,\n ctx: ParseContext,\n ): { obj: Record<string, unknown>; ok: true } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { obj: value as Record<string, unknown>, ok: true };\n }\n\n private _createObjectParseContext(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): {\n issues: Issue[];\n output: Record<string, unknown>;\n } {\n return {\n issues: [...this._strictUnknownKeyIssues(obj, ctx)],\n output: {},\n };\n }\n\n private _rebuildWith<U extends ObjectShape>(shape: U, isRelaxed = this._isRelaxed): ObjectSchema<U> {\n return this._copyStateTo(new ObjectSchema(shape, isRelaxed)) as unknown as ObjectSchema<U>;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardObjectInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { obj } = guarded;\n const { issues, output } = this._createObjectParseContext(obj, ctx);\n\n for (const key of Object.keys(this.shape)) {\n const fieldSchema = this.shape[key];\n const result = fieldSchema._parseFullSync(obj[key], ctx);\n\n if (result.issues.length === 0) {\n defineOwnProperty(output, key, result.data);\n } else {\n // Failed field keys are intentionally omitted from parsed output so\n // object-level checks can branch on key presence.\n issues.push(...prependIssuePath(result.issues, key));\n }\n }\n\n this._copyRelaxedUnknownKeys(obj, output);\n\n return { data: output, issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const guarded = this._guardObjectInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { obj } = guarded;\n const { issues, output } = this._createObjectParseContext(obj, ctx);\n\n const keys = Object.keys(this.shape);\n const results = await Promise.all(keys.map((key) => this.shape[key]._parseFullAsync(obj[key], ctx)));\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const result = results[i];\n\n if (result.issues.length === 0) {\n defineOwnProperty(output, key, result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, key));\n }\n }\n\n this._copyRelaxedUnknownKeys(obj, output);\n\n return { data: output, issues, typeOk: true };\n }\n\n partial(): ObjectSchema<{\n [K in keyof T]: Schema<InferOutput<T[K]> | undefined, InferInput<T[K]> | undefined> & AcceptsMissing;\n }>;\n partial<K extends keyof T>(\n ...keys: K[]\n ): ObjectSchema<\n Omit<T, K> & {\n [P in K]: Schema<InferOutput<T[P]> | undefined, InferInput<T[P]> | undefined> & AcceptsMissing;\n }\n >;\n partial<K extends keyof T>(...keys: K[]): ObjectSchema<any> {\n const targetKeys = keys.length > 0 ? new Set(keys as string[]) : null;\n\n return this._rebuildWith(\n objectFromEntries(\n Object.entries(this.shape).map(([k, s]) => [k, targetKeys === null || targetKeys.has(k) ? s.optional() : s]),\n ) as any,\n this._isRelaxed,\n );\n }\n\n override optional(): ObjectSchema<T> &\n Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined> &\n AcceptsMissing {\n return super.optional() as ObjectSchema<T> &\n Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined> &\n AcceptsMissing;\n }\n\n override nullable(): ObjectSchema<T> & Schema<InferObject<T> | null, InferObjectInput<T> | null> {\n return super.nullable() as ObjectSchema<T> & Schema<InferObject<T> | null, InferObjectInput<T> | null>;\n }\n\n override nullish(): ObjectSchema<T> &\n Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined> &\n AcceptsMissing {\n return super.nullish() as ObjectSchema<T> &\n Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined> &\n AcceptsMissing;\n }\n\n override required(): ObjectSchema<T> &\n Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>> {\n return this._rebuildWith(\n objectFromEntries(Object.entries(this.shape).map(([k, s]) => [k, s.required()])) as any,\n this._isRelaxed,\n ) as ObjectSchema<T> & Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>>;\n }\n\n extend<U extends ObjectShape>(extra: U): ObjectSchema<Omit<T, keyof U> & U> {\n return this._rebuildWith(\n objectFromEntries([...Object.entries(this.shape), ...Object.entries(extra)]) as any,\n this._isRelaxed,\n );\n }\n\n pick<K extends keyof T>(...keys: K[]): ObjectSchema<Pick<T, K>> {\n const keySet = new Set(keys as string[]);\n\n return this._rebuildWith(objectFromEntries(Object.entries(this.shape).filter(([k]) => keySet.has(k))) as any);\n }\n\n omit<K extends keyof T>(...keys: K[]): ObjectSchema<Omit<T, K>> {\n const keySet = new Set(keys as string[]);\n\n return this._rebuildWith(objectFromEntries(Object.entries(this.shape).filter(([k]) => !keySet.has(k))) as any);\n }\n\n /**\n * Returns a fully default-filled object by parsing `{}` against this schema.\n * Every required field must have a `.default()` value set; if any required\n * field is missing a default, this method throws a `SpellValidationError`.\n *\n * @example\n * const Config = s.object({ host: s.string().default('localhost'), port: s.number().default(3000) });\n * Config.defaults(); // { host: 'localhost', port: 3000 }\n */\n defaults(): InferObject<T> {\n return this.parse({});\n }\n\n /**\n * Returns a partial object containing only the fields that have a default value set.\n * Fields without a `.default()` or `.catch()` are silently omitted rather than throwing.\n *\n * Useful for pre-filling forms where only some fields have defaults.\n *\n * @example\n * const Form = s.object({ name: s.string(), role: s.string().default('viewer') });\n * Form.partialDefaults(); // { role: 'viewer' }; name is omitted\n */\n partialDefaults(): Partial<InferObject<T>> {\n const result: Record<string, unknown> = {};\n\n for (const key of Object.keys(this.shape)) {\n const parsed = this.shape[key]._parseFullSync(undefined);\n\n if (parsed.issues.length === 0) {\n defineOwnProperty(result, key, parsed.data);\n }\n }\n\n return result as Partial<InferObject<T>>;\n }\n\n /**\n * Returns an array of field keys that are **required** (not optional and not nullish).\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string().optional() });\n * User.requiredFields(); // ['id']\n */\n requiredFields(): (keyof T & string)[] {\n return Object.keys(this.shape).filter((k) => !this.shape[k].isOptional) as (keyof T & string)[];\n }\n\n /**\n * Returns an array of field keys that are **optional** (accept `undefined`).\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string().optional() });\n * User.optionalFields(); // ['name']\n */\n optionalFields(): (keyof T & string)[] {\n return Object.keys(this.shape).filter((k) => this.shape[k].isOptional) as (keyof T & string)[];\n }\n\n /**\n * Allow additional unknown properties (relaxed mode).\n * Default is strict mode (rejects unknown keys).\n *\n * Returns `ObjectSchema<T>` so fluent methods like `.pick()`, `.omit()`,\n * `.extend()`, and `.partial()` remain usable after calling `.relaxed()`.\n */\n relaxed(): ObjectSchema<T> {\n return this._rebuildWith(this.shape, true);\n }\n\n /**\n * Alias for the default strict mode: rejects unknown keys.\n * Useful after calling `.relaxed()` to return a new strict schema.\n */\n strict(): ObjectSchema<T> {\n return this._rebuildWith(this.shape, false);\n }\n\n /**\n * Returns a union schema of the object's key names as literal schemas.\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string() });\n * User.keyof(); // UnionSchema: validates 'id' | 'name'\n */\n keyof(): UnionSchema<readonly [LiteralSchema<keyof T & string>, ...LiteralSchema<keyof T & string>[]]> {\n const keys = Object.keys(this.shape) as (keyof T & string)[];\n const schemas = keys.map((k) => new LiteralSchema(k)) as unknown as readonly [\n LiteralSchema<keyof T & string>,\n ...LiteralSchema<keyof T & string>[],\n ];\n\n return new UnionSchema(schemas);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const fields: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of Object.entries(this.shape)) {\n defineOwnProperty(fields, key, schema.definition());\n }\n\n return { ...this._describeBase(), fields, kind: 'object', strict: !this._isRelaxed };\n }\n\n merge<U extends ObjectShape>(other: ObjectSchema<U>): ObjectSchema<T & U> {\n return this._rebuildWith(\n objectFromEntries([...Object.entries(this.shape), ...Object.entries(other.shape)]) as any,\n other._isRelaxed,\n );\n }\n}\n"],"mappings":"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"}
|