@vielzeug/spell 26.11.9 → 26.11.10
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/README.md +1 -1
- package/dist/_dev.cjs.map +1 -1
- package/dist/_dev.js.map +1 -1
- package/dist/_object.cjs +2 -0
- package/dist/_object.cjs.map +1 -0
- package/dist/_object.d.ts +9 -0
- package/dist/_object.d.ts.map +1 -0
- package/dist/_object.js +2 -0
- package/dist/_object.js.map +1 -0
- package/dist/_parse.cjs +2 -0
- package/dist/_parse.cjs.map +1 -0
- package/dist/_parse.d.ts +38 -0
- package/dist/_parse.d.ts.map +1 -0
- package/dist/_parse.js +2 -0
- package/dist/_parse.js.map +1 -0
- package/dist/errors.cjs +2 -2
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +15 -26
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/json.cjs +2 -1
- package/dist/json.cjs.map +1 -0
- package/dist/json.d.ts +8 -1
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +2 -1
- package/dist/json.js.map +1 -0
- package/dist/messages.cjs +1 -1
- package/dist/messages.cjs.map +1 -1
- package/dist/messages.d.ts +7 -6
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +1 -1
- package/dist/messages.js.map +1 -1
- package/dist/predicates.cjs +2 -1
- package/dist/predicates.cjs.map +1 -0
- package/dist/predicates.d.ts +41 -2
- package/dist/predicates.d.ts.map +1 -1
- package/dist/predicates.js +2 -1
- package/dist/predicates.js.map +1 -0
- package/dist/s.cjs +1 -1
- package/dist/s.cjs.map +1 -1
- package/dist/s.d.ts +21 -22
- package/dist/s.d.ts.map +1 -1
- package/dist/s.js +1 -1
- package/dist/s.js.map +1 -1
- package/dist/schema.cjs +2 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.ts +93 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -0
- package/dist/schemas/array.cjs +1 -1
- package/dist/schemas/array.cjs.map +1 -1
- package/dist/schemas/array.d.ts +22 -32
- package/dist/schemas/array.d.ts.map +1 -1
- package/dist/schemas/array.js +1 -1
- package/dist/schemas/array.js.map +1 -1
- package/dist/schemas/bigint.cjs +1 -1
- package/dist/schemas/bigint.cjs.map +1 -1
- package/dist/schemas/bigint.d.ts +14 -18
- package/dist/schemas/bigint.d.ts.map +1 -1
- package/dist/schemas/bigint.js +1 -1
- package/dist/schemas/bigint.js.map +1 -1
- package/dist/schemas/date.cjs +1 -1
- package/dist/schemas/date.cjs.map +1 -1
- package/dist/schemas/date.d.ts +7 -6
- package/dist/schemas/date.d.ts.map +1 -1
- package/dist/schemas/date.js +1 -1
- package/dist/schemas/date.js.map +1 -1
- package/dist/schemas/discriminated-union.cjs +2 -0
- package/dist/schemas/discriminated-union.cjs.map +1 -0
- package/dist/schemas/discriminated-union.d.ts +39 -0
- package/dist/schemas/discriminated-union.d.ts.map +1 -0
- package/dist/schemas/discriminated-union.js +2 -0
- package/dist/schemas/discriminated-union.js.map +1 -0
- package/dist/schemas/intersect.cjs +1 -1
- package/dist/schemas/intersect.cjs.map +1 -1
- package/dist/schemas/intersect.d.ts +10 -9
- package/dist/schemas/intersect.d.ts.map +1 -1
- package/dist/schemas/intersect.js +1 -1
- package/dist/schemas/intersect.js.map +1 -1
- package/dist/schemas/lazy.cjs +1 -1
- package/dist/schemas/lazy.cjs.map +1 -1
- package/dist/schemas/lazy.d.ts +10 -10
- package/dist/schemas/lazy.d.ts.map +1 -1
- package/dist/schemas/lazy.js +1 -1
- package/dist/schemas/lazy.js.map +1 -1
- package/dist/schemas/map.cjs +1 -1
- package/dist/schemas/map.cjs.map +1 -1
- package/dist/schemas/map.d.ts +8 -7
- package/dist/schemas/map.d.ts.map +1 -1
- package/dist/schemas/map.js +1 -1
- package/dist/schemas/map.js.map +1 -1
- package/dist/schemas/number.cjs +1 -1
- package/dist/schemas/number.cjs.map +1 -1
- package/dist/schemas/number.d.ts +20 -27
- package/dist/schemas/number.d.ts.map +1 -1
- package/dist/schemas/number.js +1 -1
- package/dist/schemas/number.js.map +1 -1
- package/dist/schemas/object.cjs +1 -1
- package/dist/schemas/object.cjs.map +1 -1
- package/dist/schemas/object.d.ts +40 -88
- package/dist/schemas/object.d.ts.map +1 -1
- package/dist/schemas/object.js +1 -1
- package/dist/schemas/object.js.map +1 -1
- package/dist/schemas/primitives.cjs +2 -0
- package/dist/schemas/primitives.cjs.map +1 -0
- package/dist/schemas/primitives.d.ts +38 -0
- package/dist/schemas/primitives.d.ts.map +1 -0
- package/dist/schemas/primitives.js +2 -0
- package/dist/schemas/primitives.js.map +1 -0
- package/dist/schemas/record.cjs +1 -1
- package/dist/schemas/record.cjs.map +1 -1
- package/dist/schemas/record.d.ts +7 -8
- package/dist/schemas/record.d.ts.map +1 -1
- package/dist/schemas/record.js +1 -1
- package/dist/schemas/record.js.map +1 -1
- package/dist/schemas/set.cjs +1 -1
- package/dist/schemas/set.cjs.map +1 -1
- package/dist/schemas/set.d.ts +8 -7
- package/dist/schemas/set.d.ts.map +1 -1
- package/dist/schemas/set.js +1 -1
- package/dist/schemas/set.js.map +1 -1
- package/dist/schemas/string.cjs +1 -1
- package/dist/schemas/string.cjs.map +1 -1
- package/dist/schemas/string.d.ts +42 -98
- package/dist/schemas/string.d.ts.map +1 -1
- package/dist/schemas/string.js +1 -1
- package/dist/schemas/string.js.map +1 -1
- package/dist/schemas/tuple.cjs +1 -1
- package/dist/schemas/tuple.cjs.map +1 -1
- package/dist/schemas/tuple.d.ts +9 -9
- package/dist/schemas/tuple.d.ts.map +1 -1
- package/dist/schemas/tuple.js +1 -1
- package/dist/schemas/tuple.js.map +1 -1
- package/dist/schemas/union.cjs +1 -1
- package/dist/schemas/union.cjs.map +1 -1
- package/dist/schemas/union.d.ts +9 -7
- package/dist/schemas/union.d.ts.map +1 -1
- package/dist/schemas/union.js +1 -1
- package/dist/schemas/union.js.map +1 -1
- package/dist/spell.cjs +2 -2
- package/dist/spell.cjs.map +1 -1
- package/dist/spell.iife.js +2 -2
- package/dist/spell.iife.js.map +1 -1
- package/dist/spell.js +842 -1601
- package/dist/spell.js.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +151 -265
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/dist/core.cjs +0 -2
- package/dist/core.cjs.map +0 -1
- package/dist/core.d.ts +0 -101
- package/dist/core.d.ts.map +0 -1
- package/dist/core.js +0 -2
- package/dist/core.js.map +0 -1
- package/dist/formats.cjs +0 -2
- package/dist/formats.cjs.map +0 -1
- package/dist/formats.d.ts +0 -41
- package/dist/formats.d.ts.map +0 -1
- package/dist/formats.js +0 -2
- package/dist/formats.js.map +0 -1
- package/dist/json-schema.cjs +0 -2
- package/dist/json-schema.cjs.map +0 -1
- package/dist/json-schema.d.ts +0 -5
- package/dist/json-schema.d.ts.map +0 -1
- package/dist/json-schema.js +0 -2
- package/dist/json-schema.js.map +0 -1
- package/dist/safe-object.cjs +0 -2
- package/dist/safe-object.cjs.map +0 -1
- package/dist/safe-object.d.ts +0 -6
- package/dist/safe-object.d.ts.map +0 -1
- package/dist/safe-object.js +0 -2
- package/dist/safe-object.js.map +0 -1
- package/dist/schemas/boolean.cjs +0 -2
- package/dist/schemas/boolean.cjs.map +0 -1
- package/dist/schemas/boolean.d.ts +0 -9
- package/dist/schemas/boolean.d.ts.map +0 -1
- package/dist/schemas/boolean.js +0 -2
- package/dist/schemas/boolean.js.map +0 -1
- package/dist/schemas/enum.cjs +0 -2
- package/dist/schemas/enum.cjs.map +0 -1
- package/dist/schemas/enum.d.ts +0 -12
- package/dist/schemas/enum.d.ts.map +0 -1
- package/dist/schemas/enum.js +0 -2
- package/dist/schemas/enum.js.map +0 -1
- package/dist/schemas/instanceof.cjs +0 -2
- package/dist/schemas/instanceof.cjs.map +0 -1
- package/dist/schemas/instanceof.d.ts +0 -9
- package/dist/schemas/instanceof.d.ts.map +0 -1
- package/dist/schemas/instanceof.js +0 -2
- package/dist/schemas/instanceof.js.map +0 -1
- package/dist/schemas/literal.cjs +0 -2
- package/dist/schemas/literal.cjs.map +0 -1
- package/dist/schemas/literal.d.ts +0 -9
- package/dist/schemas/literal.d.ts.map +0 -1
- package/dist/schemas/literal.js +0 -2
- package/dist/schemas/literal.js.map +0 -1
- package/dist/schemas/never.cjs +0 -2
- package/dist/schemas/never.cjs.map +0 -1
- package/dist/schemas/never.d.ts +0 -8
- package/dist/schemas/never.d.ts.map +0 -1
- package/dist/schemas/never.js +0 -2
- package/dist/schemas/never.js.map +0 -1
- package/dist/schemas/raw-or.cjs +0 -2
- package/dist/schemas/raw-or.cjs.map +0 -1
- package/dist/schemas/raw-or.d.ts +0 -17
- package/dist/schemas/raw-or.d.ts.map +0 -1
- package/dist/schemas/raw-or.js +0 -2
- package/dist/schemas/raw-or.js.map +0 -1
- package/dist/schemas/variant.cjs +0 -2
- package/dist/schemas/variant.cjs.map +0 -1
- package/dist/schemas/variant.d.ts +0 -37
- package/dist/schemas/variant.d.ts.map +0 -1
- package/dist/schemas/variant.js +0 -2
- package/dist/schemas/variant.js.map +0 -1
- package/dist/tolerate.cjs +0 -2
- package/dist/tolerate.cjs.map +0 -1
- package/dist/tolerate.d.ts +0 -10
- package/dist/tolerate.d.ts.map +0 -1
- package/dist/tolerate.js +0 -2
- package/dist/tolerate.js.map +0 -1
- package/dist/validators.cjs +0 -2
- package/dist/validators.cjs.map +0 -1
- package/dist/validators.d.ts +0 -20
- package/dist/validators.d.ts.map +0 -1
- package/dist/validators.js +0 -2
- package/dist/validators.js.map +0 -1
package/dist/messages.d.ts
CHANGED
|
@@ -136,8 +136,8 @@ export type Messages = {
|
|
|
136
136
|
base64url: () => string;
|
|
137
137
|
cuid: () => string;
|
|
138
138
|
cuid2: () => string;
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
isoDate: () => string;
|
|
140
|
+
isoDateTime: () => string;
|
|
141
141
|
duration: () => string;
|
|
142
142
|
email: () => string;
|
|
143
143
|
emoji: () => string;
|
|
@@ -195,7 +195,7 @@ export type Messages = {
|
|
|
195
195
|
union: {
|
|
196
196
|
invalid: () => string;
|
|
197
197
|
};
|
|
198
|
-
|
|
198
|
+
discriminatedUnion: {
|
|
199
199
|
invalidDiscriminator: (ctx: {
|
|
200
200
|
discriminator: string;
|
|
201
201
|
expected: string[];
|
|
@@ -207,9 +207,10 @@ export type DeepPartial<T> = {
|
|
|
207
207
|
[K in keyof T]?: T[K] extends Record<string, unknown> ? DeepPartial<T[K]> : T[K];
|
|
208
208
|
};
|
|
209
209
|
/**
|
|
210
|
-
* Creates
|
|
211
|
-
* validation messages vary by request, locale, or form. Spell never stores it globally.
|
|
210
|
+
* Creates a frozen parse context with the built-in messages merged with `messages`. Pass it to
|
|
211
|
+
* parse methods when validation messages vary by request, locale, or form. Spell never stores it globally.
|
|
212
212
|
*/
|
|
213
213
|
export declare function createParseContext(messages?: DeepPartial<Messages>): ParseContext;
|
|
214
|
-
/**
|
|
214
|
+
/** The context used when a parse method receives none. */
|
|
215
|
+
export declare const defaultContext: ParseContext;
|
|
215
216
|
//# sourceMappingURL=messages.d.ts.map
|
package/dist/messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/messages.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./_dev.js";import{
|
|
1
|
+
import"./_dev.js";import{deepFreeze as e,defineOwnProperty as t,isUnsafeObjectKey as n,objectFromEntries as r}from"./_object.js";import{isPlainObject as i}from"@vielzeug/arsenal";var a={array:{length:({exact:e})=>`Must have exactly ${e} items`,max:({max:e})=>`Must have at most ${e} items`,min:({min:e})=>`Must have at least ${e} items`,nonEmpty:()=>`Cannot be empty`,type:()=>`Expected array`,unique:()=>`All items must be unique`},bigint:{max:({max:e})=>`Must be at most ${e}`,min:({min:e})=>`Must be at least ${e}`,multipleOf:({step:e})=>`Must be a multiple of ${e}`,negative:()=>`Must be negative`,nonNegative:()=>`Must be non-negative`,nonPositive:()=>`Must be non-positive`,positive:()=>`Must be positive`,type:()=>`Expected bigint`},boolean:{type:()=>`Expected boolean`},check:{default:()=>`Invalid value`},date:{max:({max:e})=>`Must be before ${e.toISOString()}`,min:({min:e})=>`Must be after ${e.toISOString()}`,type:()=>`Expected valid date`},discriminatedUnion:{invalidDiscriminator:({discriminator:e,expected:t})=>`Invalid discriminator value at "${e}": expected ${t.map(e=>JSON.stringify(e)).join(` | `)}`,type:()=>`Expected object`},enum:{invalid:({values:e})=>`Expected one of: ${e.map(e=>JSON.stringify(e)).join(`, `)}`},instanceof:{type:({className:e})=>`Expected instance of ${e}`},literal:{expected:({expected:e})=>`Expected ${JSON.stringify(e)}`},map:{max:({max:e})=>`Must contain at most ${e} entries`,min:({min:e})=>`Must contain at least ${e} entries`,nonEmpty:()=>`Cannot be empty`,size:({exact:e})=>`Must contain exactly ${e} entries`,type:()=>`Expected map`},never:{invalid:()=>`Value is not allowed`},number:{finite:()=>`Must be finite`,int:()=>`Must be an integer`,max:({max:e})=>`Must be at most ${e}`,min:({min:e})=>`Must be at least ${e}`,multipleOf:({step:e})=>`Must be a multiple of ${e}`,negative:()=>`Must be negative`,nonNegative:()=>`Must be non-negative`,nonPositive:()=>`Must be non-positive`,positive:()=>`Must be positive`,safe:()=>`Must be a safe integer`,type:()=>`Expected number`},object:{invalidKeys:({keys:e})=>`Unrecognized keys: ${e.join(`, `)}`,type:()=>`Expected object`},set:{max:({max:e})=>`Must contain at most ${e} items`,min:({min:e})=>`Must contain at least ${e} items`,nonEmpty:()=>`Cannot be empty`,size:({exact:e})=>`Must contain exactly ${e} items`,type:()=>`Expected set`},string:{base64:()=>`Invalid base64`,base64url:()=>`Invalid base64url`,cuid:()=>`Invalid CUID`,cuid2:()=>`Invalid CUID2`,duration:()=>`Invalid ISO 8601 duration`,email:()=>`Invalid email address`,emoji:()=>`Invalid emoji sequence`,endsWith:({suffix:e})=>`Must end with "${e}"`,hex:()=>`Invalid hex`,hexColor:()=>`Invalid hex color`,includes:({substr:e})=>`Must include "${e}"`,ip:()=>`Invalid IP address`,isoDate:()=>`Invalid date`,isoDateTime:()=>`Invalid datetime`,jwt:()=>`Invalid JWT`,length:({exact:e})=>`Must be exactly ${e} characters`,max:({max:e})=>`Must be at most ${e} characters`,min:({min:e})=>`Must be at least ${e} characters`,nanoid:()=>`Invalid NanoID`,nonEmpty:()=>`Cannot be empty`,numeric:()=>`Invalid numeric string`,regex:()=>`Invalid format`,semver:()=>`Invalid semver`,slug:()=>`Invalid slug`,startsWith:({prefix:e})=>`Must start with "${e}"`,time:()=>`Invalid time`,type:()=>`Expected string`,ulid:()=>`Invalid ULID`,url:()=>`Invalid URL`,uuid:()=>`Invalid UUID`},tuple:{length:({exact:e})=>`Expected tuple of length ${e}`,min:({min:e})=>`Expected tuple with at least ${e} items`,type:()=>`Expected array`},union:{invalid:()=>`Does not match any of the expected types`}};function o(e,a){let s=r(Object.entries(e));for(let[e,r]of Object.entries(a)){if(r===void 0)continue;if(n(e)){`${e}`;continue}let a=s[e];t(s,e,i(a)&&i(r)?o(a,r):r)}return s}function s(t={}){return e({messages:o(a,t)})}var c=s();export{s as createParseContext,c as defaultContext};
|
|
2
2
|
//# sourceMappingURL=messages.js.map
|
package/dist/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","names":["_builtinMessages","exact","max","min","step","values","v","className","expected","keys","suffix","substr","prefix","discriminator","k","isRecord","value","mergeMessages","out","cloneRecord","base","key","patch","isUnsafeObjectKey","baseValue","defineOwnProperty","createParseContext","messages"],"sources":["../src/messages.ts"],"sourcesContent":["import { warn } from './_dev';\nimport { cloneRecord, defineOwnProperty, isUnsafeObjectKey } from './safe-object';\nimport type { ParseContext } from './types';\n\nexport type Messages = {\n array: {\n length: (ctx: { exact: number; value: unknown[] }) => string;\n max: (ctx: { max: number; value: unknown[] }) => string;\n min: (ctx: { min: number; value: unknown[] }) => string;\n nonEmpty: () => string;\n type: () => string;\n unique: () => string;\n };\n bigint: {\n max: (ctx: { max: bigint; value: bigint }) => string;\n min: (ctx: { min: bigint; value: bigint }) => string;\n multipleOf: (ctx: { step: bigint; value: bigint }) => string;\n negative: () => string;\n nonNegative: () => string;\n nonPositive: () => string;\n positive: () => string;\n type: () => string;\n };\n boolean: {\n type: () => string;\n };\n check: {\n default: () => string;\n };\n date: {\n max: (ctx: { max: Date; value: Date }) => string;\n min: (ctx: { min: Date; value: Date }) => string;\n type: () => string;\n };\n enum: {\n invalid: (ctx: { values: readonly unknown[] }) => string;\n };\n instanceof: {\n type: (ctx: { className: string }) => string;\n };\n literal: {\n expected: (ctx: { expected: unknown }) => string;\n };\n map: {\n max: (ctx: { max: number; value: Map<unknown, unknown> }) => string;\n min: (ctx: { min: number; value: Map<unknown, unknown> }) => string;\n nonEmpty: () => string;\n size: (ctx: { exact: number; value: Map<unknown, unknown> }) => string;\n type: () => string;\n };\n never: {\n invalid: () => string;\n };\n number: {\n finite: () => string;\n int: () => string;\n max: (ctx: { max: number; value: number }) => string;\n min: (ctx: { min: number; value: number }) => string;\n multipleOf: (ctx: { step: number; value: number }) => string;\n negative: () => string;\n nonNegative: () => string;\n nonPositive: () => string;\n positive: () => string;\n safe: () => string;\n type: () => string;\n };\n object: {\n invalidKeys: (ctx: { keys: string[] }) => string;\n type: () => string;\n };\n set: {\n max: (ctx: { max: number; value: Set<unknown> }) => string;\n min: (ctx: { min: number; value: Set<unknown> }) => string;\n nonEmpty: () => string;\n size: (ctx: { exact: number; value: Set<unknown> }) => string;\n type: () => string;\n };\n string: {\n base64: () => string;\n base64url: () => string;\n cuid: () => string;\n cuid2: () => string;\n date: () => string;\n dateTime: () => string;\n duration: () => string;\n email: () => string;\n emoji: () => string;\n endsWith: (ctx: { suffix: string; value: string }) => string;\n hex: () => string;\n hexColor: () => string;\n includes: (ctx: { substr: string; value: string }) => string;\n ip: () => string;\n jwt: () => string;\n length: (ctx: { exact: number; value: string }) => string;\n max: (ctx: { max: number; value: string }) => string;\n min: (ctx: { min: number; value: string }) => string;\n nanoid: () => string;\n nonEmpty: () => string;\n numeric: () => string;\n regex: (ctx: { value: string }) => string;\n semver: () => string;\n slug: () => string;\n startsWith: (ctx: { prefix: string; value: string }) => string;\n time: () => string;\n type: () => string;\n ulid: () => string;\n url: () => string;\n uuid: () => string;\n };\n tuple: {\n length: (ctx: { exact: number }) => string;\n min: (ctx: { min: number }) => string;\n type: () => string;\n };\n union: {\n invalid: () => string;\n };\n variant: {\n invalidDiscriminator: (ctx: { discriminator: string; expected: string[] }) => string;\n type: () => string;\n };\n};\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends Record<string, unknown> ? DeepPartial<T[K]> : T[K];\n};\n\nconst _builtinMessages: Messages = {\n array: {\n length: ({ exact }) => `Must have exactly ${exact} items`,\n max: ({ max }) => `Must have at most ${max} items`,\n min: ({ min }) => `Must have at least ${min} items`,\n nonEmpty: () => 'Cannot be empty',\n type: () => 'Expected array',\n unique: () => 'All items must be unique',\n },\n bigint: {\n max: ({ max }) => `Must be at most ${max}`,\n min: ({ min }) => `Must be at least ${min}`,\n multipleOf: ({ step }) => `Must be a multiple of ${step}`,\n negative: () => 'Must be negative',\n nonNegative: () => 'Must be non-negative',\n nonPositive: () => 'Must be non-positive',\n positive: () => 'Must be positive',\n type: () => 'Expected bigint',\n },\n boolean: {\n type: () => 'Expected boolean',\n },\n check: {\n default: () => 'Invalid value',\n },\n date: {\n max: ({ max }) => `Must be before ${max.toISOString()}`,\n min: ({ min }) => `Must be after ${min.toISOString()}`,\n type: () => 'Expected valid date',\n },\n enum: {\n invalid: ({ values }) => `Expected one of: ${values.map((v) => JSON.stringify(v)).join(', ')}`,\n },\n instanceof: {\n type: ({ className }) => `Expected instance of ${className}`,\n },\n literal: {\n expected: ({ expected }) => `Expected ${JSON.stringify(expected)}`,\n },\n map: {\n max: ({ max }) => `Must contain at most ${max} entries`,\n min: ({ min }) => `Must contain at least ${min} entries`,\n nonEmpty: () => 'Cannot be empty',\n size: ({ exact }) => `Must contain exactly ${exact} entries`,\n type: () => 'Expected map',\n },\n never: {\n invalid: () => 'Value is not allowed',\n },\n number: {\n finite: () => 'Must be finite',\n int: () => 'Must be an integer',\n max: ({ max }) => `Must be at most ${max}`,\n min: ({ min }) => `Must be at least ${min}`,\n multipleOf: ({ step }) => `Must be a multiple of ${step}`,\n negative: () => 'Must be negative',\n nonNegative: () => 'Must be non-negative',\n nonPositive: () => 'Must be non-positive',\n positive: () => 'Must be positive',\n safe: () => 'Must be a safe integer',\n type: () => 'Expected number',\n },\n object: {\n invalidKeys: ({ keys }) => `Unrecognized keys: ${keys.join(', ')}`,\n type: () => 'Expected object',\n },\n set: {\n max: ({ max }) => `Must contain at most ${max} items`,\n min: ({ min }) => `Must contain at least ${min} items`,\n nonEmpty: () => 'Cannot be empty',\n size: ({ exact }) => `Must contain exactly ${exact} items`,\n type: () => 'Expected set',\n },\n string: {\n base64: () => 'Invalid base64',\n base64url: () => 'Invalid base64url',\n cuid: () => 'Invalid CUID',\n cuid2: () => 'Invalid CUID2',\n date: () => 'Invalid date',\n dateTime: () => 'Invalid datetime',\n duration: () => 'Invalid ISO 8601 duration',\n email: () => 'Invalid email address',\n emoji: () => 'Invalid emoji sequence',\n endsWith: ({ suffix }) => `Must end with \"${suffix}\"`,\n hex: () => 'Invalid hex',\n hexColor: () => 'Invalid hex color',\n includes: ({ substr }) => `Must include \"${substr}\"`,\n ip: () => 'Invalid IP address',\n jwt: () => 'Invalid JWT',\n length: ({ exact }) => `Must be exactly ${exact} characters`,\n max: ({ max }) => `Must be at most ${max} characters`,\n min: ({ min }) => `Must be at least ${min} characters`,\n nanoid: () => 'Invalid NanoID',\n nonEmpty: () => 'Cannot be empty',\n numeric: () => 'Invalid numeric string',\n regex: () => 'Invalid format',\n semver: () => 'Invalid semver',\n slug: () => 'Invalid slug',\n startsWith: ({ prefix }) => `Must start with \"${prefix}\"`,\n time: () => 'Invalid time',\n type: () => 'Expected string',\n ulid: () => 'Invalid ULID',\n url: () => 'Invalid URL',\n uuid: () => 'Invalid UUID',\n },\n tuple: {\n length: ({ exact }) => `Expected tuple of length ${exact}`,\n min: ({ min }) => `Expected tuple with at least ${min} items`,\n type: () => 'Expected array',\n },\n union: {\n invalid: () => 'Does not match any of the expected types',\n },\n variant: {\n invalidDiscriminator: ({ discriminator, expected }) =>\n `Invalid discriminator value at \"${discriminator}\": expected ${expected.map((k) => JSON.stringify(k)).join(' | ')}`,\n type: () => 'Expected object',\n },\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction mergeMessages<T extends Record<string, unknown>>(base: T, patch: DeepPartial<T>): T {\n const out = cloneRecord(base) as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(patch)) {\n if (value === undefined) continue;\n\n if (isUnsafeObjectKey(key)) {\n warn(`[spell] Ignoring unsafe message override key \"${key}\" to prevent prototype mutation.`);\n continue;\n }\n\n const baseValue = out[key];\n\n if (isRecord(baseValue) && isRecord(value)) {\n defineOwnProperty(out, key, mergeMessages(baseValue, value as DeepPartial<typeof baseValue>));\n } else {\n defineOwnProperty(out, key, value);\n }\n }\n\n return out as T;\n}\n\n/**\n * Creates an immutable parse context. Pass this context to parse methods when\n * validation messages vary by request, locale, or form. Spell never stores it globally.\n */\nexport function createParseContext(messages: DeepPartial<Messages> = {}): ParseContext {\n return { messages: mergeMessages(_builtinMessages, messages) };\n}\n\n/** @internal */\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"messages.js","names":["builtinMessages","exact","max","min","step","discriminator","expected","k","values","v","className","keys","suffix","substr","prefix","mergeMessages","out","objectFromEntries","base","key","value","patch","isUnsafeObjectKey","baseValue","defineOwnProperty","isPlainObject","createParseContext","deepFreeze","messages","defaultContext"],"sources":["../src/messages.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport { warn } from './_dev';\nimport { deepFreeze, defineOwnProperty, isUnsafeObjectKey, objectFromEntries } from './_object';\nimport type { ParseContext } from './types';\n\nexport type Messages = {\n array: {\n length: (ctx: { exact: number; value: unknown[] }) => string;\n max: (ctx: { max: number; value: unknown[] }) => string;\n min: (ctx: { min: number; value: unknown[] }) => string;\n nonEmpty: () => string;\n type: () => string;\n unique: () => string;\n };\n bigint: {\n max: (ctx: { max: bigint; value: bigint }) => string;\n min: (ctx: { min: bigint; value: bigint }) => string;\n multipleOf: (ctx: { step: bigint; value: bigint }) => string;\n negative: () => string;\n nonNegative: () => string;\n nonPositive: () => string;\n positive: () => string;\n type: () => string;\n };\n boolean: {\n type: () => string;\n };\n check: {\n default: () => string;\n };\n date: {\n max: (ctx: { max: Date; value: Date }) => string;\n min: (ctx: { min: Date; value: Date }) => string;\n type: () => string;\n };\n enum: {\n invalid: (ctx: { values: readonly unknown[] }) => string;\n };\n instanceof: {\n type: (ctx: { className: string }) => string;\n };\n literal: {\n expected: (ctx: { expected: unknown }) => string;\n };\n map: {\n max: (ctx: { max: number; value: Map<unknown, unknown> }) => string;\n min: (ctx: { min: number; value: Map<unknown, unknown> }) => string;\n nonEmpty: () => string;\n size: (ctx: { exact: number; value: Map<unknown, unknown> }) => string;\n type: () => string;\n };\n never: {\n invalid: () => string;\n };\n number: {\n finite: () => string;\n int: () => string;\n max: (ctx: { max: number; value: number }) => string;\n min: (ctx: { min: number; value: number }) => string;\n multipleOf: (ctx: { step: number; value: number }) => string;\n negative: () => string;\n nonNegative: () => string;\n nonPositive: () => string;\n positive: () => string;\n safe: () => string;\n type: () => string;\n };\n object: {\n invalidKeys: (ctx: { keys: string[] }) => string;\n type: () => string;\n };\n set: {\n max: (ctx: { max: number; value: Set<unknown> }) => string;\n min: (ctx: { min: number; value: Set<unknown> }) => string;\n nonEmpty: () => string;\n size: (ctx: { exact: number; value: Set<unknown> }) => string;\n type: () => string;\n };\n string: {\n base64: () => string;\n base64url: () => string;\n cuid: () => string;\n cuid2: () => string;\n isoDate: () => string;\n isoDateTime: () => string;\n duration: () => string;\n email: () => string;\n emoji: () => string;\n endsWith: (ctx: { suffix: string; value: string }) => string;\n hex: () => string;\n hexColor: () => string;\n includes: (ctx: { substr: string; value: string }) => string;\n ip: () => string;\n jwt: () => string;\n length: (ctx: { exact: number; value: string }) => string;\n max: (ctx: { max: number; value: string }) => string;\n min: (ctx: { min: number; value: string }) => string;\n nanoid: () => string;\n nonEmpty: () => string;\n numeric: () => string;\n regex: (ctx: { value: string }) => string;\n semver: () => string;\n slug: () => string;\n startsWith: (ctx: { prefix: string; value: string }) => string;\n time: () => string;\n type: () => string;\n ulid: () => string;\n url: () => string;\n uuid: () => string;\n };\n tuple: {\n length: (ctx: { exact: number }) => string;\n min: (ctx: { min: number }) => string;\n type: () => string;\n };\n union: {\n invalid: () => string;\n };\n discriminatedUnion: {\n invalidDiscriminator: (ctx: { discriminator: string; expected: string[] }) => string;\n type: () => string;\n };\n};\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends Record<string, unknown> ? DeepPartial<T[K]> : T[K];\n};\n\nconst builtinMessages: Messages = {\n array: {\n length: ({ exact }) => `Must have exactly ${exact} items`,\n max: ({ max }) => `Must have at most ${max} items`,\n min: ({ min }) => `Must have at least ${min} items`,\n nonEmpty: () => 'Cannot be empty',\n type: () => 'Expected array',\n unique: () => 'All items must be unique',\n },\n bigint: {\n max: ({ max }) => `Must be at most ${max}`,\n min: ({ min }) => `Must be at least ${min}`,\n multipleOf: ({ step }) => `Must be a multiple of ${step}`,\n negative: () => 'Must be negative',\n nonNegative: () => 'Must be non-negative',\n nonPositive: () => 'Must be non-positive',\n positive: () => 'Must be positive',\n type: () => 'Expected bigint',\n },\n boolean: {\n type: () => 'Expected boolean',\n },\n check: {\n default: () => 'Invalid value',\n },\n date: {\n max: ({ max }) => `Must be before ${max.toISOString()}`,\n min: ({ min }) => `Must be after ${min.toISOString()}`,\n type: () => 'Expected valid date',\n },\n discriminatedUnion: {\n invalidDiscriminator: ({ discriminator, expected }) =>\n `Invalid discriminator value at \"${discriminator}\": expected ${expected.map((k) => JSON.stringify(k)).join(' | ')}`,\n type: () => 'Expected object',\n },\n enum: {\n invalid: ({ values }) => `Expected one of: ${values.map((v) => JSON.stringify(v)).join(', ')}`,\n },\n instanceof: {\n type: ({ className }) => `Expected instance of ${className}`,\n },\n literal: {\n expected: ({ expected }) => `Expected ${JSON.stringify(expected)}`,\n },\n map: {\n max: ({ max }) => `Must contain at most ${max} entries`,\n min: ({ min }) => `Must contain at least ${min} entries`,\n nonEmpty: () => 'Cannot be empty',\n size: ({ exact }) => `Must contain exactly ${exact} entries`,\n type: () => 'Expected map',\n },\n never: {\n invalid: () => 'Value is not allowed',\n },\n number: {\n finite: () => 'Must be finite',\n int: () => 'Must be an integer',\n max: ({ max }) => `Must be at most ${max}`,\n min: ({ min }) => `Must be at least ${min}`,\n multipleOf: ({ step }) => `Must be a multiple of ${step}`,\n negative: () => 'Must be negative',\n nonNegative: () => 'Must be non-negative',\n nonPositive: () => 'Must be non-positive',\n positive: () => 'Must be positive',\n safe: () => 'Must be a safe integer',\n type: () => 'Expected number',\n },\n object: {\n invalidKeys: ({ keys }) => `Unrecognized keys: ${keys.join(', ')}`,\n type: () => 'Expected object',\n },\n set: {\n max: ({ max }) => `Must contain at most ${max} items`,\n min: ({ min }) => `Must contain at least ${min} items`,\n nonEmpty: () => 'Cannot be empty',\n size: ({ exact }) => `Must contain exactly ${exact} items`,\n type: () => 'Expected set',\n },\n string: {\n base64: () => 'Invalid base64',\n base64url: () => 'Invalid base64url',\n cuid: () => 'Invalid CUID',\n cuid2: () => 'Invalid CUID2',\n duration: () => 'Invalid ISO 8601 duration',\n email: () => 'Invalid email address',\n emoji: () => 'Invalid emoji sequence',\n endsWith: ({ suffix }) => `Must end with \"${suffix}\"`,\n hex: () => 'Invalid hex',\n hexColor: () => 'Invalid hex color',\n includes: ({ substr }) => `Must include \"${substr}\"`,\n ip: () => 'Invalid IP address',\n isoDate: () => 'Invalid date',\n isoDateTime: () => 'Invalid datetime',\n jwt: () => 'Invalid JWT',\n length: ({ exact }) => `Must be exactly ${exact} characters`,\n max: ({ max }) => `Must be at most ${max} characters`,\n min: ({ min }) => `Must be at least ${min} characters`,\n nanoid: () => 'Invalid NanoID',\n nonEmpty: () => 'Cannot be empty',\n numeric: () => 'Invalid numeric string',\n regex: () => 'Invalid format',\n semver: () => 'Invalid semver',\n slug: () => 'Invalid slug',\n startsWith: ({ prefix }) => `Must start with \"${prefix}\"`,\n time: () => 'Invalid time',\n type: () => 'Expected string',\n ulid: () => 'Invalid ULID',\n url: () => 'Invalid URL',\n uuid: () => 'Invalid UUID',\n },\n tuple: {\n length: ({ exact }) => `Expected tuple of length ${exact}`,\n min: ({ min }) => `Expected tuple with at least ${min} items`,\n type: () => 'Expected array',\n },\n union: {\n invalid: () => 'Does not match any of the expected types',\n },\n};\n\nfunction mergeMessages<T extends Record<string, unknown>>(base: T, patch: DeepPartial<T>): T {\n const out = objectFromEntries(Object.entries(base));\n\n for (const [key, value] of Object.entries(patch)) {\n if (value === undefined) continue;\n\n if (isUnsafeObjectKey(key)) {\n warn(`Ignoring unsafe message override key \"${key}\" to prevent prototype mutation.`);\n continue;\n }\n\n const baseValue = out[key];\n\n defineOwnProperty(\n out,\n key,\n isPlainObject(baseValue) && isPlainObject(value)\n ? mergeMessages(baseValue, value as DeepPartial<typeof baseValue>)\n : value,\n );\n }\n\n return out as T;\n}\n\n/**\n * Creates a frozen parse context with the built-in messages merged with `messages`. Pass it to\n * parse methods when validation messages vary by request, locale, or form. Spell never stores it globally.\n */\nexport function createParseContext(messages: DeepPartial<Messages> = {}): ParseContext {\n return deepFreeze({ messages: mergeMessages(builtinMessages, messages) });\n}\n\n/** The context used when a parse method receives none. */\nexport const defaultContext: ParseContext = createParseContext();\n"],"mappings":"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"}
|
package/dist/predicates.cjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e){try{return new URL(e)}catch{return null}}function t(e){return/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(e)}function n(t,n=[`http`,`https`]){let r=e(t)?.protocol.slice(0,-1).toLowerCase();return r!==void 0&&n.some(e=>e.toLowerCase()===r)}function r(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}function i(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString().startsWith(e)}function a(e){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})?$/.test(e)&&!Number.isNaN(new Date(e).getTime())}function o(t){return/^(\d{1,3}\.){3}\d{1,3}$/.test(t)?t.split(`.`).every(e=>Number(e)<=255):/^[0-9A-Fa-f:.]+$/.test(t)&&e(`http://[${t}]/`)!==null}function s(e){return/^c[a-z0-9]{8,}$/.test(e)}function c(e){return/^[a-z][a-z0-9]{23}$/.test(e)}function l(e){return/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(e)}function u(e,t=21){return e.length===t&&/^[A-Za-z0-9_-]+$/.test(e)}function d(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(e)}function f(e){return e.length===0||e.length%4==1?!1:/^[A-Za-z0-9_-]*={0,2}$/.test(e)}function p(e){return/^[A-Fa-f0-9]+$/.test(e)}function m(e){return/^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/.test(e)}function h(e){return/^\p{Extended_Pictographic}+$/u.test(e)}function g(e){return/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(e)}function _(e){return/^(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/.test(e)}function v(e){return/^P(?=\d|T\d)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(\d+H)?(\d+M)?(\d+(?:\.\d+)?S)?)?$/.test(e)}function y(e){return/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/.test(e)}function b(e){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(e)}function x(e){return/^[-+]?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?$/i.test(e)}exports.isBase64=d,exports.isBase64url=f,exports.isCuid=s,exports.isCuid2=c,exports.isDuration=v,exports.isEmail=t,exports.isEmoji=h,exports.isHex=p,exports.isHexColor=m,exports.isIp=o,exports.isIsoDate=i,exports.isIsoDateTime=a,exports.isJwt=g,exports.isNanoid=u,exports.isNumeric=x,exports.isSemver=y,exports.isSlug=b,exports.isTime=_,exports.isUlid=l,exports.isUrl=n,exports.isUuid=r;
|
|
2
|
+
//# sourceMappingURL=predicates.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicates.cjs","names":["parseUrl","value","isEmail","isUrl","protocol","protocols","allowed","isUuid","isIsoDate","date","isIsoDateTime","isIp","octet","isCuid","isCuid2","isUlid","isNanoid","length","isBase64","isBase64url","isHex","isHexColor","isEmoji","isJwt","isTime","isDuration","isSemver","isSlug","isNumeric"],"sources":["../src/predicates.ts"],"sourcesContent":["/**\n * Pure string format predicates backing the `s.string()` format methods. Use them where a\n * boolean is enough and no schema is needed:\n *\n * ```ts\n * import { isEmail } from '@vielzeug/spell/predicates';\n * isEmail('ada@example.com'); // true\n * ```\n */\n\nfunction parseUrl(value: string): URL | null {\n try {\n return new URL(value);\n } catch {\n return null;\n }\n}\n\nexport function isEmail(value: string): boolean {\n return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(value);\n}\n\n/** Parses with `URL` and checks the protocol (without `:`) against `protocols`, case-insensitively. */\nexport function isUrl(value: string, protocols: readonly string[] = ['http', 'https']): boolean {\n const protocol = parseUrl(value)?.protocol.slice(0, -1).toLowerCase();\n\n return protocol !== undefined && protocols.some((allowed) => allowed.toLowerCase() === protocol);\n}\n\nexport function isUuid(value: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value);\n}\n\n/** `YYYY-MM-DD` naming a real calendar day. */\nexport function isIsoDate(value: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) return false;\n\n const date = new Date(value);\n\n return !Number.isNaN(date.getTime()) && date.toISOString().startsWith(value);\n}\n\nexport function isIsoDateTime(value: string): boolean {\n return (\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})?$/.test(value) &&\n !Number.isNaN(new Date(value).getTime())\n );\n}\n\n/** IPv4 dotted quad or any IPv6 form accepted by the URL parser. */\nexport function isIp(value: string): boolean {\n if (/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(value)) return value.split('.').every((octet) => Number(octet) <= 255);\n\n return /^[0-9A-Fa-f:.]+$/.test(value) && parseUrl(`http://[${value}]/`) !== null;\n}\n\nexport function isCuid(value: string): boolean {\n return /^c[a-z0-9]{8,}$/.test(value);\n}\n\nexport function isCuid2(value: string): boolean {\n return /^[a-z][a-z0-9]{23}$/.test(value);\n}\n\nexport function isUlid(value: string): boolean {\n return /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(value);\n}\n\n/** NanoID alphabet of exactly `length` characters (default 21). */\nexport function isNanoid(value: string, length = 21): boolean {\n return value.length === length && /^[A-Za-z0-9_-]+$/.test(value);\n}\n\nexport function isBase64(value: string): boolean {\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(value);\n}\n\n/** Base64url (RFC 4648 §5), padded or unpadded. */\nexport function isBase64url(value: string): boolean {\n if (value.length === 0 || value.length % 4 === 1) return false;\n\n return /^[A-Za-z0-9_-]*={0,2}$/.test(value);\n}\n\nexport function isHex(value: string): boolean {\n return /^[A-Fa-f0-9]+$/.test(value);\n}\n\n/** `#rgb`, `#rrggbb`, or `#rrggbbaa`. */\nexport function isHexColor(value: string): boolean {\n return /^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/.test(value);\n}\n\nexport function isEmoji(value: string): boolean {\n return /^\\p{Extended_Pictographic}+$/u.test(value);\n}\n\n/** Three base64url segments; does not verify the signature. */\nexport function isJwt(value: string): boolean {\n return /^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/.test(value);\n}\n\n/** `HH:MM` or `HH:MM:SS`, 24-hour clock. */\nexport function isTime(value: string): boolean {\n return /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/.test(value);\n}\n\n/** ISO 8601 duration such as `P1DT2H`. */\nexport function isDuration(value: string): boolean {\n return /^P(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+(?:\\.\\d+)?S)?)?$/.test(value);\n}\n\nexport function isSemver(value: string): boolean {\n return /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/.test(\n value,\n );\n}\n\n/** Lowercase kebab-case: `my-post-1`. */\nexport function isSlug(value: string): boolean {\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value);\n}\n\n/** Decimal number literal with optional sign and exponent. */\nexport function isNumeric(value: string): boolean {\n return /^[-+]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?$/i.test(value);\n}\n"],"mappings":"A,mEAUA,SAASA,EAAS,EAA2B,CAC3C,GAAI,CACF,OAAO,IAAI,IAAIC,CAAK,CACtB,MAAQ,CACN,OAAO,IACT,CACF,CAEA,SAAgBC,EAAQ,EAAwB,CAC9C,MAAO,mDAAmD,KAAKD,CAAK,CACtE,CAGA,SAAgBE,EAAM,EAAe,EAA+B,CAAC,OAAQ,OAAO,EAAY,CAC9F,IAAMC,EAAWJ,EAASC,CAAK,CAAC,EAAE,SAAS,MAAM,EAAG,EAAE,CAAC,CAAC,YAAY,EAEpE,OAAOG,IAAa,IAAA,IAAaC,EAAU,KAAM,GAAYC,EAAQ,YAAY,IAAMF,CAAQ,CACjG,CAEA,SAAgBG,EAAO,EAAwB,CAC7C,MAAO,kEAAkE,KAAKN,CAAK,CACrF,CAGA,SAAgBO,EAAU,EAAwB,CAChD,GAAI,CAAC,sBAAsB,KAAKP,CAAK,EAAG,MAAO,GAE/C,IAAMQ,EAAO,IAAI,KAAKR,CAAK,EAE3B,MAAO,CAAC,OAAO,MAAMQ,EAAK,QAAQ,CAAC,GAAKA,EAAK,YAAY,CAAC,CAAC,WAAWR,CAAK,CAC7E,CAEA,SAAgBS,EAAc,EAAwB,CACpD,MACE,6EAA6E,KAAKT,CAAK,GACvF,CAAC,OAAO,MAAM,IAAI,KAAKA,CAAK,CAAC,CAAC,QAAQ,CAAC,CAE3C,CAGA,SAAgBU,EAAK,EAAwB,CAG3C,MAFI,0BAA0B,KAAKV,CAAK,EAAUA,EAAM,MAAM,GAAG,CAAC,CAAC,MAAO,GAAU,OAAOW,CAAK,GAAK,GAAG,EAEjG,mBAAmB,KAAKX,CAAK,GAAKD,EAAS,WAAWC,EAAM,GAAG,IAAM,IAC9E,CAEA,SAAgBY,EAAO,EAAwB,CAC7C,MAAO,kBAAkB,KAAKZ,CAAK,CACrC,CAEA,SAAgBa,EAAQ,EAAwB,CAC9C,MAAO,sBAAsB,KAAKb,CAAK,CACzC,CAEA,SAAgBc,EAAO,EAAwB,CAC7C,MAAO,gCAAgC,KAAKd,CAAK,CACnD,CAGA,SAAgBe,EAAS,EAAe,EAAS,GAAa,CAC5D,OAAOf,EAAM,SAAWgB,GAAU,mBAAmB,KAAKhB,CAAK,CACjE,CAEA,SAAgBiB,EAAS,EAAwB,CAC/C,MAAO,mFAAmF,KAAKjB,CAAK,CACtG,CAGA,SAAgBkB,EAAY,EAAwB,CAGlD,OAFIlB,EAAM,SAAW,GAAKA,EAAM,OAAS,GAAM,EAAU,GAElD,yBAAyB,KAAKA,CAAK,CAC5C,CAEA,SAAgBmB,EAAM,EAAwB,CAC5C,MAAO,iBAAiB,KAAKnB,CAAK,CACpC,CAGA,SAAgBoB,EAAW,EAAwB,CACjD,MAAO,sDAAsD,KAAKpB,CAAK,CACzE,CAEA,SAAgBqB,EAAQ,EAAwB,CAC9C,MAAO,gCAAgC,KAAKrB,CAAK,CACnD,CAGA,SAAgBsB,EAAM,EAAwB,CAC5C,MAAO,mDAAmD,KAAKtB,CAAK,CACtE,CAGA,SAAgBuB,EAAO,EAAwB,CAC7C,MAAO,2CAA2C,KAAKvB,CAAK,CAC9D,CAGA,SAAgBwB,EAAW,EAAwB,CACjD,MAAO,+EAA+E,KAAKxB,CAAK,CAClG,CAEA,SAAgByB,EAAS,EAAwB,CAC/C,MAAO,sLAAsL,KAC3LzB,CACF,CACF,CAGA,SAAgB0B,EAAO,EAAwB,CAC7C,MAAO,6BAA6B,KAAK1B,CAAK,CAChD,CAGA,SAAgB2B,EAAU,EAAwB,CAChD,MAAO,4CAA4C,KAAK3B,CAAK,CAC/D,C"}
|
package/dist/predicates.d.ts
CHANGED
|
@@ -1,3 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Pure string format predicates backing the `s.string()` format methods. Use them where a
|
|
3
|
+
* boolean is enough and no schema is needed:
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { isEmail } from '@vielzeug/spell/predicates';
|
|
7
|
+
* isEmail('ada@example.com'); // true
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
export declare function isEmail(value: string): boolean;
|
|
11
|
+
/** Parses with `URL` and checks the protocol (without `:`) against `protocols`, case-insensitively. */
|
|
12
|
+
export declare function isUrl(value: string, protocols?: readonly string[]): boolean;
|
|
13
|
+
export declare function isUuid(value: string): boolean;
|
|
14
|
+
/** `YYYY-MM-DD` naming a real calendar day. */
|
|
15
|
+
export declare function isIsoDate(value: string): boolean;
|
|
16
|
+
export declare function isIsoDateTime(value: string): boolean;
|
|
17
|
+
/** IPv4 dotted quad or any IPv6 form accepted by the URL parser. */
|
|
18
|
+
export declare function isIp(value: string): boolean;
|
|
19
|
+
export declare function isCuid(value: string): boolean;
|
|
20
|
+
export declare function isCuid2(value: string): boolean;
|
|
21
|
+
export declare function isUlid(value: string): boolean;
|
|
22
|
+
/** NanoID alphabet of exactly `length` characters (default 21). */
|
|
23
|
+
export declare function isNanoid(value: string, length?: number): boolean;
|
|
24
|
+
export declare function isBase64(value: string): boolean;
|
|
25
|
+
/** Base64url (RFC 4648 §5), padded or unpadded. */
|
|
26
|
+
export declare function isBase64url(value: string): boolean;
|
|
27
|
+
export declare function isHex(value: string): boolean;
|
|
28
|
+
/** `#rgb`, `#rrggbb`, or `#rrggbbaa`. */
|
|
29
|
+
export declare function isHexColor(value: string): boolean;
|
|
30
|
+
export declare function isEmoji(value: string): boolean;
|
|
31
|
+
/** Three base64url segments; does not verify the signature. */
|
|
32
|
+
export declare function isJwt(value: string): boolean;
|
|
33
|
+
/** `HH:MM` or `HH:MM:SS`, 24-hour clock. */
|
|
34
|
+
export declare function isTime(value: string): boolean;
|
|
35
|
+
/** ISO 8601 duration such as `P1DT2H`. */
|
|
36
|
+
export declare function isDuration(value: string): boolean;
|
|
37
|
+
export declare function isSemver(value: string): boolean;
|
|
38
|
+
/** Lowercase kebab-case: `my-post-1`. */
|
|
39
|
+
export declare function isSlug(value: string): boolean;
|
|
40
|
+
/** Decimal number literal with optional sign and exponent. */
|
|
41
|
+
export declare function isNumeric(value: string): boolean;
|
|
3
42
|
//# sourceMappingURL=predicates.d.ts.map
|
package/dist/predicates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../src/predicates.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../src/predicates.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,uGAAuG;AACvG,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,SAAS,MAAM,EAAsB,GAAG,OAAO,CAI9F;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMhD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKpD;AAED,oEAAoE;AACpE,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAI3C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,OAAO,CAE5D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIlD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,yCAAyC;AACzC,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,+DAA+D;AAC/D,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,4CAA4C;AAC5C,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,0CAA0C;AAC1C,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAI/C;AAED,yCAAyC;AACzC,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhD"}
|
package/dist/predicates.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
function e(e){try{return new URL(e)}catch{return null}}function t(e){return/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(e)}function n(t,n=[`http`,`https`]){let r=e(t)?.protocol.slice(0,-1).toLowerCase();return r!==void 0&&n.some(e=>e.toLowerCase()===r)}function r(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}function i(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString().startsWith(e)}function a(e){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})?$/.test(e)&&!Number.isNaN(new Date(e).getTime())}function o(t){return/^(\d{1,3}\.){3}\d{1,3}$/.test(t)?t.split(`.`).every(e=>Number(e)<=255):/^[0-9A-Fa-f:.]+$/.test(t)&&e(`http://[${t}]/`)!==null}function s(e){return/^c[a-z0-9]{8,}$/.test(e)}function c(e){return/^[a-z][a-z0-9]{23}$/.test(e)}function l(e){return/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(e)}function u(e,t=21){return e.length===t&&/^[A-Za-z0-9_-]+$/.test(e)}function d(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(e)}function f(e){return e.length===0||e.length%4==1?!1:/^[A-Za-z0-9_-]*={0,2}$/.test(e)}function p(e){return/^[A-Fa-f0-9]+$/.test(e)}function m(e){return/^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/.test(e)}function h(e){return/^\p{Extended_Pictographic}+$/u.test(e)}function g(e){return/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(e)}function _(e){return/^(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/.test(e)}function v(e){return/^P(?=\d|T\d)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(\d+H)?(\d+M)?(\d+(?:\.\d+)?S)?)?$/.test(e)}function y(e){return/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/.test(e)}function b(e){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(e)}function x(e){return/^[-+]?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?$/i.test(e)}export{d as isBase64,f as isBase64url,s as isCuid,c as isCuid2,v as isDuration,t as isEmail,h as isEmoji,p as isHex,m as isHexColor,o as isIp,i as isIsoDate,a as isIsoDateTime,g as isJwt,u as isNanoid,x as isNumeric,y as isSemver,b as isSlug,_ as isTime,l as isUlid,n as isUrl,r as isUuid};
|
|
2
|
+
//# sourceMappingURL=predicates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicates.js","names":["parseUrl","value","isEmail","isUrl","protocol","protocols","allowed","isUuid","isIsoDate","date","isIsoDateTime","isIp","octet","isCuid","isCuid2","isUlid","isNanoid","length","isBase64","isBase64url","isHex","isHexColor","isEmoji","isJwt","isTime","isDuration","isSemver","isSlug","isNumeric"],"sources":["../src/predicates.ts"],"sourcesContent":["/**\n * Pure string format predicates backing the `s.string()` format methods. Use them where a\n * boolean is enough and no schema is needed:\n *\n * ```ts\n * import { isEmail } from '@vielzeug/spell/predicates';\n * isEmail('ada@example.com'); // true\n * ```\n */\n\nfunction parseUrl(value: string): URL | null {\n try {\n return new URL(value);\n } catch {\n return null;\n }\n}\n\nexport function isEmail(value: string): boolean {\n return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(value);\n}\n\n/** Parses with `URL` and checks the protocol (without `:`) against `protocols`, case-insensitively. */\nexport function isUrl(value: string, protocols: readonly string[] = ['http', 'https']): boolean {\n const protocol = parseUrl(value)?.protocol.slice(0, -1).toLowerCase();\n\n return protocol !== undefined && protocols.some((allowed) => allowed.toLowerCase() === protocol);\n}\n\nexport function isUuid(value: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value);\n}\n\n/** `YYYY-MM-DD` naming a real calendar day. */\nexport function isIsoDate(value: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) return false;\n\n const date = new Date(value);\n\n return !Number.isNaN(date.getTime()) && date.toISOString().startsWith(value);\n}\n\nexport function isIsoDateTime(value: string): boolean {\n return (\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})?$/.test(value) &&\n !Number.isNaN(new Date(value).getTime())\n );\n}\n\n/** IPv4 dotted quad or any IPv6 form accepted by the URL parser. */\nexport function isIp(value: string): boolean {\n if (/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(value)) return value.split('.').every((octet) => Number(octet) <= 255);\n\n return /^[0-9A-Fa-f:.]+$/.test(value) && parseUrl(`http://[${value}]/`) !== null;\n}\n\nexport function isCuid(value: string): boolean {\n return /^c[a-z0-9]{8,}$/.test(value);\n}\n\nexport function isCuid2(value: string): boolean {\n return /^[a-z][a-z0-9]{23}$/.test(value);\n}\n\nexport function isUlid(value: string): boolean {\n return /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(value);\n}\n\n/** NanoID alphabet of exactly `length` characters (default 21). */\nexport function isNanoid(value: string, length = 21): boolean {\n return value.length === length && /^[A-Za-z0-9_-]+$/.test(value);\n}\n\nexport function isBase64(value: string): boolean {\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(value);\n}\n\n/** Base64url (RFC 4648 §5), padded or unpadded. */\nexport function isBase64url(value: string): boolean {\n if (value.length === 0 || value.length % 4 === 1) return false;\n\n return /^[A-Za-z0-9_-]*={0,2}$/.test(value);\n}\n\nexport function isHex(value: string): boolean {\n return /^[A-Fa-f0-9]+$/.test(value);\n}\n\n/** `#rgb`, `#rrggbb`, or `#rrggbbaa`. */\nexport function isHexColor(value: string): boolean {\n return /^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/.test(value);\n}\n\nexport function isEmoji(value: string): boolean {\n return /^\\p{Extended_Pictographic}+$/u.test(value);\n}\n\n/** Three base64url segments; does not verify the signature. */\nexport function isJwt(value: string): boolean {\n return /^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/.test(value);\n}\n\n/** `HH:MM` or `HH:MM:SS`, 24-hour clock. */\nexport function isTime(value: string): boolean {\n return /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/.test(value);\n}\n\n/** ISO 8601 duration such as `P1DT2H`. */\nexport function isDuration(value: string): boolean {\n return /^P(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+(?:\\.\\d+)?S)?)?$/.test(value);\n}\n\nexport function isSemver(value: string): boolean {\n return /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/.test(\n value,\n );\n}\n\n/** Lowercase kebab-case: `my-post-1`. */\nexport function isSlug(value: string): boolean {\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value);\n}\n\n/** Decimal number literal with optional sign and exponent. */\nexport function isNumeric(value: string): boolean {\n return /^[-+]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?$/i.test(value);\n}\n"],"mappings":"AAUA,SAASA,EAAS,EAA2B,CAC3C,GAAI,CACF,OAAO,IAAI,IAAIC,CAAK,CACtB,MAAQ,CACN,OAAO,IACT,CACF,CAEA,SAAgBC,EAAQ,EAAwB,CAC9C,MAAO,mDAAmD,KAAKD,CAAK,CACtE,CAGA,SAAgBE,EAAM,EAAe,EAA+B,CAAC,OAAQ,OAAO,EAAY,CAC9F,IAAMC,EAAWJ,EAASC,CAAK,CAAC,EAAE,SAAS,MAAM,EAAG,EAAE,CAAC,CAAC,YAAY,EAEpE,OAAOG,IAAa,IAAA,IAAaC,EAAU,KAAM,GAAYC,EAAQ,YAAY,IAAMF,CAAQ,CACjG,CAEA,SAAgBG,EAAO,EAAwB,CAC7C,MAAO,kEAAkE,KAAKN,CAAK,CACrF,CAGA,SAAgBO,EAAU,EAAwB,CAChD,GAAI,CAAC,sBAAsB,KAAKP,CAAK,EAAG,MAAO,GAE/C,IAAMQ,EAAO,IAAI,KAAKR,CAAK,EAE3B,MAAO,CAAC,OAAO,MAAMQ,EAAK,QAAQ,CAAC,GAAKA,EAAK,YAAY,CAAC,CAAC,WAAWR,CAAK,CAC7E,CAEA,SAAgBS,EAAc,EAAwB,CACpD,MACE,6EAA6E,KAAKT,CAAK,GACvF,CAAC,OAAO,MAAM,IAAI,KAAKA,CAAK,CAAC,CAAC,QAAQ,CAAC,CAE3C,CAGA,SAAgBU,EAAK,EAAwB,CAG3C,MAFI,0BAA0B,KAAKV,CAAK,EAAUA,EAAM,MAAM,GAAG,CAAC,CAAC,MAAO,GAAU,OAAOW,CAAK,GAAK,GAAG,EAEjG,mBAAmB,KAAKX,CAAK,GAAKD,EAAS,WAAWC,EAAM,GAAG,IAAM,IAC9E,CAEA,SAAgBY,EAAO,EAAwB,CAC7C,MAAO,kBAAkB,KAAKZ,CAAK,CACrC,CAEA,SAAgBa,EAAQ,EAAwB,CAC9C,MAAO,sBAAsB,KAAKb,CAAK,CACzC,CAEA,SAAgBc,EAAO,EAAwB,CAC7C,MAAO,gCAAgC,KAAKd,CAAK,CACnD,CAGA,SAAgBe,EAAS,EAAe,EAAS,GAAa,CAC5D,OAAOf,EAAM,SAAWgB,GAAU,mBAAmB,KAAKhB,CAAK,CACjE,CAEA,SAAgBiB,EAAS,EAAwB,CAC/C,MAAO,mFAAmF,KAAKjB,CAAK,CACtG,CAGA,SAAgBkB,EAAY,EAAwB,CAGlD,OAFIlB,EAAM,SAAW,GAAKA,EAAM,OAAS,GAAM,EAAU,GAElD,yBAAyB,KAAKA,CAAK,CAC5C,CAEA,SAAgBmB,EAAM,EAAwB,CAC5C,MAAO,iBAAiB,KAAKnB,CAAK,CACpC,CAGA,SAAgBoB,EAAW,EAAwB,CACjD,MAAO,sDAAsD,KAAKpB,CAAK,CACzE,CAEA,SAAgBqB,EAAQ,EAAwB,CAC9C,MAAO,gCAAgC,KAAKrB,CAAK,CACnD,CAGA,SAAgBsB,EAAM,EAAwB,CAC5C,MAAO,mDAAmD,KAAKtB,CAAK,CACtE,CAGA,SAAgBuB,EAAO,EAAwB,CAC7C,MAAO,2CAA2C,KAAKvB,CAAK,CAC9D,CAGA,SAAgBwB,EAAW,EAAwB,CACjD,MAAO,+EAA+E,KAAKxB,CAAK,CAClG,CAEA,SAAgByB,EAAS,EAAwB,CAC/C,MAAO,sLAAsL,KAC3LzB,CACF,CACF,CAGA,SAAgB0B,EAAO,EAAwB,CAC7C,MAAO,6BAA6B,KAAK1B,CAAK,CAChD,CAGA,SAAgB2B,EAAU,EAAwB,CAChD,MAAO,4CAA4C,KAAK3B,CAAK,CAC/D,C"}
|
package/dist/s.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./
|
|
1
|
+
const e=require("./schema.cjs"),t=require("./schemas/array.cjs"),n=require("./schemas/bigint.cjs"),r=require("./schemas/date.cjs"),i=require("./schemas/discriminated-union.cjs"),a=require("./schemas/intersect.cjs"),o=require("./schemas/lazy.cjs"),s=require("./schemas/map.cjs"),c=require("./schemas/number.cjs"),l=require("./schemas/object.cjs"),u=require("./schemas/primitives.cjs"),d=require("./schemas/record.cjs"),f=require("./schemas/set.cjs"),p=require("./schemas/string.cjs"),m=require("./schemas/tuple.cjs"),h=require("./schemas/union.cjs");var g=e=>{if(typeof e!=`string`&&typeof e!=`boolean`)return e;let t=Number(e);return Number.isNaN(t)?e:t},_=e=>e===`true`||e===`1`||e===1?!0:e===`false`||e===`0`||e===0?!1:e,v=e=>{if(typeof e==`number`&&!Number.isSafeInteger(e))return e;if(typeof e==`string`){let t=e.trim();if(t.length===0||t.length>1e3)return e;try{return BigInt(t)}catch{return e}}return typeof e==`number`?BigInt(e):e},y=e=>typeof e==`string`||typeof e==`number`?new Date(e):e,b=e=>e==null?e:String(e),x={array:e=>new t.ArraySchema(e),bigint:()=>new n.BigIntSchema,boolean:()=>new u.BooleanSchema,coerce:{bigint:()=>new n.BigIntSchema().preprocess(v),boolean:()=>new u.BooleanSchema().preprocess(_),date:()=>new r.DateSchema().preprocess(y),number:()=>new c.NumberSchema().preprocess(g),string:()=>new p.StringSchema().preprocess(b)},date:()=>new r.DateSchema,discriminatedUnion:(e,t)=>new i.DiscriminatedUnionSchema(e,t),enum:e=>new u.EnumSchema(e),instanceof:e=>new u.InstanceOfSchema(e),intersect:(...e)=>new a.IntersectSchema(e),lazy:e=>new o.LazySchema(e),literal:e=>new u.LiteralSchema(e),map:(e,t)=>new s.MapSchema(e,t),never:()=>new u.NeverSchema,null:()=>new u.LiteralSchema(null),number:()=>new c.NumberSchema,object:e=>new l.ObjectSchema(e),record:(e,t)=>new d.RecordSchema(e,t),set:e=>new f.SetSchema(e),string:()=>new p.StringSchema,tuple:e=>new m.TupleSchema(e),undefined:()=>new u.LiteralSchema(void 0),union:(...e)=>new h.UnionSchema(e),unknown:()=>new e.Schema};exports.s=x;
|
|
2
2
|
//# sourceMappingURL=s.cjs.map
|
package/dist/s.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s.cjs","names":["ArraySchema","BigIntSchema","BooleanSchema","DateSchema","EnumSchema","InstanceOfSchema","IntersectSchema","
|
|
1
|
+
{"version":3,"file":"s.cjs","names":["ArraySchema","BigIntSchema","BooleanSchema","DateSchema","NumberSchema","StringSchema","DiscriminatedUnionSchema","EnumSchema","InstanceOfSchema","IntersectSchema","LazySchema","LiteralSchema","MapSchema","NeverSchema","ObjectSchema","RecordSchema","SetSchema","TupleSchema","UnionSchema","Schema","require_schema","require_array","require_bigint","require_date","require_discriminated_union","require_intersect","require_lazy","require_map","require_number","require_object","require_primitives","require_record","require_set","require_string","require_tuple","require_union","coerceNumber","value","parsed","coerceBoolean","coerceBigInt","trimmed","coerceDate","coerceString","s","item","discriminator","branches","values","cls","schemas","getter","key","shape","items"],"sources":["../src/s.ts"],"sourcesContent":["import { Schema } from './schema';\nimport { ArraySchema } from './schemas/array';\nimport { BigIntSchema } from './schemas/bigint';\nimport { DateSchema } from './schemas/date';\nimport { type DiscriminatedBranches, DiscriminatedUnionSchema } from './schemas/discriminated-union';\nimport { IntersectSchema } from './schemas/intersect';\nimport { LazySchema } from './schemas/lazy';\nimport { MapSchema } from './schemas/map';\nimport { NumberSchema } from './schemas/number';\nimport { ObjectSchema, type ObjectShape } from './schemas/object';\nimport {\n BooleanSchema,\n EnumSchema,\n type EnumValues,\n InstanceOfSchema,\n LiteralSchema,\n type LiteralValue,\n NeverSchema,\n} from './schemas/primitives';\nimport { RecordSchema } from './schemas/record';\nimport { SetSchema } from './schemas/set';\nimport { StringSchema } from './schemas/string';\nimport { TupleSchema, type TupleSchemas } from './schemas/tuple';\nimport { type UnionMembers, UnionSchema } from './schemas/union';\nimport type { AnySchema, InferInput, InferOutput } from './types';\n\nconst coerceNumber = (value: unknown): unknown => {\n if (typeof value !== 'string' && typeof value !== 'boolean') return value;\n\n const parsed = Number(value);\n\n return Number.isNaN(parsed) ? value : parsed;\n};\n\nconst coerceBoolean = (value: unknown): unknown => {\n if (value === 'true' || value === '1' || value === 1) return true;\n\n if (value === 'false' || value === '0' || value === 0) return false;\n\n return value;\n};\n\nconst coerceBigInt = (value: unknown): unknown => {\n if (typeof value === 'number' && !Number.isSafeInteger(value)) return value;\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // BigInt() parsing is superlinear in digit count; bound untrusted input.\n if (trimmed.length === 0 || trimmed.length > 1000) return value;\n\n try {\n return BigInt(trimmed);\n } catch {\n return value;\n }\n }\n\n return typeof value === 'number' ? BigInt(value) : value;\n};\n\nconst coerceDate = (value: unknown): unknown =>\n typeof value === 'string' || typeof value === 'number' ? new Date(value) : value;\n\nconst coerceString = (value: unknown): unknown => (value == null ? value : String(value));\n\n/**\n * Namespace of all schema builders.\n *\n * @example\n * import { s, type Infer } from '@vielzeug/spell';\n *\n * const User = s.object({ name: s.string(), age: s.number().int().positive() });\n * type User = Infer<typeof User>;\n */\nexport const s = {\n array: <T extends AnySchema>(item: T): ArraySchema<T> => new ArraySchema(item),\n bigint: (): BigIntSchema => new BigIntSchema(),\n boolean: (): BooleanSchema => new BooleanSchema(),\n /** Primitive schemas that convert their raw input before validating it. */\n coerce: {\n /** Converts safe-integer numbers and integer strings (up to 1000 characters). */\n bigint: (): BigIntSchema<unknown> => new BigIntSchema<unknown>().preprocess(coerceBigInt),\n /** Converts `'true'`/`'1'`/`1` and `'false'`/`'0'`/`0`. */\n boolean: (): BooleanSchema<unknown> => new BooleanSchema<unknown>().preprocess(coerceBoolean),\n /** Converts strings and epoch milliseconds with `new Date()`. */\n date: (): DateSchema<unknown> => new DateSchema<unknown>().preprocess(coerceDate),\n /** Converts numeric strings and booleans with `Number()`. */\n number: (): NumberSchema<unknown> => new NumberSchema<unknown>().preprocess(coerceNumber),\n /** Converts any non-nullish value with `String()`. */\n string: (): StringSchema<unknown> => new StringSchema<unknown>().preprocess(coerceString),\n },\n date: (): DateSchema => new DateSchema(),\n discriminatedUnion: <K extends string, M extends DiscriminatedBranches>(\n discriminator: K,\n branches: M,\n ): DiscriminatedUnionSchema<K, M> => new DiscriminatedUnionSchema(discriminator, branches),\n enum: <const T extends EnumValues>(values: T): EnumSchema<T> => new EnumSchema(values),\n instanceof: <T>(cls: abstract new (...args: never[]) => T): InstanceOfSchema<T> => new InstanceOfSchema(cls),\n intersect: <const T extends UnionMembers>(...schemas: T): IntersectSchema<T> => new IntersectSchema(schemas),\n lazy: <T extends AnySchema>(getter: () => T): LazySchema<InferOutput<T>, InferInput<T>> => new LazySchema(getter),\n literal: <const T extends LiteralValue>(value: T): LiteralSchema<T> => new LiteralSchema(value),\n map: <K extends AnySchema, V extends AnySchema>(key: K, value: V): MapSchema<K, V> => new MapSchema(key, value),\n never: (): NeverSchema => new NeverSchema(),\n null: (): LiteralSchema<null> => new LiteralSchema(null),\n number: (): NumberSchema => new NumberSchema(),\n object: <T extends ObjectShape>(shape: T): ObjectSchema<T> => new ObjectSchema(shape),\n record: <K extends AnySchema, V extends AnySchema>(key: K, value: V): RecordSchema<K, V> =>\n new RecordSchema(key, value),\n set: <T extends AnySchema>(item: T): SetSchema<T> => new SetSchema(item),\n string: (): StringSchema => new StringSchema(),\n tuple: <const T extends TupleSchemas>(items: T): TupleSchema<T> => new TupleSchema(items),\n undefined: (): LiteralSchema<undefined> => new LiteralSchema(undefined),\n union: <const T extends UnionMembers>(...schemas: T): UnionSchema<T> => new UnionSchema(schemas),\n unknown: (): Schema<unknown> => new Schema(),\n};\n"],"mappings":"A,qiBA0BA,IAAMoC,EAAgB,GAA4B,CAChD,GAAI,OAAOC,GAAU,UAAY,OAAOA,GAAU,UAAW,OAAOA,EAEpE,IAAMC,EAAS,OAAOD,CAAK,EAE3B,OAAO,OAAO,MAAMC,CAAM,EAAID,EAAQC,CACxC,EAEMC,EAAiB,GACjBF,IAAU,QAAUA,IAAU,KAAOA,IAAU,EAAU,GAEzDA,IAAU,SAAWA,IAAU,KAAOA,IAAU,EAAU,GAEvDA,EAGHG,EAAgB,GAA4B,CAChD,GAAI,OAAOH,GAAU,UAAY,CAAC,OAAO,cAAcA,CAAK,EAAG,OAAOA,EAEtE,GAAI,OAAOA,GAAU,SAAU,CAC7B,IAAMI,EAAUJ,EAAM,KAAK,EAG3B,GAAII,EAAQ,SAAW,GAAKA,EAAQ,OAAS,IAAM,OAAOJ,EAE1D,GAAI,CACF,OAAO,OAAOI,CAAO,CACvB,MAAQ,CACN,OAAOJ,CACT,CACF,CAEA,OAAO,OAAOA,GAAU,SAAW,OAAOA,CAAK,EAAIA,CACrD,EAEMK,EAAc,GAClB,OAAOL,GAAU,UAAY,OAAOA,GAAU,SAAW,IAAI,KAAKA,CAAK,EAAIA,EAEvEM,EAAgB,GAA6BN,GAAS,KAAOA,EAAQ,OAAOA,CAAK,EAW1EO,EAAI,CACf,MAA6B,GAA4B,IAAI5C,EAAAA,YAAY6C,CAAI,EAC7E,WAA4B,IAAI5C,EAAAA,aAChC,YAA8B,IAAIC,EAAAA,cAElC,OAAQ,CAEN,WAAqC,IAAID,EAAAA,aAAsB,CAAC,CAAC,WAAWuC,CAAY,EAExF,YAAuC,IAAItC,EAAAA,cAAuB,CAAC,CAAC,WAAWqC,CAAa,EAE5F,SAAiC,IAAIpC,EAAAA,WAAoB,CAAC,CAAC,WAAWuC,CAAU,EAEhF,WAAqC,IAAItC,EAAAA,aAAsB,CAAC,CAAC,WAAWgC,CAAY,EAExF,WAAqC,IAAI/B,EAAAA,aAAsB,CAAC,CAAC,WAAWsC,CAAY,CAC1F,EACA,SAAwB,IAAIxC,EAAAA,WAC5B,oBACE,EACA,IACmC,IAAIG,EAAAA,yBAAyBwC,EAAeC,CAAQ,EACzF,KAAmC,GAA6B,IAAIxC,EAAAA,WAAWyC,CAAM,EACrF,WAAgB,GAAmE,IAAIxC,EAAAA,iBAAiByC,CAAG,EAC3G,WAA0C,GAAGC,IAAmC,IAAIzC,EAAAA,gBAAgByC,CAAO,EAC3G,KAA4B,GAA+D,IAAIxC,EAAAA,WAAWyC,CAAM,EAChH,QAAwC,GAA+B,IAAIxC,EAAAA,cAAc0B,CAAK,EAC9F,KAAgD,EAAQ,IAA8B,IAAIzB,EAAAA,UAAUwC,EAAKf,CAAK,EAC9G,UAA0B,IAAIxB,EAAAA,YAC9B,SAAiC,IAAIF,EAAAA,cAAc,IAAI,EACvD,WAA4B,IAAIP,EAAAA,aAChC,OAAgC,GAA8B,IAAIU,EAAAA,aAAauC,CAAK,EACpF,QAAmD,EAAQ,IACzD,IAAItC,EAAAA,aAAaqC,EAAKf,CAAK,EAC7B,IAA2B,GAA0B,IAAIrB,EAAAA,UAAU6B,CAAI,EACvE,WAA4B,IAAIxC,EAAAA,aAChC,MAAsC,GAA6B,IAAIY,EAAAA,YAAYqC,CAAK,EACxF,cAA2C,IAAI3C,EAAAA,cAAc,IAAA,EAAS,EACtE,OAAsC,GAAGuC,IAA+B,IAAIhC,EAAAA,YAAYgC,CAAO,EAC/F,YAAgC,IAAI/B,EAAAA,MACtC,E"}
|
package/dist/s.d.ts
CHANGED
|
@@ -1,28 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Schema } from './schema';
|
|
2
2
|
import { ArraySchema } from './schemas/array';
|
|
3
3
|
import { BigIntSchema } from './schemas/bigint';
|
|
4
|
-
import { BooleanSchema } from './schemas/boolean';
|
|
5
4
|
import { DateSchema } from './schemas/date';
|
|
6
|
-
import {
|
|
7
|
-
import { InstanceOfSchema } from './schemas/instanceof';
|
|
5
|
+
import { type DiscriminatedBranches, DiscriminatedUnionSchema } from './schemas/discriminated-union';
|
|
8
6
|
import { IntersectSchema } from './schemas/intersect';
|
|
9
7
|
import { LazySchema } from './schemas/lazy';
|
|
10
|
-
import { LiteralSchema } from './schemas/literal';
|
|
11
8
|
import { MapSchema } from './schemas/map';
|
|
12
|
-
import { NeverSchema } from './schemas/never';
|
|
13
9
|
import { NumberSchema } from './schemas/number';
|
|
14
10
|
import { ObjectSchema, type ObjectShape } from './schemas/object';
|
|
15
|
-
import { type
|
|
11
|
+
import { BooleanSchema, EnumSchema, type EnumValues, InstanceOfSchema, LiteralSchema, type LiteralValue, NeverSchema } from './schemas/primitives';
|
|
16
12
|
import { RecordSchema } from './schemas/record';
|
|
17
13
|
import { SetSchema } from './schemas/set';
|
|
18
14
|
import { StringSchema } from './schemas/string';
|
|
19
15
|
import { TupleSchema, type TupleSchemas } from './schemas/tuple';
|
|
20
|
-
import { UnionSchema } from './schemas/union';
|
|
21
|
-
import {
|
|
22
|
-
declare function sUnion<T extends readonly [AnySchema, AnySchema, ...AnySchema[]]>(...items: T): UnionSchema<T>;
|
|
23
|
-
declare function sUnion<T extends readonly [RawOrSchema, RawOrSchema, ...RawOrSchema[]]>(...items: T): UnionSchema<NormalizeItems<T> & readonly AnySchema[]>;
|
|
16
|
+
import { type UnionMembers, UnionSchema } from './schemas/union';
|
|
17
|
+
import type { AnySchema, InferInput, InferOutput } from './types';
|
|
24
18
|
/**
|
|
25
|
-
* Namespace of all schema
|
|
19
|
+
* Namespace of all schema builders.
|
|
26
20
|
*
|
|
27
21
|
* @example
|
|
28
22
|
* import { s, type Infer } from '@vielzeug/spell';
|
|
@@ -31,35 +25,40 @@ declare function sUnion<T extends readonly [RawOrSchema, RawOrSchema, ...RawOrSc
|
|
|
31
25
|
* type User = Infer<typeof User>;
|
|
32
26
|
*/
|
|
33
27
|
export declare const s: {
|
|
34
|
-
array: <T extends AnySchema>(
|
|
28
|
+
array: <T extends AnySchema>(item: T) => ArraySchema<T>;
|
|
35
29
|
bigint: () => BigIntSchema;
|
|
36
30
|
boolean: () => BooleanSchema;
|
|
31
|
+
/** Primitive schemas that convert their raw input before validating it. */
|
|
37
32
|
coerce: {
|
|
33
|
+
/** Converts safe-integer numbers and integer strings (up to 1000 characters). */
|
|
38
34
|
bigint: () => BigIntSchema<unknown>;
|
|
35
|
+
/** Converts `'true'`/`'1'`/`1` and `'false'`/`'0'`/`0`. */
|
|
39
36
|
boolean: () => BooleanSchema<unknown>;
|
|
37
|
+
/** Converts strings and epoch milliseconds with `new Date()`. */
|
|
40
38
|
date: () => DateSchema<unknown>;
|
|
39
|
+
/** Converts numeric strings and booleans with `Number()`. */
|
|
41
40
|
number: () => NumberSchema<unknown>;
|
|
41
|
+
/** Converts any non-nullish value with `String()`. */
|
|
42
42
|
string: () => StringSchema<unknown>;
|
|
43
43
|
};
|
|
44
44
|
date: () => DateSchema;
|
|
45
|
-
discriminatedUnion: <K extends string, M extends
|
|
45
|
+
discriminatedUnion: <K extends string, M extends DiscriminatedBranches>(discriminator: K, branches: M) => DiscriminatedUnionSchema<K, M>;
|
|
46
46
|
enum: <const T extends EnumValues>(values: T) => EnumSchema<T>;
|
|
47
|
-
instanceof: <T>(cls: new (...args: never[]) => T) => InstanceOfSchema<T>;
|
|
48
|
-
intersect: <T extends
|
|
47
|
+
instanceof: <T>(cls: abstract new (...args: never[]) => T) => InstanceOfSchema<T>;
|
|
48
|
+
intersect: <const T extends UnionMembers>(...schemas: T) => IntersectSchema<T>;
|
|
49
49
|
lazy: <T extends AnySchema>(getter: () => T) => LazySchema<InferOutput<T>, InferInput<T>>;
|
|
50
|
-
literal: <T extends
|
|
51
|
-
map: <K extends AnySchema, V extends AnySchema>(
|
|
50
|
+
literal: <const T extends LiteralValue>(value: T) => LiteralSchema<T>;
|
|
51
|
+
map: <K extends AnySchema, V extends AnySchema>(key: K, value: V) => MapSchema<K, V>;
|
|
52
52
|
never: () => NeverSchema;
|
|
53
53
|
null: () => LiteralSchema<null>;
|
|
54
54
|
number: () => NumberSchema;
|
|
55
55
|
object: <T extends ObjectShape>(shape: T) => ObjectSchema<T>;
|
|
56
|
-
record: <K extends AnySchema, V extends AnySchema>(
|
|
57
|
-
set: <T extends AnySchema>(
|
|
56
|
+
record: <K extends AnySchema, V extends AnySchema>(key: K, value: V) => RecordSchema<K, V>;
|
|
57
|
+
set: <T extends AnySchema>(item: T) => SetSchema<T>;
|
|
58
58
|
string: () => StringSchema;
|
|
59
59
|
tuple: <const T extends TupleSchemas>(items: T) => TupleSchema<T>;
|
|
60
60
|
undefined: () => LiteralSchema<undefined>;
|
|
61
|
-
union:
|
|
61
|
+
union: <const T extends UnionMembers>(...schemas: T) => UnionSchema<T>;
|
|
62
62
|
unknown: () => Schema<unknown>;
|
|
63
63
|
};
|
|
64
|
-
export {};
|
|
65
64
|
//# sourceMappingURL=s.d.ts.map
|
package/dist/s.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s.d.ts","sourceRoot":"","sources":["../src/s.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"s.d.ts","sourceRoot":"","sources":["../src/s.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,KAAK,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,aAAa,EACb,UAAU,EACV,KAAK,UAAU,EACf,gBAAgB,EAChB,aAAa,EACb,KAAK,YAAY,EACjB,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA0ClE;;;;;;;;GAQG;AACH,eAAO,MAAM,CAAC;YACJ,CAAC,SAAS,SAAS,QAAQ,CAAC,KAAG,WAAW,CAAC,CAAC,CAAC;kBACzC,YAAY;mBACX,aAAa;IAC1B,2EAA2E;;QAEzE,iFAAiF;sBACrE,YAAY,CAAC,OAAO,CAAC;QACjC,2DAA2D;uBAC9C,aAAa,CAAC,OAAO,CAAC;QACnC,iEAAiE;oBACvD,UAAU,CAAC,OAAO,CAAC;QAC7B,6DAA6D;sBACjD,YAAY,CAAC,OAAO,CAAC;QACjC,sDAAsD;sBAC1C,YAAY,CAAC,OAAO,CAAC;;gBAEzB,UAAU;yBACC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,qBAAqB,iBACrD,CAAC,YACN,CAAC,KACV,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC;iBACpB,CAAC,SAAS,UAAU,UAAU,CAAC,KAAG,UAAU,CAAC,CAAC,CAAC;iBAC/C,CAAC,OAAO,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAG,gBAAgB,CAAC,CAAC,CAAC;sBAC7D,CAAC,SAAS,YAAY,cAAc,CAAC,KAAG,eAAe,CAAC,CAAC,CAAC;WACrE,CAAC,SAAS,SAAS,UAAU,MAAM,CAAC,KAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;oBACvE,CAAC,SAAS,YAAY,SAAS,CAAC,KAAG,aAAa,CAAC,CAAC,CAAC;UAC7D,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,OAAO,CAAC,SAAS,CAAC,KAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;iBACvE,WAAW;gBACZ,aAAa,CAAC,IAAI,CAAC;kBACjB,YAAY;aACf,CAAC,SAAS,WAAW,SAAS,CAAC,KAAG,YAAY,CAAC,CAAC,CAAC;aACjD,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,OAAO,CAAC,SAAS,CAAC,KAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;UAElF,CAAC,SAAS,SAAS,QAAQ,CAAC,KAAG,SAAS,CAAC,CAAC,CAAC;kBACrC,YAAY;kBACV,CAAC,SAAS,YAAY,SAAS,CAAC,KAAG,WAAW,CAAC,CAAC,CAAC;qBAChD,aAAa,CAAC,SAAS,CAAC;kBACzB,CAAC,SAAS,YAAY,cAAc,CAAC,KAAG,WAAW,CAAC,CAAC,CAAC;mBACvD,MAAM,CAAC,OAAO,CAAC;CAC7B,CAAC"}
|
package/dist/s.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Schema as e}from"./
|
|
1
|
+
import{Schema as e}from"./schema.js";import{ArraySchema as t}from"./schemas/array.js";import{BigIntSchema as n}from"./schemas/bigint.js";import{DateSchema as r}from"./schemas/date.js";import{DiscriminatedUnionSchema as i}from"./schemas/discriminated-union.js";import{IntersectSchema as a}from"./schemas/intersect.js";import{LazySchema as o}from"./schemas/lazy.js";import{MapSchema as s}from"./schemas/map.js";import{NumberSchema as c}from"./schemas/number.js";import{ObjectSchema as l}from"./schemas/object.js";import{BooleanSchema as u,EnumSchema as d,InstanceOfSchema as f,LiteralSchema as p,NeverSchema as m}from"./schemas/primitives.js";import{RecordSchema as h}from"./schemas/record.js";import{SetSchema as g}from"./schemas/set.js";import{StringSchema as _}from"./schemas/string.js";import{TupleSchema as v}from"./schemas/tuple.js";import{UnionSchema as y}from"./schemas/union.js";var b=e=>{if(typeof e!=`string`&&typeof e!=`boolean`)return e;let t=Number(e);return Number.isNaN(t)?e:t},x=e=>e===`true`||e===`1`||e===1?!0:e===`false`||e===`0`||e===0?!1:e,S=e=>{if(typeof e==`number`&&!Number.isSafeInteger(e))return e;if(typeof e==`string`){let t=e.trim();if(t.length===0||t.length>1e3)return e;try{return BigInt(t)}catch{return e}}return typeof e==`number`?BigInt(e):e},C=e=>typeof e==`string`||typeof e==`number`?new Date(e):e,w=e=>e==null?e:String(e),T={array:e=>new t(e),bigint:()=>new n,boolean:()=>new u,coerce:{bigint:()=>new n().preprocess(S),boolean:()=>new u().preprocess(x),date:()=>new r().preprocess(C),number:()=>new c().preprocess(b),string:()=>new _().preprocess(w)},date:()=>new r,discriminatedUnion:(e,t)=>new i(e,t),enum:e=>new d(e),instanceof:e=>new f(e),intersect:(...e)=>new a(e),lazy:e=>new o(e),literal:e=>new p(e),map:(e,t)=>new s(e,t),never:()=>new m,null:()=>new p(null),number:()=>new c,object:e=>new l(e),record:(e,t)=>new h(e,t),set:e=>new g(e),string:()=>new _,tuple:e=>new v(e),undefined:()=>new p(void 0),union:(...e)=>new y(e),unknown:()=>new e};export{T as s};
|
|
2
2
|
//# sourceMappingURL=s.js.map
|
package/dist/s.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s.js","names":["
|
|
1
|
+
{"version":3,"file":"s.js","names":["coerceNumber","value","parsed","coerceBoolean","coerceBigInt","trimmed","coerceDate","coerceString","s","ArraySchema","item","BigIntSchema","BooleanSchema","DateSchema","NumberSchema","StringSchema","DiscriminatedUnionSchema","discriminator","branches","EnumSchema","values","InstanceOfSchema","cls","schemas","IntersectSchema","LazySchema","getter","LiteralSchema","MapSchema","key","NeverSchema","ObjectSchema","shape","RecordSchema","SetSchema","TupleSchema","items","UnionSchema","Schema"],"sources":["../src/s.ts"],"sourcesContent":["import { Schema } from './schema';\nimport { ArraySchema } from './schemas/array';\nimport { BigIntSchema } from './schemas/bigint';\nimport { DateSchema } from './schemas/date';\nimport { type DiscriminatedBranches, DiscriminatedUnionSchema } from './schemas/discriminated-union';\nimport { IntersectSchema } from './schemas/intersect';\nimport { LazySchema } from './schemas/lazy';\nimport { MapSchema } from './schemas/map';\nimport { NumberSchema } from './schemas/number';\nimport { ObjectSchema, type ObjectShape } from './schemas/object';\nimport {\n BooleanSchema,\n EnumSchema,\n type EnumValues,\n InstanceOfSchema,\n LiteralSchema,\n type LiteralValue,\n NeverSchema,\n} from './schemas/primitives';\nimport { RecordSchema } from './schemas/record';\nimport { SetSchema } from './schemas/set';\nimport { StringSchema } from './schemas/string';\nimport { TupleSchema, type TupleSchemas } from './schemas/tuple';\nimport { type UnionMembers, UnionSchema } from './schemas/union';\nimport type { AnySchema, InferInput, InferOutput } from './types';\n\nconst coerceNumber = (value: unknown): unknown => {\n if (typeof value !== 'string' && typeof value !== 'boolean') return value;\n\n const parsed = Number(value);\n\n return Number.isNaN(parsed) ? value : parsed;\n};\n\nconst coerceBoolean = (value: unknown): unknown => {\n if (value === 'true' || value === '1' || value === 1) return true;\n\n if (value === 'false' || value === '0' || value === 0) return false;\n\n return value;\n};\n\nconst coerceBigInt = (value: unknown): unknown => {\n if (typeof value === 'number' && !Number.isSafeInteger(value)) return value;\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // BigInt() parsing is superlinear in digit count; bound untrusted input.\n if (trimmed.length === 0 || trimmed.length > 1000) return value;\n\n try {\n return BigInt(trimmed);\n } catch {\n return value;\n }\n }\n\n return typeof value === 'number' ? BigInt(value) : value;\n};\n\nconst coerceDate = (value: unknown): unknown =>\n typeof value === 'string' || typeof value === 'number' ? new Date(value) : value;\n\nconst coerceString = (value: unknown): unknown => (value == null ? value : String(value));\n\n/**\n * Namespace of all schema builders.\n *\n * @example\n * import { s, type Infer } from '@vielzeug/spell';\n *\n * const User = s.object({ name: s.string(), age: s.number().int().positive() });\n * type User = Infer<typeof User>;\n */\nexport const s = {\n array: <T extends AnySchema>(item: T): ArraySchema<T> => new ArraySchema(item),\n bigint: (): BigIntSchema => new BigIntSchema(),\n boolean: (): BooleanSchema => new BooleanSchema(),\n /** Primitive schemas that convert their raw input before validating it. */\n coerce: {\n /** Converts safe-integer numbers and integer strings (up to 1000 characters). */\n bigint: (): BigIntSchema<unknown> => new BigIntSchema<unknown>().preprocess(coerceBigInt),\n /** Converts `'true'`/`'1'`/`1` and `'false'`/`'0'`/`0`. */\n boolean: (): BooleanSchema<unknown> => new BooleanSchema<unknown>().preprocess(coerceBoolean),\n /** Converts strings and epoch milliseconds with `new Date()`. */\n date: (): DateSchema<unknown> => new DateSchema<unknown>().preprocess(coerceDate),\n /** Converts numeric strings and booleans with `Number()`. */\n number: (): NumberSchema<unknown> => new NumberSchema<unknown>().preprocess(coerceNumber),\n /** Converts any non-nullish value with `String()`. */\n string: (): StringSchema<unknown> => new StringSchema<unknown>().preprocess(coerceString),\n },\n date: (): DateSchema => new DateSchema(),\n discriminatedUnion: <K extends string, M extends DiscriminatedBranches>(\n discriminator: K,\n branches: M,\n ): DiscriminatedUnionSchema<K, M> => new DiscriminatedUnionSchema(discriminator, branches),\n enum: <const T extends EnumValues>(values: T): EnumSchema<T> => new EnumSchema(values),\n instanceof: <T>(cls: abstract new (...args: never[]) => T): InstanceOfSchema<T> => new InstanceOfSchema(cls),\n intersect: <const T extends UnionMembers>(...schemas: T): IntersectSchema<T> => new IntersectSchema(schemas),\n lazy: <T extends AnySchema>(getter: () => T): LazySchema<InferOutput<T>, InferInput<T>> => new LazySchema(getter),\n literal: <const T extends LiteralValue>(value: T): LiteralSchema<T> => new LiteralSchema(value),\n map: <K extends AnySchema, V extends AnySchema>(key: K, value: V): MapSchema<K, V> => new MapSchema(key, value),\n never: (): NeverSchema => new NeverSchema(),\n null: (): LiteralSchema<null> => new LiteralSchema(null),\n number: (): NumberSchema => new NumberSchema(),\n object: <T extends ObjectShape>(shape: T): ObjectSchema<T> => new ObjectSchema(shape),\n record: <K extends AnySchema, V extends AnySchema>(key: K, value: V): RecordSchema<K, V> =>\n new RecordSchema(key, value),\n set: <T extends AnySchema>(item: T): SetSchema<T> => new SetSchema(item),\n string: (): StringSchema => new StringSchema(),\n tuple: <const T extends TupleSchemas>(items: T): TupleSchema<T> => new TupleSchema(items),\n undefined: (): LiteralSchema<undefined> => new LiteralSchema(undefined),\n union: <const T extends UnionMembers>(...schemas: T): UnionSchema<T> => new UnionSchema(schemas),\n unknown: (): Schema<unknown> => new Schema(),\n};\n"],"mappings":"A,s3BA0BA,IAAMA,EAAgB,GAA4B,CAChD,GAAI,OAAOC,GAAU,UAAY,OAAOA,GAAU,UAAW,OAAOA,EAEpE,IAAMC,EAAS,OAAOD,CAAK,EAE3B,OAAO,OAAO,MAAMC,CAAM,EAAID,EAAQC,CACxC,EAEMC,EAAiB,GACjBF,IAAU,QAAUA,IAAU,KAAOA,IAAU,EAAU,GAEzDA,IAAU,SAAWA,IAAU,KAAOA,IAAU,EAAU,GAEvDA,EAGHG,EAAgB,GAA4B,CAChD,GAAI,OAAOH,GAAU,UAAY,CAAC,OAAO,cAAcA,CAAK,EAAG,OAAOA,EAEtE,GAAI,OAAOA,GAAU,SAAU,CAC7B,IAAMI,EAAUJ,EAAM,KAAK,EAG3B,GAAII,EAAQ,SAAW,GAAKA,EAAQ,OAAS,IAAM,OAAOJ,EAE1D,GAAI,CACF,OAAO,OAAOI,CAAO,CACvB,MAAQ,CACN,OAAOJ,CACT,CACF,CAEA,OAAO,OAAOA,GAAU,SAAW,OAAOA,CAAK,EAAIA,CACrD,EAEMK,EAAc,GAClB,OAAOL,GAAU,UAAY,OAAOA,GAAU,SAAW,IAAI,KAAKA,CAAK,EAAIA,EAEvEM,EAAgB,GAA6BN,GAAS,KAAOA,EAAQ,OAAOA,CAAK,EAW1EO,EAAI,CACf,MAA6B,GAA4B,IAAIC,EAAYC,CAAI,EAC7E,WAA4B,IAAIC,EAChC,YAA8B,IAAIC,EAElC,OAAQ,CAEN,WAAqC,IAAID,EAAsB,CAAC,CAAC,WAAWP,CAAY,EAExF,YAAuC,IAAIQ,EAAuB,CAAC,CAAC,WAAWT,CAAa,EAE5F,SAAiC,IAAIU,EAAoB,CAAC,CAAC,WAAWP,CAAU,EAEhF,WAAqC,IAAIQ,EAAsB,CAAC,CAAC,WAAWd,CAAY,EAExF,WAAqC,IAAIe,EAAsB,CAAC,CAAC,WAAWR,CAAY,CAC1F,EACA,SAAwB,IAAIM,EAC5B,oBACE,EACA,IACmC,IAAIG,EAAyBC,EAAeC,CAAQ,EACzF,KAAmC,GAA6B,IAAIC,EAAWC,CAAM,EACrF,WAAgB,GAAmE,IAAIC,EAAiBC,CAAG,EAC3G,WAA0C,GAAGC,IAAmC,IAAIC,EAAgBD,CAAO,EAC3G,KAA4B,GAA+D,IAAIE,EAAWC,CAAM,EAChH,QAAwC,GAA+B,IAAIC,EAAc1B,CAAK,EAC9F,KAAgD,EAAQ,IAA8B,IAAI2B,EAAUC,EAAK5B,CAAK,EAC9G,UAA0B,IAAI6B,EAC9B,SAAiC,IAAIH,EAAc,IAAI,EACvD,WAA4B,IAAIb,EAChC,OAAgC,GAA8B,IAAIiB,EAAaC,CAAK,EACpF,QAAmD,EAAQ,IACzD,IAAIC,EAAaJ,EAAK5B,CAAK,EAC7B,IAA2B,GAA0B,IAAIiC,EAAUxB,CAAI,EACvE,WAA4B,IAAIK,EAChC,MAAsC,GAA6B,IAAIoB,EAAYC,CAAK,EACxF,cAA2C,IAAIT,EAAc,IAAA,EAAS,EACtE,OAAsC,GAAGJ,IAA+B,IAAIc,EAAYd,CAAO,EAC/F,YAAgC,IAAIe,CACtC,E"}
|