@esmj/schema 0.5.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -8
- package/dist/array.cjs +1 -1
- package/dist/{array.d.cts → array.d.mts} +1 -1
- package/dist/array.d.ts +1 -1
- package/dist/array.mjs +1 -1
- package/dist/{chunk-PHNKAD7Q.mjs → chunk-ELVLLQRH.mjs} +1 -1
- package/dist/{chunk-BV6SWQSH.mjs → chunk-FEEE6IG6.mjs} +1 -1
- package/dist/chunk-V2T3CZFC.mjs +1 -0
- package/dist/{chunk-SHVCROKM.mjs → chunk-W2H6TLSH.mjs} +1 -1
- package/dist/full.cjs +1 -1
- package/dist/full.d.mts +4 -0
- package/dist/full.d.ts +1 -1
- package/dist/full.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/{index.d.cts → index.d.mts} +20 -3
- package/dist/index.d.ts +20 -3
- package/dist/index.mjs +1 -1
- package/dist/number.cjs +1 -1
- package/dist/{number.d.cts → number.d.mts} +1 -1
- package/dist/number.d.ts +1 -1
- package/dist/number.mjs +1 -1
- package/dist/string.cjs +1 -1
- package/dist/{string.d.cts → string.d.mts} +1 -1
- package/dist/string.d.ts +1 -1
- package/dist/string.mjs +1 -1
- package/package.json +1 -2
- package/dist/chunk-NCHMO7B3.mjs +0 -1
- package/dist/full.d.cts +0 -4
package/README.md
CHANGED
|
@@ -117,15 +117,15 @@ When choosing a schema validation library, bundle size can be an important facto
|
|
|
117
117
|
|
|
118
118
|
| Library | Bundle Size (minified + gzipped) |
|
|
119
119
|
|-------------------|---------------------------------|
|
|
120
|
-
| `@esmj/schema` | `~1
|
|
120
|
+
| `@esmj/schema` | `~1.5 KB` |
|
|
121
121
|
| Superstruct | ~3.2 KB |
|
|
122
122
|
| @sinclair/typebox | ~11.7 KB |
|
|
123
123
|
| Yup | ~12.2 KB |
|
|
124
124
|
| Zod@3 | ~13 KB |
|
|
125
|
-
| @zod/mini | ~20
|
|
126
|
-
| Joi | ~40
|
|
127
|
-
| Zod@4 | ~40
|
|
128
|
-
| ArkType | ~41
|
|
125
|
+
| @zod/mini | ~20.5 KB |
|
|
126
|
+
| Joi | ~40.4 KB |
|
|
127
|
+
| Zod@4 | ~40.8 KB |
|
|
128
|
+
| ArkType | ~41.8 KB |
|
|
129
129
|
| Effect/Schema | ~115.5 KB |
|
|
130
130
|
|
|
131
131
|
### Performance Comparison
|
|
@@ -229,7 +229,7 @@ console.log(result);
|
|
|
229
229
|
### Import Options
|
|
230
230
|
|
|
231
231
|
```typescript
|
|
232
|
-
// Minimal version (core only, ~1.
|
|
232
|
+
// Minimal version (core only, ~1.5 KB)
|
|
233
233
|
import { s } from '@esmj/schema';
|
|
234
234
|
|
|
235
235
|
// Full version (all extensions included, ~4 KB)
|
|
@@ -252,7 +252,7 @@ import { s } from '@esmj/schema';
|
|
|
252
252
|
|
|
253
253
|
### Bundle Size Impact
|
|
254
254
|
|
|
255
|
-
- **Core only** (`@esmj/schema`): ~1.
|
|
255
|
+
- **Core only** (`@esmj/schema`): ~1.5 KB gzipped
|
|
256
256
|
- **String extensions** (`@esmj/schema/string`): +~0.8 KB
|
|
257
257
|
- **Number extensions** (`@esmj/schema/number`): +~0.6 KB
|
|
258
258
|
- **Array extensions** (`@esmj/schema/array`): +~0.5 KB
|
|
@@ -426,6 +426,7 @@ const schema = s.object({
|
|
|
426
426
|
- `s.date()` - Date validation
|
|
427
427
|
- `s.object(def)` - Object validation
|
|
428
428
|
- `s.array(def)` - Array validation
|
|
429
|
+
- `s.literal(value)` - Literal value validation
|
|
429
430
|
- `s.enum(values)` - Enum validation
|
|
430
431
|
- `s.union(schemas)` - Union validation
|
|
431
432
|
- `s.any()` - Any type
|
|
@@ -629,6 +630,65 @@ const enumSchemaFunc = s.enum(['admin', 'user', 'guest'], {
|
|
|
629
630
|
});
|
|
630
631
|
```
|
|
631
632
|
|
|
633
|
+
#### `s.literal(value, options?)`
|
|
634
|
+
|
|
635
|
+
Creates a literal schema that validates against an exact value. The value can be a string, number, or boolean. This is useful for discriminated unions, API response types, and strict value validation. You can optionally pass `options` to customize error messages.
|
|
636
|
+
|
|
637
|
+
- **`message`**: Can be either a constant string or a function `(value) => string`.
|
|
638
|
+
|
|
639
|
+
```typescript
|
|
640
|
+
// String literal
|
|
641
|
+
const adminSchema = s.literal('admin');
|
|
642
|
+
adminSchema.parse('admin'); // ✅ 'admin'
|
|
643
|
+
adminSchema.parse('user'); // ❌ throws error
|
|
644
|
+
|
|
645
|
+
// Number literal
|
|
646
|
+
const statusCode = s.literal(200);
|
|
647
|
+
statusCode.parse(200); // ✅ 200
|
|
648
|
+
statusCode.parse(404); // ❌ throws error
|
|
649
|
+
|
|
650
|
+
// Boolean literal
|
|
651
|
+
const enabled = s.literal(true);
|
|
652
|
+
enabled.parse(true); // ✅ true
|
|
653
|
+
enabled.parse(false); // ❌ throws error
|
|
654
|
+
|
|
655
|
+
// Custom error message
|
|
656
|
+
const typeSchema = s.literal('success', {
|
|
657
|
+
message: 'Response type must be "success"',
|
|
658
|
+
});
|
|
659
|
+
|
|
660
|
+
// Custom error function
|
|
661
|
+
const versionSchema = s.literal(1, {
|
|
662
|
+
message: (value) => `API version must be 1, received ${value}`,
|
|
663
|
+
});
|
|
664
|
+
|
|
665
|
+
// Discriminated unions with literal
|
|
666
|
+
const responseSchema = s.union([
|
|
667
|
+
s.object({
|
|
668
|
+
type: s.literal('success'),
|
|
669
|
+
data: s.string(),
|
|
670
|
+
}),
|
|
671
|
+
s.object({
|
|
672
|
+
type: s.literal('error'),
|
|
673
|
+
error: s.string(),
|
|
674
|
+
}),
|
|
675
|
+
]);
|
|
676
|
+
|
|
677
|
+
// Using multiple literals in union (similar to enum but with type inference)
|
|
678
|
+
const roleSchema = s.union([
|
|
679
|
+
s.literal('admin'),
|
|
680
|
+
s.literal('user'),
|
|
681
|
+
s.literal('guest'),
|
|
682
|
+
]);
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
**Common Use Cases:**
|
|
686
|
+
|
|
687
|
+
- **Discriminated Unions**: Use literal types to distinguish between different object shapes
|
|
688
|
+
- **API Response Types**: Validate exact status codes or response types
|
|
689
|
+
- **Configuration Flags**: Validate boolean flags or specific string values
|
|
690
|
+
- **Type Guards**: Create strict type validation for specific values
|
|
691
|
+
|
|
632
692
|
#### `s.union(definitions, options?)`
|
|
633
693
|
|
|
634
694
|
Creates a schema that validates against multiple schemas (a union of schemas). The value must match at least one of the provided schemas. You can optionally pass `options` to customize error messages.
|
|
@@ -1139,7 +1199,7 @@ console.log(result);
|
|
|
1139
1199
|
|
|
1140
1200
|
## Examples Folder
|
|
1141
1201
|
|
|
1142
|
-
The `examples/` folder contains comprehensive, runnable examples demonstrating various use cases
|
|
1202
|
+
The `examples/` folder contains comprehensive, runnable examples demonstrating various use cases. See the [examples README](examples/README.md) for detailed documentation.
|
|
1143
1203
|
|
|
1144
1204
|
### Basic Usage (`examples/basic-usage.ts`)
|
|
1145
1205
|
|
|
@@ -1187,6 +1247,22 @@ Demonstrates how to extend the library with custom methods:
|
|
|
1187
1247
|
node --experimental-strip-types examples/custom-extensions.ts
|
|
1188
1248
|
```
|
|
1189
1249
|
|
|
1250
|
+
### Registration Form (`examples/registration-form.ts`)
|
|
1251
|
+
|
|
1252
|
+
Complete user registration form validation with email and phone number validation:
|
|
1253
|
+
- Username validation with pattern matching
|
|
1254
|
+
- Email validation using custom extension
|
|
1255
|
+
- International phone number validation
|
|
1256
|
+
- Password strength requirements
|
|
1257
|
+
- Password confirmation matching
|
|
1258
|
+
- Age verification (18+)
|
|
1259
|
+
- Terms acceptance validation
|
|
1260
|
+
- Error collection with `abortEarly: false`
|
|
1261
|
+
|
|
1262
|
+
```bash
|
|
1263
|
+
node --experimental-strip-types examples/registration-form.ts
|
|
1264
|
+
```
|
|
1265
|
+
|
|
1190
1266
|
**To run all examples:**
|
|
1191
1267
|
|
|
1192
1268
|
```bash
|
|
@@ -1195,6 +1271,17 @@ node --experimental-strip-types examples/basic-usage.ts
|
|
|
1195
1271
|
node --experimental-strip-types examples/custom-validation.ts
|
|
1196
1272
|
node --experimental-strip-types examples/advanced-forms.ts
|
|
1197
1273
|
node --experimental-strip-types examples/custom-extensions.ts
|
|
1274
|
+
node --experimental-strip-types examples/registration-form.ts
|
|
1275
|
+
|
|
1276
|
+
# OR using npm scripts from examples folder
|
|
1277
|
+
cd examples
|
|
1278
|
+
npm install
|
|
1279
|
+
npm run basic
|
|
1280
|
+
npm run custom
|
|
1281
|
+
npm run advanced
|
|
1282
|
+
npm run extensions
|
|
1283
|
+
npm run registration
|
|
1284
|
+
npm run all # Run all examples
|
|
1198
1285
|
|
|
1199
1286
|
# OR using tsx (requires installation)
|
|
1200
1287
|
npm install -g tsx # If not already installed
|
|
@@ -1202,6 +1289,7 @@ npx tsx examples/basic-usage.ts
|
|
|
1202
1289
|
npx tsx examples/custom-validation.ts
|
|
1203
1290
|
npx tsx examples/advanced-forms.ts
|
|
1204
1291
|
npx tsx examples/custom-extensions.ts
|
|
1292
|
+
npx tsx examples/registration-form.ts
|
|
1205
1293
|
```
|
|
1206
1294
|
## Migration Guide
|
|
1207
1295
|
|
package/dist/array.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var k={abortEarly:true};function y(e,c){if(!c)return e;let i=e?.cause?.key?`${c}.${e.cause.key}`:`${c}`;return {message:`Error parsing key "${i}": ${e.message}`,cause:{key:i}}}function T(e,c,i){if(e.errors?.length)for(let u=0;u<e.errors.length;u++)c.push(y(e.errors[u],i));}function S(e){return {...k,...e}}var w=e=>typeof e=="string"||e instanceof String,P=e=>(typeof e=="number"||e instanceof Number)&&!Number.isNaN(e),A=e=>e===true||e===false,E=e=>e instanceof Date&&!Number.isNaN(e.getTime()),_=e=>Array.isArray(e),b=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),R={object(e,c){let i=h(b,{...c,type:"object"});return i._getDescription=()=>`object({ ${Object.entries(e).map(([o,r])=>`${o}: ${r._getDescription()}`).join(", ")} })`,l(i,"_parse",(u,o,r)=>{let t=u(o,r),{abortEarly:n}=S(r);if(t.success===false)return t;let a={},s=[];for(let p in e){let f=e[p]._parse(t.data[p],r);if(f.success)a[p]=f.data;else {if(f=f,n!==false){let m=y(f.error,p);return {success:false,error:m,errors:[m]}}T(f,s,p);}}return s.length>0?{success:false,error:s[0],errors:s}:{success:true,data:a}}),i},string(e){return h(w,{...e,type:"string"})},number(e){return h(P,{...e,type:"number"})},boolean(e){return h(A,{...e,type:"boolean"})},date(e){return h(E,{...e,type:"date"})},enum(e,c){let i=t=>e.includes(t),u=t=>`Invalid ${o} value. Expected ${e.map(n=>`"${n}"`).join(" | ")}, received "${t}".`,o="enum",r=h(i,{message:u,...c,type:o});return r._getDescription=()=>`enum(${e.map(t=>`"${t}"`).join(" | ")})`,r},array(e,c){let i=h(_,{...c,type:"array"});return i._getDescription=()=>`array(${e._getDescription()})`,l(i,"_parse",(u,o,r)=>{let t=u(o,r),{abortEarly:n}=S(r);if(t.success===false)return t;let a=[],s=[];for(let p=0;p<t.data.length;p++){let f=e._parse(t.data[p],r);if(f.success)a.push(f.data);else {if(f=f,n!==false){let m=y(f.error,p);return {success:false,error:m,errors:[m]}}T(f,s,p);}}return s.length>0?{success:false,error:s[0],errors:s}:{success:true,data:a}}),i},any(){return h(()=>true)},preprocess(e,c){return l(c,"_parse",(i,u)=>(u=e(u),i(u))),c},union(e,c){return h(r=>{for(let t=0;t<e.length;t++){let n=e[t]._parse(r);if(n.success)return n}return false},{message:r=>`Invalid union value. Expected the value to match one of the schemas:${e.map((t,n)=>` ${n+1}. ${t._getDescription()}`).join(",")} but received "${typeof r}" with value: ${b(r)?JSON.stringify(r):`"${r}"`}`,...c,type:"union"})},literal(e,c){let o=h(r=>r===e,{message:r=>c?.message?typeof c.message=="function"?c.message(r):c.message:`Expected literal value "${e}", received "${r}"`,name:c?.name,type:"literal"});return o._getDescription=()=>`literal("${e}")`,o}};function O(e){return c=>`The value "${c}" must be type of ${e} but is type of "${typeof c}".`}function l(e,c,i){let u=e[c];e[c]=(...o)=>i(u,...o);}function h(e,{type:c="any",name:i,message:u}={}){u=u||O(c);let o={name:i,message:u,type:c},r={_getName(){return i},_getType(){return c},_getDescription(){return this._getName()??this._getType()},_parse(t,n){let a=e(t);if(a===true)return {success:true,data:t};if(typeof a=="object"&&a?.success===true)return a;let s={message:typeof u=="function"?u(t):u};return {success:false,error:s,errors:[s]}},parse(t,n){let a=r._parse(t,n);if(!a.success)throw a=a,new Error(a.error.message,{cause:a.error.cause});return a.data},safeParse(t,n){return r._parse(t,n)},transform(t){return l(this,"_parse",(n,a,s)=>{let p=n(a,s);return p.success&&(p.data=t(p.data)),p}),this},optional(){return l(this,"_parse",(t,n,a)=>{let s=t(n,a);return !s.success&&n===void 0&&(s.data=void 0,s.success=true),s}),this},nullable(){return l(this,"_parse",(t,n,a)=>{let s=t(n,a);return !s.success&&n===null&&(s.data=null,s.success=true),s}),this},nullish(){return l(this,"_parse",(t,n,a)=>{let s=t(n,a);return !s.success&&n==null&&(s.success=true,s.data=n),s}),this},default(t){return l(this,"_parse",(n,a,s)=>(a===void 0&&(a=typeof t=="function"?t():t),n(a,s))),this},pipe(t){return l(this,"_parse",(n,a,s)=>{let p=n(a,s);return p.success?t._parse(p.data,s):p}),this},refine(t,{message:n,type:a}={}){return a&&(n=n||O(a),c=a),l(this,"_parse",(s,p,f)=>{let m=s(p,f);S(f);if(!m.success)return m;let I=t(m.data);if(I===true||typeof I=="object"&&I?.success===true)return m;let g={message:typeof n=="function"?n(p):n};return {success:false,error:g,errors:[g]}}),this}};return d.length>0?d.reduce((t,n)=>n(t,e,o)??t,r):r}var d=[];function x(e){if(typeof e!="function")throw new TypeError("extend() requires a function argument");d.push(e);}x((e,c,i)=>{if(i?.type==="array"){let u=e;u.min=function(o,{message:r}={}){return this.refine(t=>t.length>=o,{message:r||`Array must contain at least ${o} items.`})},u.max=function(o,{message:r}={}){return this.refine(t=>t.length<=o,{message:r||`Array must contain at most ${o} items.`})},u.length=function(o,{message:r}={}){return this.refine(t=>t.length===o,{message:r||`Array must contain exactly ${o} items.`})},u.nonEmpty=function({message:o}={}){return this.refine(r=>r.length>0,{message:o||"Array must not be empty."})},u.unique=function({message:o}={}){return this.refine(r=>{let t=new Set;try{return r.every(n=>{let a=JSON.stringify(n);return t.has(a)?!1:(t.add(a),!0)})}catch{return new Set(r).size===r.length}},{message:o||"Array items must be unique."})},u.sort=function(){return this.transform(o=>[...o].sort())},u.reverse=function(){return this.transform(o=>[...o].reverse())};}return e});exports.extend=x;exports.hookOriginal=l;exports.s=R;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.
|
|
1
|
+
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, LiteralSchemaInterface, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.mjs';
|
|
2
2
|
|
|
3
3
|
declare module './index.ts' {
|
|
4
4
|
interface ArraySchemaInterface<T extends SchemaType> {
|
package/dist/array.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.js';
|
|
1
|
+
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, LiteralSchemaInterface, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.js';
|
|
2
2
|
|
|
3
3
|
declare module './index.ts' {
|
|
4
4
|
interface ArraySchemaInterface<T extends SchemaType> {
|
package/dist/array.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import'./chunk-
|
|
1
|
+
import'./chunk-ELVLLQRH.mjs';export{c as extend,b as hookOriginal,a as s}from'./chunk-V2T3CZFC.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {c}from'./chunk-
|
|
1
|
+
import {c}from'./chunk-V2T3CZFC.mjs';c((a,o,m)=>{if(m?.type==="array"){let r=a;r.min=function(e,{message:t}={}){return this.refine(n=>n.length>=e,{message:t||`Array must contain at least ${e} items.`})},r.max=function(e,{message:t}={}){return this.refine(n=>n.length<=e,{message:t||`Array must contain at most ${e} items.`})},r.length=function(e,{message:t}={}){return this.refine(n=>n.length===e,{message:t||`Array must contain exactly ${e} items.`})},r.nonEmpty=function({message:e}={}){return this.refine(t=>t.length>0,{message:e||"Array must not be empty."})},r.unique=function({message:e}={}){return this.refine(t=>{let n=new Set;try{return t.every(c=>{let s=JSON.stringify(c);return n.has(s)?!1:(n.add(s),!0)})}catch{return new Set(t).size===t.length}},{message:e||"Array items must be unique."})},r.sort=function(){return this.transform(e=>[...e].sort())},r.reverse=function(){return this.transform(e=>[...e].reverse())};}return a});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {c}from'./chunk-
|
|
1
|
+
import {c}from'./chunk-V2T3CZFC.mjs';c((i,s,c)=>{if(c?.type==="string"){let r=i;r.min=function(t,{message:n}={}){return this.refine(e=>e.length>=t,{message:n||(e=>`String must be at least ${t} characters long (received ${e.length} characters: "${e}")`)})},r.max=function(t,{message:n}={}){return this.refine(e=>e.length<=t,{message:n||(e=>`String must be at most ${t} characters long (received ${e.length} characters: "${e}")`)})},r.length=function(t,{message:n}={}){return this.refine(e=>e.length===t,{message:n||(e=>`String must be exactly ${t} characters long (received ${e.length} characters: "${e}")`)})},r.nonEmpty=function({message:t}={}){return this.refine(n=>n.length>0,{message:t||"String must not be empty (received empty string)"})},r.startsWith=function(t,{message:n}={}){return this.refine(e=>e.startsWith(t),{message:n||(e=>`String must start with "${t}" (received: "${e}")`)})},r.endsWith=function(t,{message:n}={}){return this.refine(e=>e.endsWith(t),{message:n||(e=>`String must end with "${t}" (received: "${e}")`)})},r.includes=function(t,{message:n}={}){return this.refine(e=>e.includes(t),{message:n||(e=>`String must include "${t}" (received: "${e}")`)})},r.toLowerCase=function(){return this.transform(t=>t.toLowerCase())},r.toUpperCase=function(){return this.transform(t=>t.toUpperCase())},r.trim=function(){return this.transform(t=>t.trim())},r.padStart=function(t,n=" "){return this.transform(e=>e.padStart(t,n))},r.padEnd=function(t,n=" "){return this.transform(e=>e.padEnd(t,n))},r.replace=function(t,n){return this.transform(e=>e.replace(t,n))};}return i});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var k={abortEarly:true};function d(e,s){if(!s)return e;let i=e?.cause?.key?`${s}.${e.cause.key}`:`${s}`;return {message:`Error parsing key "${i}": ${e.message}`,cause:{key:i}}}function T(e,s,i){if(e.errors?.length)for(let u=0;u<e.errors.length;u++)s.push(d(e.errors[u],i));}function y(e){return {...k,...e}}var x=e=>typeof e=="string"||e instanceof String,w=e=>(typeof e=="number"||e instanceof Number)&&!Number.isNaN(e),P=e=>e===true||e===false,E=e=>e instanceof Date&&!Number.isNaN(e.getTime()),_=e=>Array.isArray(e),b=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),$={object(e,s){let i=l(b,{...s,type:"object"});return i._getDescription=()=>`object({ ${Object.entries(e).map(([p,c])=>`${p}: ${c._getDescription()}`).join(", ")} })`,h(i,"_parse",(u,p,c)=>{let t=u(p,c),{abortEarly:n}=y(c);if(t.success===false)return t;let a={},r=[];for(let o in e){let f=e[o]._parse(t.data[o],c);if(f.success)a[o]=f.data;else {if(f=f,n!==false){let m=d(f.error,o);return {success:false,error:m,errors:[m]}}T(f,r,o);}}return r.length>0?{success:false,error:r[0],errors:r}:{success:true,data:a}}),i},string(e){return l(x,{...e,type:"string"})},number(e){return l(w,{...e,type:"number"})},boolean(e){return l(P,{...e,type:"boolean"})},date(e){return l(E,{...e,type:"date"})},enum(e,s){let i=t=>e.includes(t),u=t=>`Invalid ${p} value. Expected ${e.map(n=>`"${n}"`).join(" | ")}, received "${t}".`,p="enum",c=l(i,{message:u,...s,type:p});return c._getDescription=()=>`enum(${e.map(t=>`"${t}"`).join(" | ")})`,c},array(e,s){let i=l(_,{...s,type:"array"});return i._getDescription=()=>`array(${e._getDescription()})`,h(i,"_parse",(u,p,c)=>{let t=u(p,c),{abortEarly:n}=y(c);if(t.success===false)return t;let a=[],r=[];for(let o=0;o<t.data.length;o++){let f=e._parse(t.data[o],c);if(f.success)a.push(f.data);else {if(f=f,n!==false){let m=d(f.error,o);return {success:false,error:m,errors:[m]}}T(f,r,o);}}return r.length>0?{success:false,error:r[0],errors:r}:{success:true,data:a}}),i},any(){return l(()=>true)},preprocess(e,s){return h(s,"_parse",(i,u)=>(u=e(u),i(u))),s},union(e,s){return l(c=>{for(let t=0;t<e.length;t++){let n=e[t]._parse(c);if(n.success)return n}return false},{message:c=>`Invalid union value. Expected the value to match one of the schemas:${e.map((t,n)=>` ${n+1}. ${t._getDescription()}`).join(",")} but received "${typeof c}" with value: ${b(c)?JSON.stringify(c):`"${c}"`}`,...s,type:"union"})},literal(e,s){let p=l(c=>c===e,{message:c=>s?.message?typeof s.message=="function"?s.message(c):s.message:`Expected literal value "${e}", received "${c}"`,name:s?.name,type:"literal"});return p._getDescription=()=>`literal("${e}")`,p}};function O(e){return s=>`The value "${s}" must be type of ${e} but is type of "${typeof s}".`}function h(e,s,i){let u=e[s];e[s]=(...p)=>i(u,...p);}function l(e,{type:s="any",name:i,message:u}={}){u=u||O(s);let p={name:i,message:u,type:s},c={_getName(){return i},_getType(){return s},_getDescription(){return this._getName()??this._getType()},_parse(t,n){let a=e(t);if(a===true)return {success:true,data:t};if(typeof a=="object"&&a?.success===true)return a;let r={message:typeof u=="function"?u(t):u};return {success:false,error:r,errors:[r]}},parse(t,n){let a=c._parse(t,n);if(!a.success)throw a=a,new Error(a.error.message,{cause:a.error.cause});return a.data},safeParse(t,n){return c._parse(t,n)},transform(t){return h(this,"_parse",(n,a,r)=>{let o=n(a,r);return o.success&&(o.data=t(o.data)),o}),this},optional(){return h(this,"_parse",(t,n,a)=>{let r=t(n,a);return !r.success&&n===void 0&&(r.data=void 0,r.success=true),r}),this},nullable(){return h(this,"_parse",(t,n,a)=>{let r=t(n,a);return !r.success&&n===null&&(r.data=null,r.success=true),r}),this},nullish(){return h(this,"_parse",(t,n,a)=>{let r=t(n,a);return !r.success&&n==null&&(r.success=true,r.data=n),r}),this},default(t){return h(this,"_parse",(n,a,r)=>(a===void 0&&(a=typeof t=="function"?t():t),n(a,r))),this},pipe(t){return h(this,"_parse",(n,a,r)=>{let o=n(a,r);return o.success?t._parse(o.data,r):o}),this},refine(t,{message:n,type:a}={}){return a&&(n=n||O(a),s=a),h(this,"_parse",(r,o,f)=>{let m=r(o,f);y(f);if(!m.success)return m;let I=t(m.data);if(I===true||typeof I=="object"&&I?.success===true)return m;let g={message:typeof n=="function"?n(o):n};return {success:false,error:g,errors:[g]}}),this}};return S.length>0?S.reduce((t,n)=>n(t,e,p)??t,c):c}var S=[];function A(e){if(typeof e!="function")throw new TypeError("extend() requires a function argument");S.push(e);}export{$ as a,h as b,A as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {c}from'./chunk-
|
|
1
|
+
import {c}from'./chunk-V2T3CZFC.mjs';c((i,c,m)=>{if(m?.type==="number"){let n=i;n.min=function(e,{message:t}={}){return this.refine(r=>r>=e,{message:t||`Number must be greater than or equal to ${e}.`})},n.max=function(e,{message:t}={}){return this.refine(r=>r<=e,{message:t||`Number must be less than or equal to ${e}.`})},n.positive=function({message:e}={}){return this.refine(t=>t>0,{message:e||"Number must be positive."})},n.negative=function({message:e}={}){return this.refine(t=>t<0,{message:e||"Number must be negative."})},n.int=function({message:e}={}){return this.refine(t=>Number.isInteger(t),{message:e||"Number must be an integer."})},n.float=function({message:e}={}){return this.refine(t=>Number.isFinite(t)&&!Number.isInteger(t),{message:e||"Number must be a floating point (non-integer)."})},n.multipleOf=function(e,{message:t}={}){return this.refine(r=>r%e===0,{message:t||`Number must be a multiple of ${e}.`})},n.finite=function({message:e}={}){return this.refine(t=>Number.isFinite(t),{message:e||"Number must be finite."})};}return i});
|
package/dist/full.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var w={abortEarly:true};function y(n,u){if(!u)return n;let o=n?.cause?.key?`${u}.${n.cause.key}`:`${u}`;return {message:`Error parsing key "${o}": ${n.message}`,cause:{key:o}}}function O(n,u,o){if(n.errors?.length)for(let a=0;a<n.errors.length;a++)u.push(y(n.errors[a],o));}function g(n){return {...w,...n}}var k=n=>typeof n=="string"||n instanceof String,P=n=>(typeof n=="number"||n instanceof Number)&&!Number.isNaN(n),$=n=>n===true||n===false,N=n=>n instanceof Date&&!Number.isNaN(n.getTime()),E=n=>Array.isArray(n),T=n=>typeof n=="object"&&n!==null&&!Array.isArray(n),v={object(n,u){let o=h(T,{...u,type:"object"});return o._getDescription=()=>`object({ ${Object.entries(n).map(([t,r])=>`${t}: ${r._getDescription()}`).join(", ")} })`,S(o,"_parse",(a,t,r)=>{let e=a(t,r),{abortEarly:s}=g(r);if(e.success===false)return e;let c={},i=[];for(let m in n){let f=n[m]._parse(e.data[m],r);if(f.success)c[m]=f.data;else {if(f=f,s!==false){let p=y(f.error,m);return {success:false,error:p,errors:[p]}}O(f,i,m);}}return i.length>0?{success:false,error:i[0],errors:i}:{success:true,data:c}}),o},string(n){return h(k,{...n,type:"string"})},number(n){return h(P,{...n,type:"number"})},boolean(n){return h($,{...n,type:"boolean"})},date(n){return h(N,{...n,type:"date"})},enum(n,u){let o=e=>n.includes(e),a=e=>`Invalid ${t} value. Expected ${n.map(s=>`"${s}"`).join(" | ")}, received "${e}".`,t="enum",r=h(o,{message:a,...u,type:t});return r._getDescription=()=>`enum(${n.map(e=>`"${e}"`).join(" | ")})`,r},array(n,u){let o=h(E,{...u,type:"array"});return o._getDescription=()=>`array(${n._getDescription()})`,S(o,"_parse",(a,t,r)=>{let e=a(t,r),{abortEarly:s}=g(r);if(e.success===false)return e;let c=[],i=[];for(let m=0;m<e.data.length;m++){let f=n._parse(e.data[m],r);if(f.success)c.push(f.data);else {if(f=f,s!==false){let p=y(f.error,m);return {success:false,error:p,errors:[p]}}O(f,i,m);}}return i.length>0?{success:false,error:i[0],errors:i}:{success:true,data:c}}),o},any(){return h(()=>true)},preprocess(n,u){return S(u,"_parse",(o,a)=>(a=n(a),o(a))),u},union(n,u){return h(r=>{for(let e=0;e<n.length;e++){let s=n[e]._parse(r);if(s.success)return s}return false},{message:r=>`Invalid union value. Expected the value to match one of the schemas:${n.map((e,s)=>` ${s+1}. ${e._getDescription()}`).join(",")} but received "${typeof r}" with value: ${T(r)?JSON.stringify(r):`"${r}"`}`,...u,type:"union"})},literal(n,u){let t=h(r=>r===n,{message:r=>u?.message?typeof u.message=="function"?u.message(r):u.message:`Expected literal value "${n}", received "${r}"`,name:u?.name,type:"literal"});return t._getDescription=()=>`literal("${n}")`,t}};function x(n){return u=>`The value "${u}" must be type of ${n} but is type of "${typeof u}".`}function S(n,u,o){let a=n[u];n[u]=(...t)=>o(a,...t);}function h(n,{type:u="any",name:o,message:a}={}){a=a||x(u);let t={name:o,message:a,type:u},r={_getName(){return o},_getType(){return u},_getDescription(){return this._getName()??this._getType()},_parse(e,s){let c=n(e);if(c===true)return {success:true,data:e};if(typeof c=="object"&&c?.success===true)return c;let i={message:typeof a=="function"?a(e):a};return {success:false,error:i,errors:[i]}},parse(e,s){let c=r._parse(e,s);if(!c.success)throw c=c,new Error(c.error.message,{cause:c.error.cause});return c.data},safeParse(e,s){return r._parse(e,s)},transform(e){return S(this,"_parse",(s,c,i)=>{let m=s(c,i);return m.success&&(m.data=e(m.data)),m}),this},optional(){return S(this,"_parse",(e,s,c)=>{let i=e(s,c);return !i.success&&s===void 0&&(i.data=void 0,i.success=true),i}),this},nullable(){return S(this,"_parse",(e,s,c)=>{let i=e(s,c);return !i.success&&s===null&&(i.data=null,i.success=true),i}),this},nullish(){return S(this,"_parse",(e,s,c)=>{let i=e(s,c);return !i.success&&s==null&&(i.success=true,i.data=s),i}),this},default(e){return S(this,"_parse",(s,c,i)=>(c===void 0&&(c=typeof e=="function"?e():e),s(c,i))),this},pipe(e){return S(this,"_parse",(s,c,i)=>{let m=s(c,i);return m.success?e._parse(m.data,i):m}),this},refine(e,{message:s,type:c}={}){return c&&(s=s||x(c),u=c),S(this,"_parse",(i,m,f)=>{let p=i(m,f);g(f);if(!p.success)return p;let l=e(p.data);if(l===true||typeof l=="object"&&l?.success===true)return p;let b={message:typeof s=="function"?s(m):s};return {success:false,error:b,errors:[b]}}),this}};return d.length>0?d.reduce((e,s)=>s(e,n,t)??e,r):r}var d=[];function I(n){if(typeof n!="function")throw new TypeError("extend() requires a function argument");d.push(n);}I((n,u,o)=>{if(o?.type==="string"){let a=n;a.min=function(t,{message:r}={}){return this.refine(e=>e.length>=t,{message:r||(e=>`String must be at least ${t} characters long (received ${e.length} characters: "${e}")`)})},a.max=function(t,{message:r}={}){return this.refine(e=>e.length<=t,{message:r||(e=>`String must be at most ${t} characters long (received ${e.length} characters: "${e}")`)})},a.length=function(t,{message:r}={}){return this.refine(e=>e.length===t,{message:r||(e=>`String must be exactly ${t} characters long (received ${e.length} characters: "${e}")`)})},a.nonEmpty=function({message:t}={}){return this.refine(r=>r.length>0,{message:t||"String must not be empty (received empty string)"})},a.startsWith=function(t,{message:r}={}){return this.refine(e=>e.startsWith(t),{message:r||(e=>`String must start with "${t}" (received: "${e}")`)})},a.endsWith=function(t,{message:r}={}){return this.refine(e=>e.endsWith(t),{message:r||(e=>`String must end with "${t}" (received: "${e}")`)})},a.includes=function(t,{message:r}={}){return this.refine(e=>e.includes(t),{message:r||(e=>`String must include "${t}" (received: "${e}")`)})},a.toLowerCase=function(){return this.transform(t=>t.toLowerCase())},a.toUpperCase=function(){return this.transform(t=>t.toUpperCase())},a.trim=function(){return this.transform(t=>t.trim())},a.padStart=function(t,r=" "){return this.transform(e=>e.padStart(t,r))},a.padEnd=function(t,r=" "){return this.transform(e=>e.padEnd(t,r))},a.replace=function(t,r){return this.transform(e=>e.replace(t,r))};}return n});I((n,u,o)=>{if(o?.type==="number"){let a=n;a.min=function(t,{message:r}={}){return this.refine(e=>e>=t,{message:r||`Number must be greater than or equal to ${t}.`})},a.max=function(t,{message:r}={}){return this.refine(e=>e<=t,{message:r||`Number must be less than or equal to ${t}.`})},a.positive=function({message:t}={}){return this.refine(r=>r>0,{message:t||"Number must be positive."})},a.negative=function({message:t}={}){return this.refine(r=>r<0,{message:t||"Number must be negative."})},a.int=function({message:t}={}){return this.refine(r=>Number.isInteger(r),{message:t||"Number must be an integer."})},a.float=function({message:t}={}){return this.refine(r=>Number.isFinite(r)&&!Number.isInteger(r),{message:t||"Number must be a floating point (non-integer)."})},a.multipleOf=function(t,{message:r}={}){return this.refine(e=>e%t===0,{message:r||`Number must be a multiple of ${t}.`})},a.finite=function({message:t}={}){return this.refine(r=>Number.isFinite(r),{message:t||"Number must be finite."})};}return n});I((n,u,o)=>{if(o?.type==="array"){let a=n;a.min=function(t,{message:r}={}){return this.refine(e=>e.length>=t,{message:r||`Array must contain at least ${t} items.`})},a.max=function(t,{message:r}={}){return this.refine(e=>e.length<=t,{message:r||`Array must contain at most ${t} items.`})},a.length=function(t,{message:r}={}){return this.refine(e=>e.length===t,{message:r||`Array must contain exactly ${t} items.`})},a.nonEmpty=function({message:t}={}){return this.refine(r=>r.length>0,{message:t||"Array must not be empty."})},a.unique=function({message:t}={}){return this.refine(r=>{let e=new Set;try{return r.every(s=>{let c=JSON.stringify(s);return e.has(c)?!1:(e.add(c),!0)})}catch{return new Set(r).size===r.length}},{message:t||"Array items must be unique."})},a.sort=function(){return this.transform(t=>[...t].sort())},a.reverse=function(){return this.transform(t=>[...t].reverse())};}return n});exports.extend=I;exports.hookOriginal=S;exports.s=v;
|
package/dist/full.d.mts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import './string.mjs';
|
|
2
|
+
import './number.mjs';
|
|
3
|
+
import './array.mjs';
|
|
4
|
+
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, LiteralSchemaInterface, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.mjs';
|
package/dist/full.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import './string.js';
|
|
2
2
|
import './number.js';
|
|
3
3
|
import './array.js';
|
|
4
|
-
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.js';
|
|
4
|
+
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, LiteralSchemaInterface, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.js';
|
package/dist/full.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import'./chunk-
|
|
1
|
+
import'./chunk-ELVLLQRH.mjs';import'./chunk-W2H6TLSH.mjs';import'./chunk-FEEE6IG6.mjs';export{c as extend,b as hookOriginal,a as s}from'./chunk-V2T3CZFC.mjs';
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var k={abortEarly:true};function d(e,s){if(!s)return e;let i=e?.cause?.key?`${s}.${e.cause.key}`:`${s}`;return {message:`Error parsing key "${i}": ${e.message}`,cause:{key:i}}}function T(e,s,i){if(e.errors?.length)for(let u=0;u<e.errors.length;u++)s.push(d(e.errors[u],i));}function y(e){return {...k,...e}}var x=e=>typeof e=="string"||e instanceof String,w=e=>(typeof e=="number"||e instanceof Number)&&!Number.isNaN(e),P=e=>e===true||e===false,E=e=>e instanceof Date&&!Number.isNaN(e.getTime()),_=e=>Array.isArray(e),b=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),$={object(e,s){let i=l(b,{...s,type:"object"});return i._getDescription=()=>`object({ ${Object.entries(e).map(([p,c])=>`${p}: ${c._getDescription()}`).join(", ")} })`,h(i,"_parse",(u,p,c)=>{let t=u(p,c),{abortEarly:n}=y(c);if(t.success===false)return t;let a={},r=[];for(let o in e){let f=e[o]._parse(t.data[o],c);if(f.success)a[o]=f.data;else {if(f=f,n!==false){let m=d(f.error,o);return {success:false,error:m,errors:[m]}}T(f,r,o);}}return r.length>0?{success:false,error:r[0],errors:r}:{success:true,data:a}}),i},string(e){return l(x,{...e,type:"string"})},number(e){return l(w,{...e,type:"number"})},boolean(e){return l(P,{...e,type:"boolean"})},date(e){return l(E,{...e,type:"date"})},enum(e,s){let i=t=>e.includes(t),u=t=>`Invalid ${p} value. Expected ${e.map(n=>`"${n}"`).join(" | ")}, received "${t}".`,p="enum",c=l(i,{message:u,...s,type:p});return c._getDescription=()=>`enum(${e.map(t=>`"${t}"`).join(" | ")})`,c},array(e,s){let i=l(_,{...s,type:"array"});return i._getDescription=()=>`array(${e._getDescription()})`,h(i,"_parse",(u,p,c)=>{let t=u(p,c),{abortEarly:n}=y(c);if(t.success===false)return t;let a=[],r=[];for(let o=0;o<t.data.length;o++){let f=e._parse(t.data[o],c);if(f.success)a.push(f.data);else {if(f=f,n!==false){let m=d(f.error,o);return {success:false,error:m,errors:[m]}}T(f,r,o);}}return r.length>0?{success:false,error:r[0],errors:r}:{success:true,data:a}}),i},any(){return l(()=>true)},preprocess(e,s){return h(s,"_parse",(i,u)=>(u=e(u),i(u))),s},union(e,s){return l(c=>{for(let t=0;t<e.length;t++){let n=e[t]._parse(c);if(n.success)return n}return false},{message:c=>`Invalid union value. Expected the value to match one of the schemas:${e.map((t,n)=>` ${n+1}. ${t._getDescription()}`).join(",")} but received "${typeof c}" with value: ${b(c)?JSON.stringify(c):`"${c}"`}`,...s,type:"union"})},literal(e,s){let p=l(c=>c===e,{message:c=>s?.message?typeof s.message=="function"?s.message(c):s.message:`Expected literal value "${e}", received "${c}"`,name:s?.name,type:"literal"});return p._getDescription=()=>`literal("${e}")`,p}};function O(e){return s=>`The value "${s}" must be type of ${e} but is type of "${typeof s}".`}function h(e,s,i){let u=e[s];e[s]=(...p)=>i(u,...p);}function l(e,{type:s="any",name:i,message:u}={}){u=u||O(s);let p={name:i,message:u,type:s},c={_getName(){return i},_getType(){return s},_getDescription(){return this._getName()??this._getType()},_parse(t,n){let a=e(t);if(a===true)return {success:true,data:t};if(typeof a=="object"&&a?.success===true)return a;let r={message:typeof u=="function"?u(t):u};return {success:false,error:r,errors:[r]}},parse(t,n){let a=c._parse(t,n);if(!a.success)throw a=a,new Error(a.error.message,{cause:a.error.cause});return a.data},safeParse(t,n){return c._parse(t,n)},transform(t){return h(this,"_parse",(n,a,r)=>{let o=n(a,r);return o.success&&(o.data=t(o.data)),o}),this},optional(){return h(this,"_parse",(t,n,a)=>{let r=t(n,a);return !r.success&&n===void 0&&(r.data=void 0,r.success=true),r}),this},nullable(){return h(this,"_parse",(t,n,a)=>{let r=t(n,a);return !r.success&&n===null&&(r.data=null,r.success=true),r}),this},nullish(){return h(this,"_parse",(t,n,a)=>{let r=t(n,a);return !r.success&&n==null&&(r.success=true,r.data=n),r}),this},default(t){return h(this,"_parse",(n,a,r)=>(a===void 0&&(a=typeof t=="function"?t():t),n(a,r))),this},pipe(t){return h(this,"_parse",(n,a,r)=>{let o=n(a,r);return o.success?t._parse(o.data,r):o}),this},refine(t,{message:n,type:a}={}){return a&&(n=n||O(a),s=a),h(this,"_parse",(r,o,f)=>{let m=r(o,f);y(f);if(!m.success)return m;let I=t(m.data);if(I===true||typeof I=="object"&&I?.success===true)return m;let g={message:typeof n=="function"?n(o):n};return {success:false,error:g,errors:[g]}}),this}};return S.length>0?S.reduce((t,n)=>n(t,e,p)??t,c):c}var S=[];function A(e){if(typeof e!="function")throw new TypeError("extend() requires a function argument");S.push(e);}exports.extend=A;exports.hookOriginal=h;exports.s=$;
|
|
@@ -33,6 +33,8 @@ interface SchemaInterface<Input, Output> {
|
|
|
33
33
|
pipe<NewOutput>(schema: SchemaInterface<Output, NewOutput>): SchemaInterface<Output, NewOutput>;
|
|
34
34
|
refine(validation: ValidationMethod<Input, Output>, options?: CreateSchemaInterfaceOptions): SchemaInterface<Input, Output>;
|
|
35
35
|
}
|
|
36
|
+
interface LiteralSchemaInterface<T extends string | number | boolean> extends SchemaInterface<T, T> {
|
|
37
|
+
}
|
|
36
38
|
interface UnionSchemaInterface<T extends Array<SchemaInterface<unknown, unknown>>> extends SchemaInterface<ReturnType<T[number]['parse']>, ReturnType<T[number]['parse']>> {
|
|
37
39
|
}
|
|
38
40
|
interface EnumSchemaInterface<T extends string> extends SchemaInterface<string, T> {
|
|
@@ -53,7 +55,7 @@ interface ObjectSchemaInterface<T extends Record<string, SchemaType>> extends Sc
|
|
|
53
55
|
[Property in keyof T]: ReturnType<T[Property]['parse']>;
|
|
54
56
|
}> {
|
|
55
57
|
}
|
|
56
|
-
type SchemaType = StringSchemaInterface | SchemaInterface<unknown, unknown> | SchemaInterface<string, string> | SchemaInterface<string, string | undefined> | SchemaInterface<string, string | null> | SchemaInterface<string, string | undefined | null> | ObjectSchemaInterface<Record<string, SchemaType>> | SchemaInterface<object, object> | SchemaInterface<object, object | undefined> | SchemaInterface<object, object | null> | SchemaInterface<object, object | undefined | null> | NumberSchemaInterface | SchemaInterface<number, number> | SchemaInterface<number, number | undefined> | SchemaInterface<number, number | null> | SchemaInterface<number, number | undefined | null> | BooleanSchemaInterface | SchemaInterface<boolean, boolean> | SchemaInterface<boolean, boolean | undefined> | SchemaInterface<boolean, boolean | null> | SchemaInterface<boolean, boolean | undefined | null> | DateSchemaInterface | SchemaInterface<Date, Date> | SchemaInterface<Date, Date | undefined> | SchemaInterface<Date, Date | null> | SchemaInterface<Date, Date | undefined | null> | EnumSchemaInterface<string> | UnionSchemaInterface<Array<SchemaInterface<unknown, unknown>>> | ArraySchemaInterface<StringSchemaInterface | ObjectSchemaInterface<Record<string, SchemaType>> | NumberSchemaInterface | BooleanSchemaInterface | DateSchemaInterface | EnumSchemaInterface<string>> | SchemaInterface<Array<unknown>, Array<unknown>> | SchemaInterface<Array<unknown>, Array<unknown> | undefined> | SchemaInterface<Array<unknown>, Array<unknown> | null> | SchemaInterface<Array<unknown>, Array<unknown> | undefined | null>;
|
|
58
|
+
type SchemaType = LiteralSchemaInterface<string> | LiteralSchemaInterface<number> | LiteralSchemaInterface<boolean> | StringSchemaInterface | SchemaInterface<unknown, unknown> | SchemaInterface<string, string> | SchemaInterface<string, string | undefined> | SchemaInterface<string, string | null> | SchemaInterface<string, string | undefined | null> | ObjectSchemaInterface<Record<string, SchemaType>> | SchemaInterface<object, object> | SchemaInterface<object, object | undefined> | SchemaInterface<object, object | null> | SchemaInterface<object, object | undefined | null> | NumberSchemaInterface | SchemaInterface<number, number> | SchemaInterface<number, number | undefined> | SchemaInterface<number, number | null> | SchemaInterface<number, number | undefined | null> | BooleanSchemaInterface | SchemaInterface<boolean, boolean> | SchemaInterface<boolean, boolean | undefined> | SchemaInterface<boolean, boolean | null> | SchemaInterface<boolean, boolean | undefined | null> | DateSchemaInterface | SchemaInterface<Date, Date> | SchemaInterface<Date, Date | undefined> | SchemaInterface<Date, Date | null> | SchemaInterface<Date, Date | undefined | null> | EnumSchemaInterface<string> | UnionSchemaInterface<Array<SchemaInterface<unknown, unknown>>> | ArraySchemaInterface<StringSchemaInterface | ObjectSchemaInterface<Record<string, SchemaType>> | NumberSchemaInterface | BooleanSchemaInterface | DateSchemaInterface | EnumSchemaInterface<string>> | SchemaInterface<Array<unknown>, Array<unknown>> | SchemaInterface<Array<unknown>, Array<unknown> | undefined> | SchemaInterface<Array<unknown>, Array<unknown> | null> | SchemaInterface<Array<unknown>, Array<unknown> | undefined | null>;
|
|
57
59
|
type ErrorMessage = string | ((value: unknown) => string);
|
|
58
60
|
type ExtenderType = (inter: SchemaType, validation: Function, options?: {
|
|
59
61
|
message: ErrorMessage;
|
|
@@ -207,8 +209,23 @@ declare const s: {
|
|
|
207
209
|
* ```
|
|
208
210
|
*/
|
|
209
211
|
union<T extends Array<SchemaType>>(definitions: T, options?: SchemaInterfaceOptions): UnionSchemaInterface<T>;
|
|
212
|
+
/**
|
|
213
|
+
* Creates a literal schema that only accepts a specific value.
|
|
214
|
+
*
|
|
215
|
+
* @param value - The exact value to match
|
|
216
|
+
* @param options - Optional configuration
|
|
217
|
+
* @returns Literal schema interface
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* const adminSchema = s.literal('admin');
|
|
222
|
+
* adminSchema.parse('admin'); // 'admin'
|
|
223
|
+
* adminSchema.parse('user'); // throws error
|
|
224
|
+
* ```
|
|
225
|
+
*/
|
|
226
|
+
literal<T extends string | number | boolean>(value: T, options?: SchemaInterfaceOptions): LiteralSchemaInterface<T>;
|
|
210
227
|
};
|
|
211
|
-
declare function hookOriginal<Input, Output>(object: SchemaInterface<Input, Output> | SchemaType, method:
|
|
228
|
+
declare function hookOriginal<Input, Output>(object: SchemaInterface<Input, Output> | SchemaType, method: keyof (SchemaInterface<Input, Output> | SchemaType), action: (original: Function, ...args: unknown[]) => InternalParseOutput<Output>): void;
|
|
212
229
|
/**
|
|
213
230
|
* Extends the schema system with custom validation methods.
|
|
214
231
|
* Used to add new methods to schema interfaces like StringSchemaInterface, NumberSchemaInterface, etc.
|
|
@@ -267,4 +284,4 @@ declare function extend(callback: ExtenderType): void;
|
|
|
267
284
|
*/
|
|
268
285
|
type Infer<T> = T extends SchemaType ? ReturnType<T['parse']> : unknown;
|
|
269
286
|
|
|
270
|
-
export { type ArraySchemaInterface, type BooleanSchemaInterface, type DateSchemaInterface, type EnumSchemaInterface, type ErrorStructure, type ExtenderType, type Infer, type Invalid, type NumberSchemaInterface, type ObjectSchemaInterface, type SchemaInterface, type SchemaInterfaceOptions, type SchemaType, type StringSchemaInterface, type UnionSchemaInterface, type Valid, extend, hookOriginal, s };
|
|
287
|
+
export { type ArraySchemaInterface, type BooleanSchemaInterface, type DateSchemaInterface, type EnumSchemaInterface, type ErrorStructure, type ExtenderType, type Infer, type Invalid, type LiteralSchemaInterface, type NumberSchemaInterface, type ObjectSchemaInterface, type SchemaInterface, type SchemaInterfaceOptions, type SchemaType, type StringSchemaInterface, type UnionSchemaInterface, type Valid, extend, hookOriginal, s };
|
package/dist/index.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ interface SchemaInterface<Input, Output> {
|
|
|
33
33
|
pipe<NewOutput>(schema: SchemaInterface<Output, NewOutput>): SchemaInterface<Output, NewOutput>;
|
|
34
34
|
refine(validation: ValidationMethod<Input, Output>, options?: CreateSchemaInterfaceOptions): SchemaInterface<Input, Output>;
|
|
35
35
|
}
|
|
36
|
+
interface LiteralSchemaInterface<T extends string | number | boolean> extends SchemaInterface<T, T> {
|
|
37
|
+
}
|
|
36
38
|
interface UnionSchemaInterface<T extends Array<SchemaInterface<unknown, unknown>>> extends SchemaInterface<ReturnType<T[number]['parse']>, ReturnType<T[number]['parse']>> {
|
|
37
39
|
}
|
|
38
40
|
interface EnumSchemaInterface<T extends string> extends SchemaInterface<string, T> {
|
|
@@ -53,7 +55,7 @@ interface ObjectSchemaInterface<T extends Record<string, SchemaType>> extends Sc
|
|
|
53
55
|
[Property in keyof T]: ReturnType<T[Property]['parse']>;
|
|
54
56
|
}> {
|
|
55
57
|
}
|
|
56
|
-
type SchemaType = StringSchemaInterface | SchemaInterface<unknown, unknown> | SchemaInterface<string, string> | SchemaInterface<string, string | undefined> | SchemaInterface<string, string | null> | SchemaInterface<string, string | undefined | null> | ObjectSchemaInterface<Record<string, SchemaType>> | SchemaInterface<object, object> | SchemaInterface<object, object | undefined> | SchemaInterface<object, object | null> | SchemaInterface<object, object | undefined | null> | NumberSchemaInterface | SchemaInterface<number, number> | SchemaInterface<number, number | undefined> | SchemaInterface<number, number | null> | SchemaInterface<number, number | undefined | null> | BooleanSchemaInterface | SchemaInterface<boolean, boolean> | SchemaInterface<boolean, boolean | undefined> | SchemaInterface<boolean, boolean | null> | SchemaInterface<boolean, boolean | undefined | null> | DateSchemaInterface | SchemaInterface<Date, Date> | SchemaInterface<Date, Date | undefined> | SchemaInterface<Date, Date | null> | SchemaInterface<Date, Date | undefined | null> | EnumSchemaInterface<string> | UnionSchemaInterface<Array<SchemaInterface<unknown, unknown>>> | ArraySchemaInterface<StringSchemaInterface | ObjectSchemaInterface<Record<string, SchemaType>> | NumberSchemaInterface | BooleanSchemaInterface | DateSchemaInterface | EnumSchemaInterface<string>> | SchemaInterface<Array<unknown>, Array<unknown>> | SchemaInterface<Array<unknown>, Array<unknown> | undefined> | SchemaInterface<Array<unknown>, Array<unknown> | null> | SchemaInterface<Array<unknown>, Array<unknown> | undefined | null>;
|
|
58
|
+
type SchemaType = LiteralSchemaInterface<string> | LiteralSchemaInterface<number> | LiteralSchemaInterface<boolean> | StringSchemaInterface | SchemaInterface<unknown, unknown> | SchemaInterface<string, string> | SchemaInterface<string, string | undefined> | SchemaInterface<string, string | null> | SchemaInterface<string, string | undefined | null> | ObjectSchemaInterface<Record<string, SchemaType>> | SchemaInterface<object, object> | SchemaInterface<object, object | undefined> | SchemaInterface<object, object | null> | SchemaInterface<object, object | undefined | null> | NumberSchemaInterface | SchemaInterface<number, number> | SchemaInterface<number, number | undefined> | SchemaInterface<number, number | null> | SchemaInterface<number, number | undefined | null> | BooleanSchemaInterface | SchemaInterface<boolean, boolean> | SchemaInterface<boolean, boolean | undefined> | SchemaInterface<boolean, boolean | null> | SchemaInterface<boolean, boolean | undefined | null> | DateSchemaInterface | SchemaInterface<Date, Date> | SchemaInterface<Date, Date | undefined> | SchemaInterface<Date, Date | null> | SchemaInterface<Date, Date | undefined | null> | EnumSchemaInterface<string> | UnionSchemaInterface<Array<SchemaInterface<unknown, unknown>>> | ArraySchemaInterface<StringSchemaInterface | ObjectSchemaInterface<Record<string, SchemaType>> | NumberSchemaInterface | BooleanSchemaInterface | DateSchemaInterface | EnumSchemaInterface<string>> | SchemaInterface<Array<unknown>, Array<unknown>> | SchemaInterface<Array<unknown>, Array<unknown> | undefined> | SchemaInterface<Array<unknown>, Array<unknown> | null> | SchemaInterface<Array<unknown>, Array<unknown> | undefined | null>;
|
|
57
59
|
type ErrorMessage = string | ((value: unknown) => string);
|
|
58
60
|
type ExtenderType = (inter: SchemaType, validation: Function, options?: {
|
|
59
61
|
message: ErrorMessage;
|
|
@@ -207,8 +209,23 @@ declare const s: {
|
|
|
207
209
|
* ```
|
|
208
210
|
*/
|
|
209
211
|
union<T extends Array<SchemaType>>(definitions: T, options?: SchemaInterfaceOptions): UnionSchemaInterface<T>;
|
|
212
|
+
/**
|
|
213
|
+
* Creates a literal schema that only accepts a specific value.
|
|
214
|
+
*
|
|
215
|
+
* @param value - The exact value to match
|
|
216
|
+
* @param options - Optional configuration
|
|
217
|
+
* @returns Literal schema interface
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* const adminSchema = s.literal('admin');
|
|
222
|
+
* adminSchema.parse('admin'); // 'admin'
|
|
223
|
+
* adminSchema.parse('user'); // throws error
|
|
224
|
+
* ```
|
|
225
|
+
*/
|
|
226
|
+
literal<T extends string | number | boolean>(value: T, options?: SchemaInterfaceOptions): LiteralSchemaInterface<T>;
|
|
210
227
|
};
|
|
211
|
-
declare function hookOriginal<Input, Output>(object: SchemaInterface<Input, Output> | SchemaType, method:
|
|
228
|
+
declare function hookOriginal<Input, Output>(object: SchemaInterface<Input, Output> | SchemaType, method: keyof (SchemaInterface<Input, Output> | SchemaType), action: (original: Function, ...args: unknown[]) => InternalParseOutput<Output>): void;
|
|
212
229
|
/**
|
|
213
230
|
* Extends the schema system with custom validation methods.
|
|
214
231
|
* Used to add new methods to schema interfaces like StringSchemaInterface, NumberSchemaInterface, etc.
|
|
@@ -267,4 +284,4 @@ declare function extend(callback: ExtenderType): void;
|
|
|
267
284
|
*/
|
|
268
285
|
type Infer<T> = T extends SchemaType ? ReturnType<T['parse']> : unknown;
|
|
269
286
|
|
|
270
|
-
export { type ArraySchemaInterface, type BooleanSchemaInterface, type DateSchemaInterface, type EnumSchemaInterface, type ErrorStructure, type ExtenderType, type Infer, type Invalid, type NumberSchemaInterface, type ObjectSchemaInterface, type SchemaInterface, type SchemaInterfaceOptions, type SchemaType, type StringSchemaInterface, type UnionSchemaInterface, type Valid, extend, hookOriginal, s };
|
|
287
|
+
export { type ArraySchemaInterface, type BooleanSchemaInterface, type DateSchemaInterface, type EnumSchemaInterface, type ErrorStructure, type ExtenderType, type Infer, type Invalid, type LiteralSchemaInterface, type NumberSchemaInterface, type ObjectSchemaInterface, type SchemaInterface, type SchemaInterfaceOptions, type SchemaType, type StringSchemaInterface, type UnionSchemaInterface, type Valid, extend, hookOriginal, s };
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{c as extend,b as hookOriginal,a as s}from'./chunk-
|
|
1
|
+
export{c as extend,b as hookOriginal,a as s}from'./chunk-V2T3CZFC.mjs';
|
package/dist/number.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var k={abortEarly:true};function S(e,u){if(!u)return e;let i=e?.cause?.key?`${u}.${e.cause.key}`:`${u}`;return {message:`Error parsing key "${i}": ${e.message}`,cause:{key:i}}}function g(e,u,i){if(e.errors?.length)for(let o=0;o<e.errors.length;o++)u.push(S(e.errors[o],i));}function d(e){return {...k,...e}}var w=e=>typeof e=="string"||e instanceof String,P=e=>(typeof e=="number"||e instanceof Number)&&!Number.isNaN(e),N=e=>e===true||e===false,E=e=>e instanceof Date&&!Number.isNaN(e.getTime()),_=e=>Array.isArray(e),O=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),R={object(e,u){let i=h(O,{...u,type:"object"});return i._getDescription=()=>`object({ ${Object.entries(e).map(([s,n])=>`${s}: ${n._getDescription()}`).join(", ")} })`,l(i,"_parse",(o,s,n)=>{let t=o(s,n),{abortEarly:r}=d(n);if(t.success===false)return t;let c={},a=[];for(let p in e){let f=e[p]._parse(t.data[p],n);if(f.success)c[p]=f.data;else {if(f=f,r!==false){let m=S(f.error,p);return {success:false,error:m,errors:[m]}}g(f,a,p);}}return a.length>0?{success:false,error:a[0],errors:a}:{success:true,data:c}}),i},string(e){return h(w,{...e,type:"string"})},number(e){return h(P,{...e,type:"number"})},boolean(e){return h(N,{...e,type:"boolean"})},date(e){return h(E,{...e,type:"date"})},enum(e,u){let i=t=>e.includes(t),o=t=>`Invalid ${s} value. Expected ${e.map(r=>`"${r}"`).join(" | ")}, received "${t}".`,s="enum",n=h(i,{message:o,...u,type:s});return n._getDescription=()=>`enum(${e.map(t=>`"${t}"`).join(" | ")})`,n},array(e,u){let i=h(_,{...u,type:"array"});return i._getDescription=()=>`array(${e._getDescription()})`,l(i,"_parse",(o,s,n)=>{let t=o(s,n),{abortEarly:r}=d(n);if(t.success===false)return t;let c=[],a=[];for(let p=0;p<t.data.length;p++){let f=e._parse(t.data[p],n);if(f.success)c.push(f.data);else {if(f=f,r!==false){let m=S(f.error,p);return {success:false,error:m,errors:[m]}}g(f,a,p);}}return a.length>0?{success:false,error:a[0],errors:a}:{success:true,data:c}}),i},any(){return h(()=>true)},preprocess(e,u){return l(u,"_parse",(i,o)=>(o=e(o),i(o))),u},union(e,u){return h(n=>{for(let t=0;t<e.length;t++){let r=e[t]._parse(n);if(r.success)return r}return false},{message:n=>`Invalid union value. Expected the value to match one of the schemas:${e.map((t,r)=>` ${r+1}. ${t._getDescription()}`).join(",")} but received "${typeof n}" with value: ${O(n)?JSON.stringify(n):`"${n}"`}`,...u,type:"union"})},literal(e,u){let s=h(n=>n===e,{message:n=>u?.message?typeof u.message=="function"?u.message(n):u.message:`Expected literal value "${e}", received "${n}"`,name:u?.name,type:"literal"});return s._getDescription=()=>`literal("${e}")`,s}};function T(e){return u=>`The value "${u}" must be type of ${e} but is type of "${typeof u}".`}function l(e,u,i){let o=e[u];e[u]=(...s)=>i(o,...s);}function h(e,{type:u="any",name:i,message:o}={}){o=o||T(u);let s={name:i,message:o,type:u},n={_getName(){return i},_getType(){return u},_getDescription(){return this._getName()??this._getType()},_parse(t,r){let c=e(t);if(c===true)return {success:true,data:t};if(typeof c=="object"&&c?.success===true)return c;let a={message:typeof o=="function"?o(t):o};return {success:false,error:a,errors:[a]}},parse(t,r){let c=n._parse(t,r);if(!c.success)throw c=c,new Error(c.error.message,{cause:c.error.cause});return c.data},safeParse(t,r){return n._parse(t,r)},transform(t){return l(this,"_parse",(r,c,a)=>{let p=r(c,a);return p.success&&(p.data=t(p.data)),p}),this},optional(){return l(this,"_parse",(t,r,c)=>{let a=t(r,c);return !a.success&&r===void 0&&(a.data=void 0,a.success=true),a}),this},nullable(){return l(this,"_parse",(t,r,c)=>{let a=t(r,c);return !a.success&&r===null&&(a.data=null,a.success=true),a}),this},nullish(){return l(this,"_parse",(t,r,c)=>{let a=t(r,c);return !a.success&&r==null&&(a.success=true,a.data=r),a}),this},default(t){return l(this,"_parse",(r,c,a)=>(c===void 0&&(c=typeof t=="function"?t():t),r(c,a))),this},pipe(t){return l(this,"_parse",(r,c,a)=>{let p=r(c,a);return p.success?t._parse(p.data,a):p}),this},refine(t,{message:r,type:c}={}){return c&&(r=r||T(c),u=c),l(this,"_parse",(a,p,f)=>{let m=a(p,f);d(f);if(!m.success)return m;let I=t(m.data);if(I===true||typeof I=="object"&&I?.success===true)return m;let b={message:typeof r=="function"?r(p):r};return {success:false,error:b,errors:[b]}}),this}};return y.length>0?y.reduce((t,r)=>r(t,e,s)??t,n):n}var y=[];function x(e){if(typeof e!="function")throw new TypeError("extend() requires a function argument");y.push(e);}x((e,u,i)=>{if(i?.type==="number"){let o=e;o.min=function(s,{message:n}={}){return this.refine(t=>t>=s,{message:n||`Number must be greater than or equal to ${s}.`})},o.max=function(s,{message:n}={}){return this.refine(t=>t<=s,{message:n||`Number must be less than or equal to ${s}.`})},o.positive=function({message:s}={}){return this.refine(n=>n>0,{message:s||"Number must be positive."})},o.negative=function({message:s}={}){return this.refine(n=>n<0,{message:s||"Number must be negative."})},o.int=function({message:s}={}){return this.refine(n=>Number.isInteger(n),{message:s||"Number must be an integer."})},o.float=function({message:s}={}){return this.refine(n=>Number.isFinite(n)&&!Number.isInteger(n),{message:s||"Number must be a floating point (non-integer)."})},o.multipleOf=function(s,{message:n}={}){return this.refine(t=>t%s===0,{message:n||`Number must be a multiple of ${s}.`})},o.finite=function({message:s}={}){return this.refine(n=>Number.isFinite(n),{message:s||"Number must be finite."})};}return e});exports.extend=x;exports.hookOriginal=l;exports.s=R;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.
|
|
1
|
+
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, LiteralSchemaInterface, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.mjs';
|
|
2
2
|
|
|
3
3
|
declare module './index.ts' {
|
|
4
4
|
interface NumberSchemaInterface {
|
package/dist/number.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.js';
|
|
1
|
+
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, LiteralSchemaInterface, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.js';
|
|
2
2
|
|
|
3
3
|
declare module './index.ts' {
|
|
4
4
|
interface NumberSchemaInterface {
|
package/dist/number.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import'./chunk-
|
|
1
|
+
import'./chunk-W2H6TLSH.mjs';export{c as extend,b as hookOriginal,a as s}from'./chunk-V2T3CZFC.mjs';
|
package/dist/string.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var k={abortEarly:true};function I(t,o){if(!o)return t;let i=t?.cause?.key?`${o}.${t.cause.key}`:`${o}`;return {message:`Error parsing key "${i}": ${t.message}`,cause:{key:i}}}function b(t,o,i){if(t.errors?.length)for(let s=0;s<t.errors.length;s++)o.push(I(t.errors[s],i));}function d(t){return {...k,...t}}var w=t=>typeof t=="string"||t instanceof String,P=t=>(typeof t=="number"||t instanceof Number)&&!Number.isNaN(t),$=t=>t===true||t===false,E=t=>t instanceof Date&&!Number.isNaN(t.getTime()),_=t=>Array.isArray(t),T=t=>typeof t=="object"&&t!==null&&!Array.isArray(t),A={object(t,o){let i=h(T,{...o,type:"object"});return i._getDescription=()=>`object({ ${Object.entries(t).map(([r,n])=>`${r}: ${n._getDescription()}`).join(", ")} })`,l(i,"_parse",(s,r,n)=>{let e=s(r,n),{abortEarly:a}=d(n);if(e.success===false)return e;let u={},c=[];for(let p in t){let f=t[p]._parse(e.data[p],n);if(f.success)u[p]=f.data;else {if(f=f,a!==false){let m=I(f.error,p);return {success:false,error:m,errors:[m]}}b(f,c,p);}}return c.length>0?{success:false,error:c[0],errors:c}:{success:true,data:u}}),i},string(t){return h(w,{...t,type:"string"})},number(t){return h(P,{...t,type:"number"})},boolean(t){return h($,{...t,type:"boolean"})},date(t){return h(E,{...t,type:"date"})},enum(t,o){let i=e=>t.includes(e),s=e=>`Invalid ${r} value. Expected ${t.map(a=>`"${a}"`).join(" | ")}, received "${e}".`,r="enum",n=h(i,{message:s,...o,type:r});return n._getDescription=()=>`enum(${t.map(e=>`"${e}"`).join(" | ")})`,n},array(t,o){let i=h(_,{...o,type:"array"});return i._getDescription=()=>`array(${t._getDescription()})`,l(i,"_parse",(s,r,n)=>{let e=s(r,n),{abortEarly:a}=d(n);if(e.success===false)return e;let u=[],c=[];for(let p=0;p<e.data.length;p++){let f=t._parse(e.data[p],n);if(f.success)u.push(f.data);else {if(f=f,a!==false){let m=I(f.error,p);return {success:false,error:m,errors:[m]}}b(f,c,p);}}return c.length>0?{success:false,error:c[0],errors:c}:{success:true,data:u}}),i},any(){return h(()=>true)},preprocess(t,o){return l(o,"_parse",(i,s)=>(s=t(s),i(s))),o},union(t,o){return h(n=>{for(let e=0;e<t.length;e++){let a=t[e]._parse(n);if(a.success)return a}return false},{message:n=>`Invalid union value. Expected the value to match one of the schemas:${t.map((e,a)=>` ${a+1}. ${e._getDescription()}`).join(",")} but received "${typeof n}" with value: ${T(n)?JSON.stringify(n):`"${n}"`}`,...o,type:"union"})},literal(t,o){let r=h(n=>n===t,{message:n=>o?.message?typeof o.message=="function"?o.message(n):o.message:`Expected literal value "${t}", received "${n}"`,name:o?.name,type:"literal"});return r._getDescription=()=>`literal("${t}")`,r}};function O(t){return o=>`The value "${o}" must be type of ${t} but is type of "${typeof o}".`}function l(t,o,i){let s=t[o];t[o]=(...r)=>i(s,...r);}function h(t,{type:o="any",name:i,message:s}={}){s=s||O(o);let r={name:i,message:s,type:o},n={_getName(){return i},_getType(){return o},_getDescription(){return this._getName()??this._getType()},_parse(e,a){let u=t(e);if(u===true)return {success:true,data:e};if(typeof u=="object"&&u?.success===true)return u;let c={message:typeof s=="function"?s(e):s};return {success:false,error:c,errors:[c]}},parse(e,a){let u=n._parse(e,a);if(!u.success)throw u=u,new Error(u.error.message,{cause:u.error.cause});return u.data},safeParse(e,a){return n._parse(e,a)},transform(e){return l(this,"_parse",(a,u,c)=>{let p=a(u,c);return p.success&&(p.data=e(p.data)),p}),this},optional(){return l(this,"_parse",(e,a,u)=>{let c=e(a,u);return !c.success&&a===void 0&&(c.data=void 0,c.success=true),c}),this},nullable(){return l(this,"_parse",(e,a,u)=>{let c=e(a,u);return !c.success&&a===null&&(c.data=null,c.success=true),c}),this},nullish(){return l(this,"_parse",(e,a,u)=>{let c=e(a,u);return !c.success&&a==null&&(c.success=true,c.data=a),c}),this},default(e){return l(this,"_parse",(a,u,c)=>(u===void 0&&(u=typeof e=="function"?e():e),a(u,c))),this},pipe(e){return l(this,"_parse",(a,u,c)=>{let p=a(u,c);return p.success?e._parse(p.data,c):p}),this},refine(e,{message:a,type:u}={}){return u&&(a=a||O(u),o=u),l(this,"_parse",(c,p,f)=>{let m=c(p,f);d(f);if(!m.success)return m;let S=e(m.data);if(S===true||typeof S=="object"&&S?.success===true)return m;let y={message:typeof a=="function"?a(p):a};return {success:false,error:y,errors:[y]}}),this}};return g.length>0?g.reduce((e,a)=>a(e,t,r)??e,n):n}var g=[];function x(t){if(typeof t!="function")throw new TypeError("extend() requires a function argument");g.push(t);}x((t,o,i)=>{if(i?.type==="string"){let s=t;s.min=function(r,{message:n}={}){return this.refine(e=>e.length>=r,{message:n||(e=>`String must be at least ${r} characters long (received ${e.length} characters: "${e}")`)})},s.max=function(r,{message:n}={}){return this.refine(e=>e.length<=r,{message:n||(e=>`String must be at most ${r} characters long (received ${e.length} characters: "${e}")`)})},s.length=function(r,{message:n}={}){return this.refine(e=>e.length===r,{message:n||(e=>`String must be exactly ${r} characters long (received ${e.length} characters: "${e}")`)})},s.nonEmpty=function({message:r}={}){return this.refine(n=>n.length>0,{message:r||"String must not be empty (received empty string)"})},s.startsWith=function(r,{message:n}={}){return this.refine(e=>e.startsWith(r),{message:n||(e=>`String must start with "${r}" (received: "${e}")`)})},s.endsWith=function(r,{message:n}={}){return this.refine(e=>e.endsWith(r),{message:n||(e=>`String must end with "${r}" (received: "${e}")`)})},s.includes=function(r,{message:n}={}){return this.refine(e=>e.includes(r),{message:n||(e=>`String must include "${r}" (received: "${e}")`)})},s.toLowerCase=function(){return this.transform(r=>r.toLowerCase())},s.toUpperCase=function(){return this.transform(r=>r.toUpperCase())},s.trim=function(){return this.transform(r=>r.trim())},s.padStart=function(r,n=" "){return this.transform(e=>e.padStart(r,n))},s.padEnd=function(r,n=" "){return this.transform(e=>e.padEnd(r,n))},s.replace=function(r,n){return this.transform(e=>e.replace(r,n))};}return t});exports.extend=x;exports.hookOriginal=l;exports.s=A;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.
|
|
1
|
+
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, LiteralSchemaInterface, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.mjs';
|
|
2
2
|
|
|
3
3
|
declare module './index.ts' {
|
|
4
4
|
interface StringSchemaInterface {
|
package/dist/string.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.js';
|
|
1
|
+
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, LiteralSchemaInterface, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.js';
|
|
2
2
|
|
|
3
3
|
declare module './index.ts' {
|
|
4
4
|
interface StringSchemaInterface {
|
package/dist/string.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import'./chunk-
|
|
1
|
+
import'./chunk-FEEE6IG6.mjs';export{c as extend,b as hookOriginal,a as s}from'./chunk-V2T3CZFC.mjs';
|
package/package.json
CHANGED
package/dist/chunk-NCHMO7B3.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var P={abortEarly:true};function d(e,s){if(!s)return e;let o=e?.cause?.key?`${s}.${e.cause.key}`:`${s}`;return {message:`Error parsing key "${o}": ${e.message}`,cause:{key:o}}}function b(e,s,o){!e.errors||e.errors.length===0||e.errors.forEach(i=>{let f=d(i,o);s.push(f);});}function y(e){return {...P,...e}}var x=e=>typeof e=="string"||e instanceof String,k=e=>typeof e=="number"||e instanceof Number,w=e=>e===true||e===false,E=e=>e instanceof Date&&!Number.isNaN(e.getTime()),_=e=>Array.isArray(e),g=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),R={object(e,s){let o=l(g,{...s,type:"object"});return o._getDescription=()=>`object({ ${Object.entries(e).map(([f,c])=>`${f}: ${c._getDescription()}`).join(", ")} })`,h(o,"_parse",(i,f,c)=>{let t=i(f,c),{abortEarly:r}=y(c);if(t.success===false)return t;let a={},n=[];for(let u in e){let p=e[u]._parse(t.data[u],c);if(p.success)a[u]=p.data;else {if(p=p,r!==false){let m=d(p.error,u);return {success:false,error:m,errors:[m]}}b(p,n,u);}}return n.length>0?{success:false,error:n[0],errors:n}:{success:true,data:a}}),o},string(e){return l(x,{...e,type:"string"})},number(e){return l(k,{...e,type:"number"})},boolean(e){return l(w,{...e,type:"boolean"})},date(e){return l(E,{...e,type:"date"})},enum(e,s){let o=t=>e.includes(t),i=t=>`Invalid ${f} value. Expected ${e.map(r=>`"${r}"`).join(" | ")}, received "${t}".`,f="enum",c=l(o,{message:i,...s,type:f});return c._getDescription=()=>`enum(${e.map(t=>`"${t}"`).join(" | ")})`,c},array(e,s){let o=l(_,{...s,type:"array"});return o._getDescription=()=>`array(${e._getDescription()})`,h(o,"_parse",(i,f,c)=>{let t=i(f,c),{abortEarly:r}=y(c);if(t.success===false)return t;let a=[],n=[];for(let u=0;u<t.data.length;u++){let p=e._parse(t.data[u],c);if(p.success)a.push(p.data);else {if(p=p,r!==false){let m=d(p.error,u);return {success:false,error:m,errors:[m]}}b(p,n,u);}}return n.length>0?{success:false,error:n[0],errors:n}:{success:true,data:a}}),o},any(){return l(()=>true)},preprocess(e,s){return h(s,"_parse",(o,i)=>(i=e(i),o(i))),s},union(e,s){return l(c=>{for(let t=0;t<e.length;t++){let r=e[t]._parse(c);if(r.success)return r}return false},{message:c=>`Invalid union value. Expected the value to match one of the schemas:${e.map((t,r)=>` ${r+1}. ${t._getDescription()}`).join(",")} but received "${typeof c}" with value: ${g(c)?JSON.stringify(c):`"${c}"`}`,...s,type:"union"})}};function O(e){return s=>`The value "${s}" must be type of ${e} but is type of "${typeof s}".`}function h(e,s,o){let i=e[s];e[s]=(...f)=>o(i,...f);}function l(e,{type:s="any",name:o,message:i}={}){i=i||O(s);let f={name:o,message:i,type:s},c={_getName(){return o},_getType(){return s},_getDescription(){return this._getName()??this._getType()},_parse(t,r){let a=e(t);if(a===true)return {success:true,data:t};if(typeof a=="object"&&a?.success===true)return a;let n={message:typeof i=="function"?i(t):i};return {success:false,error:n,errors:[n]}},parse(t,r){let a=c._parse(t,r);if(!a.success)throw a=a,new Error(a.error.message,{cause:a.error.cause});return a.data},safeParse(t,r){return c._parse(t,r)},transform(t){return h(this,"_parse",(r,a,n)=>{let u=r(a,n);return u.success&&(u.data=t(u.data)),u}),this},optional(){return h(this,"_parse",(t,r,a)=>{let n=t(r,a);return !n.success&&r===void 0&&(n.data=void 0,n.success=true),n}),this},nullable(){return h(this,"_parse",(t,r,a)=>{let n=t(r,a);return !n.success&&r===null&&(n.data=null,n.success=true),n}),this},nullish(){return h(this,"_parse",(t,r,a)=>{let n=t(r,a);return !n.success&&r==null&&(n.success=true,n.data=r),n}),this},default(t){return h(this,"_parse",(r,a,n)=>(a===void 0&&(a=t,a=typeof t=="function"?t():t),r(a,n))),this},pipe(t){return h(this,"_parse",(r,a,n)=>{let u=r(a,n);return u.success?t._parse(u.data,n):u}),this},refine(t,{message:r,type:a}={}){return a&&(r=r||O(a),s=a),h(this,"_parse",(n,u,p)=>{let m=n(u,p);y(p);if(!m.success)return m;let I=t(m.data);if(I===true||typeof I=="object"&&I?.success===true)return m;let T={message:typeof r=="function"?r(u):r};return {success:false,error:T,errors:[T]}}),this}};return S.length>0?S.reduce((t,r)=>r(t,e,f)??t,c):c}var S=[];function $(e){S.push(e);}export{R as a,h as b,$ as c};
|
package/dist/full.d.cts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import './string.cjs';
|
|
2
|
-
import './number.cjs';
|
|
3
|
-
import './array.cjs';
|
|
4
|
-
export { ArraySchemaInterface, BooleanSchemaInterface, DateSchemaInterface, EnumSchemaInterface, ErrorStructure, ExtenderType, Infer, Invalid, NumberSchemaInterface, ObjectSchemaInterface, SchemaInterface, SchemaInterfaceOptions, SchemaType, StringSchemaInterface, UnionSchemaInterface, Valid, extend, hookOriginal, s } from './index.cjs';
|