@nerd-bible/valio 0.1.13 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/codecs.d.ts +1 -1
- package/dist/codecs.d.ts.map +1 -1
- package/dist/codecs.js +21 -4
- package/dist/codecs.js.map +1 -1
- package/dist/containers.d.ts +22 -5
- package/dist/containers.d.ts.map +1 -1
- package/dist/containers.js +129 -93
- package/dist/containers.js.map +1 -1
- package/dist/pipe.d.ts +15 -18
- package/dist/pipe.d.ts.map +1 -1
- package/dist/pipe.js +34 -45
- package/dist/pipe.js.map +1 -1
- package/dist/primitives.d.ts +111 -13
- package/dist/primitives.d.ts.map +1 -1
- package/dist/primitives.js +99 -29
- package/dist/primitives.js.map +1 -1
- package/package.json +2 -5
- package/src/codecs.test.ts +2 -4
- package/src/codecs.ts +23 -6
- package/src/containers.test.ts +9 -1
- package/src/containers.ts +143 -124
- package/src/pipe.ts +68 -68
- package/src/primitives.ts +124 -44
package/dist/pipe.js
CHANGED
|
@@ -1,23 +1,4 @@
|
|
|
1
1
|
import enFormat from "./locales/en.js";
|
|
2
|
-
function clone(obj) {
|
|
3
|
-
return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));
|
|
4
|
-
}
|
|
5
|
-
export class HalfPipe {
|
|
6
|
-
name;
|
|
7
|
-
typeCheck;
|
|
8
|
-
transform;
|
|
9
|
-
/** Checks to run after type check */
|
|
10
|
-
checks = [];
|
|
11
|
-
constructor(name, typeCheck, transform, checks = []) {
|
|
12
|
-
this.name = name;
|
|
13
|
-
this.typeCheck = typeCheck;
|
|
14
|
-
this.transform = transform;
|
|
15
|
-
this.checks = checks;
|
|
16
|
-
}
|
|
17
|
-
clone() {
|
|
18
|
-
return new HalfPipe(this.name, this.typeCheck, this.transform, this.checks.slice());
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
2
|
/** During encoding, decoding, or validation. */
|
|
22
3
|
export class Context {
|
|
23
4
|
jsonPath = [];
|
|
@@ -40,13 +21,13 @@ export class Context {
|
|
|
40
21
|
const message = this.errorFmt(name, props);
|
|
41
22
|
this.pushError({ input, message });
|
|
42
23
|
}
|
|
43
|
-
run(input,
|
|
44
|
-
if (!
|
|
45
|
-
this.pushErrorFmt("type", input, { expected:
|
|
24
|
+
run(input, name, typeCheck, checks) {
|
|
25
|
+
if (!typeCheck(input)) {
|
|
26
|
+
this.pushErrorFmt("type", input, { expected: name() });
|
|
46
27
|
return { success: false, errors: this.errors };
|
|
47
28
|
}
|
|
48
29
|
let success = true;
|
|
49
|
-
for (const c of
|
|
30
|
+
for (const c of checks ?? []) {
|
|
50
31
|
if (!c.valid(input, this)) {
|
|
51
32
|
this.pushErrorFmt(c.name, input, c.props);
|
|
52
33
|
success = false;
|
|
@@ -57,27 +38,35 @@ export class Context {
|
|
|
57
38
|
return { success, output: input };
|
|
58
39
|
}
|
|
59
40
|
}
|
|
41
|
+
export function cloneObject(obj) {
|
|
42
|
+
const res = Object.getPrototypeOf(obj) == Object.prototype ? {} : Object.create(obj);
|
|
43
|
+
for (const p in obj) {
|
|
44
|
+
const v = obj[p];
|
|
45
|
+
if (Array.isArray(v))
|
|
46
|
+
res[p] = v.slice();
|
|
47
|
+
else if (v && v.clone)
|
|
48
|
+
res[p] = v.clone();
|
|
49
|
+
else if (v && typeof v === "object")
|
|
50
|
+
res[p] = cloneObject(v);
|
|
51
|
+
else
|
|
52
|
+
res[p] = v;
|
|
53
|
+
}
|
|
54
|
+
return res;
|
|
55
|
+
}
|
|
60
56
|
export class Pipe {
|
|
61
|
-
i;
|
|
62
|
-
o;
|
|
63
|
-
constructor(i, o) {
|
|
64
|
-
this.i = i;
|
|
65
|
-
this.o = o;
|
|
66
|
-
}
|
|
67
57
|
pipes = [];
|
|
68
58
|
registry = {};
|
|
69
|
-
|
|
59
|
+
/** Checks to run after type check */
|
|
60
|
+
inputChecks;
|
|
61
|
+
/** Checks to run after type check */
|
|
62
|
+
outputChecks;
|
|
70
63
|
clone() {
|
|
71
|
-
|
|
72
|
-
res.i = res.i.clone();
|
|
73
|
-
res.o = res.o.clone();
|
|
74
|
-
res.pipes = res.pipes.slice();
|
|
75
|
-
res.registry = { ...res.registry };
|
|
76
|
-
return res;
|
|
64
|
+
return cloneObject(this);
|
|
77
65
|
}
|
|
78
66
|
refine(valid, name, props = {}) {
|
|
79
67
|
const res = this.clone();
|
|
80
|
-
res.
|
|
68
|
+
res.outputChecks ??= [];
|
|
69
|
+
res.outputChecks.push({ valid, name, props });
|
|
81
70
|
return res;
|
|
82
71
|
}
|
|
83
72
|
pipe(pipe) {
|
|
@@ -87,17 +76,17 @@ export class Pipe {
|
|
|
87
76
|
}
|
|
88
77
|
decodeAny(input, ctx = new Context()) {
|
|
89
78
|
// 1. Verify input
|
|
90
|
-
let res = ctx.run(input, this.
|
|
79
|
+
let res = ctx.run(input, () => this.inputName, this.inputTypeCheck.bind(this), this.inputChecks);
|
|
91
80
|
if (!res.success)
|
|
92
81
|
return res;
|
|
93
82
|
// 2. Transform input to output
|
|
94
|
-
if (this.
|
|
95
|
-
res = this.
|
|
83
|
+
if (this.inputTransform) {
|
|
84
|
+
res = this.inputTransform(res.output, ctx);
|
|
96
85
|
if (!res.success)
|
|
97
86
|
return res;
|
|
98
87
|
}
|
|
99
88
|
// 3. Verify output
|
|
100
|
-
res = ctx.run(res.output, this.
|
|
89
|
+
res = ctx.run(res.output, () => this.outputName, this.outputTypeCheck.bind(this), this.outputChecks);
|
|
101
90
|
if (!res.success)
|
|
102
91
|
return res;
|
|
103
92
|
// 4. Next
|
|
@@ -120,17 +109,17 @@ export class Pipe {
|
|
|
120
109
|
return res;
|
|
121
110
|
}
|
|
122
111
|
// 2. Verify output
|
|
123
|
-
res = ctx.run(res.output, this.
|
|
112
|
+
res = ctx.run(res.output, () => this.outputName, this.outputTypeCheck.bind(this), this.outputChecks);
|
|
124
113
|
if (!res.success)
|
|
125
114
|
return res;
|
|
126
115
|
// 3. Transform output to input
|
|
127
|
-
if (this.
|
|
128
|
-
res = this.
|
|
116
|
+
if (this.outputTransform) {
|
|
117
|
+
res = this.outputTransform(res.output, ctx);
|
|
129
118
|
if (!res.success)
|
|
130
119
|
return res;
|
|
131
120
|
}
|
|
132
121
|
// 4. Verify input
|
|
133
|
-
return ctx.run(res.output, this.
|
|
122
|
+
return ctx.run(res.output, () => this.inputName, this.inputTypeCheck.bind(this), this.inputChecks);
|
|
134
123
|
}
|
|
135
124
|
encode(output, ctx = new Context()) {
|
|
136
125
|
return this.encodeAny(output, ctx);
|
package/dist/pipe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":"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"}
|
package/dist/primitives.d.ts
CHANGED
|
@@ -1,10 +1,87 @@
|
|
|
1
1
|
import { Pipe } from "./pipe.ts";
|
|
2
|
-
export declare function boolean():
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
export declare function boolean(): {
|
|
3
|
+
get inputName(): string;
|
|
4
|
+
inputTypeCheck(v: any): v is boolean;
|
|
5
|
+
get outputName(): string;
|
|
6
|
+
outputTypeCheck(v: any): v is boolean;
|
|
7
|
+
pipes: Pipe<any, any>[];
|
|
8
|
+
registry: Record<PropertyKey, any>;
|
|
9
|
+
inputChecks?: import("./pipe.ts").Check<boolean>[] | undefined;
|
|
10
|
+
inputTransform?(v: boolean, ctx: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
11
|
+
outputChecks?: import("./pipe.ts").Check<boolean>[] | undefined;
|
|
12
|
+
outputTransform?(v: boolean, ctx: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
13
|
+
clone(): /*elided*/ any;
|
|
14
|
+
refine(valid: (data: boolean, ctx: import("./pipe.ts").Context) => boolean, name: string, props?: Record<any, any>): /*elided*/ any;
|
|
15
|
+
pipe<I2 extends boolean, O2>(pipe: Pipe<I2, O2>): Pipe<boolean, O2>;
|
|
16
|
+
decodeAny(input: any, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
17
|
+
decode(input: boolean, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
18
|
+
encodeAny(output: any, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
19
|
+
encode(output: boolean, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
20
|
+
register(key: PropertyKey, value: any): Pipe<boolean, boolean>;
|
|
21
|
+
};
|
|
22
|
+
declare function undefined_(): {
|
|
23
|
+
get inputName(): string;
|
|
24
|
+
inputTypeCheck(v: any): v is undefined;
|
|
25
|
+
get outputName(): string;
|
|
26
|
+
outputTypeCheck(v: any): v is undefined;
|
|
27
|
+
pipes: Pipe<any, any>[];
|
|
28
|
+
registry: Record<PropertyKey, any>;
|
|
29
|
+
inputChecks?: import("./pipe.ts").Check<undefined>[] | undefined;
|
|
30
|
+
inputTransform?(v: undefined, ctx: import("./pipe.ts").Context): import("./pipe.ts").Result<undefined>;
|
|
31
|
+
outputChecks?: import("./pipe.ts").Check<undefined>[] | undefined;
|
|
32
|
+
outputTransform?(v: undefined, ctx: import("./pipe.ts").Context): import("./pipe.ts").Result<undefined>;
|
|
33
|
+
clone(): /*elided*/ any;
|
|
34
|
+
refine(valid: (data: undefined, ctx: import("./pipe.ts").Context) => boolean, name: string, props?: Record<any, any>): /*elided*/ any;
|
|
35
|
+
pipe<I2 extends undefined, O2>(pipe: Pipe<I2, O2>): Pipe<undefined, O2>;
|
|
36
|
+
decodeAny(input: any, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<undefined>;
|
|
37
|
+
decode(input: undefined, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<undefined>;
|
|
38
|
+
encodeAny(output: any, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<undefined>;
|
|
39
|
+
encode(output: undefined, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<undefined>;
|
|
40
|
+
register(key: PropertyKey, value: any): Pipe<undefined, undefined>;
|
|
41
|
+
};
|
|
42
|
+
export { undefined_ as undefined };
|
|
43
|
+
export declare function any(): {
|
|
44
|
+
get inputName(): string;
|
|
45
|
+
inputTypeCheck(v: any): v is boolean;
|
|
46
|
+
get outputName(): string;
|
|
47
|
+
outputTypeCheck(v: any): v is boolean;
|
|
48
|
+
pipes: Pipe<any, any>[];
|
|
49
|
+
registry: Record<PropertyKey, any>;
|
|
50
|
+
inputChecks?: import("./pipe.ts").Check<boolean>[] | undefined;
|
|
51
|
+
inputTransform?(v: boolean, ctx: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
52
|
+
outputChecks?: import("./pipe.ts").Check<boolean>[] | undefined;
|
|
53
|
+
outputTransform?(v: boolean, ctx: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
54
|
+
clone(): /*elided*/ any;
|
|
55
|
+
refine(valid: (data: boolean, ctx: import("./pipe.ts").Context) => boolean, name: string, props?: Record<any, any>): /*elided*/ any;
|
|
56
|
+
pipe<I2 extends boolean, O2>(pipe: Pipe<I2, O2>): Pipe<boolean, O2>;
|
|
57
|
+
decodeAny(input: any, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
58
|
+
decode(input: boolean, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
59
|
+
encodeAny(output: any, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
60
|
+
encode(output: boolean, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<boolean>;
|
|
61
|
+
register(key: PropertyKey, value: any): Pipe<boolean, boolean>;
|
|
62
|
+
};
|
|
63
|
+
declare function null_(): {
|
|
64
|
+
get inputName(): string;
|
|
65
|
+
inputTypeCheck(v: any): v is null;
|
|
66
|
+
get outputName(): string;
|
|
67
|
+
outputTypeCheck(v: any): v is null;
|
|
68
|
+
pipes: Pipe<any, any>[];
|
|
69
|
+
registry: Record<PropertyKey, any>;
|
|
70
|
+
inputChecks?: import("./pipe.ts").Check<null>[] | undefined;
|
|
71
|
+
inputTransform?(v: null, ctx: import("./pipe.ts").Context): import("./pipe.ts").Result<null>;
|
|
72
|
+
outputChecks?: import("./pipe.ts").Check<null>[] | undefined;
|
|
73
|
+
outputTransform?(v: null, ctx: import("./pipe.ts").Context): import("./pipe.ts").Result<null>;
|
|
74
|
+
clone(): /*elided*/ any;
|
|
75
|
+
refine(valid: (data: null, ctx: import("./pipe.ts").Context) => boolean, name: string, props?: Record<any, any>): /*elided*/ any;
|
|
76
|
+
pipe<I2 extends null, O2>(pipe: Pipe<I2, O2>): Pipe<null, O2>;
|
|
77
|
+
decodeAny(input: any, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<null>;
|
|
78
|
+
decode(input: null, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<null>;
|
|
79
|
+
encodeAny(output: any, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<null>;
|
|
80
|
+
encode(output: null, ctx?: import("./pipe.ts").Context): import("./pipe.ts").Result<null>;
|
|
81
|
+
register(key: PropertyKey, value: any): Pipe<null, null>;
|
|
82
|
+
};
|
|
6
83
|
export { null_ as null };
|
|
7
|
-
export declare class Comparable<I, O> extends Pipe<I, O> {
|
|
84
|
+
export declare abstract class Comparable<I, O = I> extends Pipe<I, O> {
|
|
8
85
|
gt(n: O): this;
|
|
9
86
|
gte(n: O): this;
|
|
10
87
|
lt(n: O): this;
|
|
@@ -12,11 +89,23 @@ export declare class Comparable<I, O> extends Pipe<I, O> {
|
|
|
12
89
|
eq(n: O): this;
|
|
13
90
|
neq(n: O): this;
|
|
14
91
|
}
|
|
15
|
-
export declare class ValioNumber extends Comparable<number
|
|
16
|
-
|
|
92
|
+
export declare class ValioNumber extends Comparable<number> {
|
|
93
|
+
static typeCheck(v: any): v is number;
|
|
94
|
+
get inputName(): string;
|
|
95
|
+
inputTypeCheck(v: any): v is number;
|
|
96
|
+
get outputName(): string;
|
|
97
|
+
outputTypeCheck(v: any): v is number;
|
|
17
98
|
}
|
|
18
99
|
export declare function number(): ValioNumber;
|
|
19
|
-
export declare class
|
|
100
|
+
export declare class ValioDate extends Comparable<Date> {
|
|
101
|
+
static typeCheck(v: any): v is Date;
|
|
102
|
+
get inputName(): string;
|
|
103
|
+
inputTypeCheck(v: any): v is Date;
|
|
104
|
+
get outputName(): string;
|
|
105
|
+
outputTypeCheck(v: any): v is Date;
|
|
106
|
+
}
|
|
107
|
+
export declare function date(): ValioDate;
|
|
108
|
+
export declare abstract class Arrayish<I, O extends {
|
|
20
109
|
length: number;
|
|
21
110
|
}> extends Pipe<I, O> {
|
|
22
111
|
minLength(n: number): this;
|
|
@@ -24,7 +113,11 @@ export declare class Arrayish<I, O extends {
|
|
|
24
113
|
length(n: number): this;
|
|
25
114
|
}
|
|
26
115
|
export declare class ValioString extends Arrayish<string, string> {
|
|
27
|
-
|
|
116
|
+
inputName: string;
|
|
117
|
+
outputName: string;
|
|
118
|
+
static typeCheck(v: any): v is string;
|
|
119
|
+
inputTypeCheck(v: any): v is string;
|
|
120
|
+
outputTypeCheck(v: any): v is string;
|
|
28
121
|
regex(re: RegExp): this;
|
|
29
122
|
}
|
|
30
123
|
export declare function string(): ValioString;
|
|
@@ -32,16 +125,21 @@ export type Lit = string | number | bigint | boolean | null | undefined;
|
|
|
32
125
|
export declare class ValioLiteral<T extends Lit> extends Pipe<T, T> {
|
|
33
126
|
literal: T;
|
|
34
127
|
constructor(literal: T);
|
|
128
|
+
typeCheck(v: any): v is T;
|
|
129
|
+
get inputName(): string;
|
|
130
|
+
inputTypeCheck(v: any): v is T;
|
|
131
|
+
get outputName(): string;
|
|
132
|
+
outputTypeCheck(v: any): v is T;
|
|
35
133
|
}
|
|
36
134
|
export declare function literal<T extends Lit>(literal: T): ValioLiteral<T>;
|
|
37
135
|
export declare class ValioEnum<T extends Lit> extends Pipe<T, T> {
|
|
38
136
|
literals: readonly T[];
|
|
39
137
|
constructor(literals: readonly T[]);
|
|
138
|
+
get inputName(): string;
|
|
139
|
+
inputTypeCheck(v: any): v is T;
|
|
140
|
+
get outputName(): string;
|
|
141
|
+
outputTypeCheck(v: any): v is T;
|
|
40
142
|
}
|
|
41
143
|
declare function enum_<T extends Lit>(literals: readonly T[]): ValioEnum<T>;
|
|
42
144
|
export { enum_ as enum };
|
|
43
|
-
export declare class ValioDate extends Comparable<Date, Date> {
|
|
44
|
-
constructor();
|
|
45
|
-
}
|
|
46
|
-
export declare function date(): ValioDate;
|
|
47
145
|
//# sourceMappingURL=primitives.d.ts.map
|
package/dist/primitives.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"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"}
|
package/dist/primitives.js
CHANGED
|
@@ -1,20 +1,36 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Pipe } from "./pipe.js";
|
|
2
2
|
function primitive(name, typeCheck) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
return class extends Pipe {
|
|
4
|
+
get inputName() {
|
|
5
|
+
return name;
|
|
6
|
+
}
|
|
7
|
+
inputTypeCheck(v) {
|
|
8
|
+
return typeCheck(v);
|
|
9
|
+
}
|
|
10
|
+
get outputName() {
|
|
11
|
+
return name;
|
|
12
|
+
}
|
|
13
|
+
outputTypeCheck(v) {
|
|
14
|
+
return typeCheck(v);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const Boolean = primitive("boolean", (v) => typeof v === "boolean");
|
|
6
19
|
export function boolean() {
|
|
7
|
-
return
|
|
20
|
+
return new Boolean();
|
|
8
21
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return
|
|
22
|
+
const Undefined = primitive("undefined", (v) => typeof v === "undefined");
|
|
23
|
+
function undefined_() {
|
|
24
|
+
return new Undefined();
|
|
12
25
|
}
|
|
26
|
+
export { undefined_ as undefined };
|
|
27
|
+
const Any = primitive("any", (_v) => true);
|
|
13
28
|
export function any() {
|
|
14
|
-
return
|
|
29
|
+
return new Any();
|
|
15
30
|
}
|
|
31
|
+
const Null = primitive("null", (v) => v === null);
|
|
16
32
|
function null_() {
|
|
17
|
-
return
|
|
33
|
+
return new Null();
|
|
18
34
|
}
|
|
19
35
|
export { null_ as null };
|
|
20
36
|
export class Comparable extends Pipe {
|
|
@@ -38,14 +54,45 @@ export class Comparable extends Pipe {
|
|
|
38
54
|
}
|
|
39
55
|
}
|
|
40
56
|
export class ValioNumber extends Comparable {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
57
|
+
static typeCheck(v) {
|
|
58
|
+
return typeof v === "number";
|
|
59
|
+
}
|
|
60
|
+
get inputName() {
|
|
61
|
+
return "number";
|
|
62
|
+
}
|
|
63
|
+
inputTypeCheck(v) {
|
|
64
|
+
return ValioNumber.typeCheck(v);
|
|
65
|
+
}
|
|
66
|
+
get outputName() {
|
|
67
|
+
return this.inputName;
|
|
68
|
+
}
|
|
69
|
+
outputTypeCheck(v) {
|
|
70
|
+
return ValioNumber.typeCheck(v);
|
|
44
71
|
}
|
|
45
72
|
}
|
|
46
73
|
export function number() {
|
|
47
74
|
return new ValioNumber();
|
|
48
75
|
}
|
|
76
|
+
export class ValioDate extends Comparable {
|
|
77
|
+
static typeCheck(v) {
|
|
78
|
+
return v instanceof Date;
|
|
79
|
+
}
|
|
80
|
+
get inputName() {
|
|
81
|
+
return "date";
|
|
82
|
+
}
|
|
83
|
+
inputTypeCheck(v) {
|
|
84
|
+
return ValioDate.typeCheck(v);
|
|
85
|
+
}
|
|
86
|
+
get outputName() {
|
|
87
|
+
return this.inputName;
|
|
88
|
+
}
|
|
89
|
+
outputTypeCheck(v) {
|
|
90
|
+
return ValioDate.typeCheck(v);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function date() {
|
|
94
|
+
return new ValioDate();
|
|
95
|
+
}
|
|
49
96
|
export class Arrayish extends Pipe {
|
|
50
97
|
minLength(n) {
|
|
51
98
|
return this.refine((v) => v.length >= n, "minLength", { n });
|
|
@@ -58,9 +105,16 @@ export class Arrayish extends Pipe {
|
|
|
58
105
|
}
|
|
59
106
|
}
|
|
60
107
|
export class ValioString extends Arrayish {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
108
|
+
inputName = "string";
|
|
109
|
+
outputName = this.inputName;
|
|
110
|
+
static typeCheck(v) {
|
|
111
|
+
return typeof v === "string";
|
|
112
|
+
}
|
|
113
|
+
inputTypeCheck(v) {
|
|
114
|
+
return ValioString.typeCheck(v);
|
|
115
|
+
}
|
|
116
|
+
outputTypeCheck(v) {
|
|
117
|
+
return ValioString.typeCheck(v);
|
|
64
118
|
}
|
|
65
119
|
regex(re) {
|
|
66
120
|
return this.refine((v) => !!v.match(re), "regex", { regex: re.source });
|
|
@@ -72,10 +126,24 @@ export function string() {
|
|
|
72
126
|
export class ValioLiteral extends Pipe {
|
|
73
127
|
literal;
|
|
74
128
|
constructor(literal) {
|
|
75
|
-
|
|
76
|
-
super(half, half);
|
|
129
|
+
super();
|
|
77
130
|
this.literal = literal;
|
|
78
131
|
}
|
|
132
|
+
typeCheck(v) {
|
|
133
|
+
return v === this.literal;
|
|
134
|
+
}
|
|
135
|
+
get inputName() {
|
|
136
|
+
return `${this.literal}`;
|
|
137
|
+
}
|
|
138
|
+
inputTypeCheck(v) {
|
|
139
|
+
return this.typeCheck(v);
|
|
140
|
+
}
|
|
141
|
+
get outputName() {
|
|
142
|
+
return this.inputName;
|
|
143
|
+
}
|
|
144
|
+
outputTypeCheck(v) {
|
|
145
|
+
return this.typeCheck(v);
|
|
146
|
+
}
|
|
79
147
|
}
|
|
80
148
|
export function literal(literal) {
|
|
81
149
|
return new ValioLiteral(literal);
|
|
@@ -83,22 +151,24 @@ export function literal(literal) {
|
|
|
83
151
|
export class ValioEnum extends Pipe {
|
|
84
152
|
literals;
|
|
85
153
|
constructor(literals) {
|
|
86
|
-
|
|
87
|
-
super(half, half);
|
|
154
|
+
super();
|
|
88
155
|
this.literals = literals;
|
|
89
156
|
}
|
|
157
|
+
get inputName() {
|
|
158
|
+
return `${this.literals.join(",")}`;
|
|
159
|
+
}
|
|
160
|
+
inputTypeCheck(v) {
|
|
161
|
+
return this.literals.includes(v);
|
|
162
|
+
}
|
|
163
|
+
get outputName() {
|
|
164
|
+
return this.inputName;
|
|
165
|
+
}
|
|
166
|
+
outputTypeCheck(v) {
|
|
167
|
+
return this.inputTypeCheck(v);
|
|
168
|
+
}
|
|
90
169
|
}
|
|
91
170
|
function enum_(literals) {
|
|
92
171
|
return new ValioEnum(literals);
|
|
93
172
|
}
|
|
94
173
|
export { enum_ as enum };
|
|
95
|
-
export class ValioDate extends Comparable {
|
|
96
|
-
constructor() {
|
|
97
|
-
const half = new HalfPipe("date", (v) => v instanceof Date);
|
|
98
|
-
super(half, half);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
export function date() {
|
|
102
|
-
return new ValioDate();
|
|
103
|
-
}
|
|
104
174
|
//# sourceMappingURL=primitives.js.map
|
package/dist/primitives.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -19,10 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
"prettier": "@nerd-bible/config/prettier",
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@nerd-bible/config": "^0.1.
|
|
23
|
-
"@types/node": "^25.3.3",
|
|
24
|
-
"expect": "^30.2.0",
|
|
25
|
-
"typescript": "^5.9.3"
|
|
22
|
+
"@nerd-bible/config": "^0.1.9"
|
|
26
23
|
},
|
|
27
24
|
"files": [
|
|
28
25
|
"src",
|
|
@@ -30,7 +27,7 @@
|
|
|
30
27
|
"README.md",
|
|
31
28
|
"LICENSE.md"
|
|
32
29
|
],
|
|
33
|
-
"version": "0.1.
|
|
30
|
+
"version": "0.1.16",
|
|
34
31
|
"repository": {
|
|
35
32
|
"url": "https://github.com/nerd-bible/valio"
|
|
36
33
|
}
|
package/src/codecs.test.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { test } from "node:test";
|
|
|
2
2
|
import expect from "expect";
|
|
3
3
|
import * as v from "./index.ts";
|
|
4
4
|
|
|
5
|
-
test("number codec", () => {
|
|
5
|
+
test("plain number codec", () => {
|
|
6
6
|
const schema = v.codecs.number();
|
|
7
7
|
|
|
8
8
|
expect(schema.decode("13")).toEqual({ success: true, output: 13 });
|
|
@@ -34,9 +34,7 @@ test("2 pipes", () => {
|
|
|
34
34
|
|
|
35
35
|
expect(next.decode("3")).toEqual({
|
|
36
36
|
success: false,
|
|
37
|
-
errors: {
|
|
38
|
-
".": [{ input: 3, message: "must be > 5" }],
|
|
39
|
-
},
|
|
37
|
+
errors: { ".": [{ input: 3, message: "must be > 5" }] },
|
|
40
38
|
});
|
|
41
39
|
expect(schema.decode(undefined)).toEqual({
|
|
42
40
|
success: true,
|
package/src/codecs.ts
CHANGED
|
@@ -10,19 +10,36 @@ export function custom<I, O>(
|
|
|
10
10
|
},
|
|
11
11
|
): Pipe<I, O> {
|
|
12
12
|
const res = output.clone() as any;
|
|
13
|
-
res
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
Object.defineProperty(res, "inputName", {
|
|
14
|
+
get() {
|
|
15
|
+
return input.inputName;
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(res, "inputTypeCheck", {
|
|
19
|
+
get() {
|
|
20
|
+
return input.inputTypeCheck.bind(input);
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(res, "inputTransform", {
|
|
24
|
+
get() {
|
|
25
|
+
return codec.decode;
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(res, "outputTransform", {
|
|
29
|
+
get() {
|
|
30
|
+
return codec.encode;
|
|
31
|
+
},
|
|
32
|
+
});
|
|
16
33
|
return res;
|
|
17
34
|
}
|
|
18
35
|
|
|
19
36
|
export function number(
|
|
20
37
|
parser = Number.parseFloat,
|
|
21
|
-
): p.Comparable<
|
|
22
|
-
return custom(p.any(), p.number(), {
|
|
38
|
+
): p.Comparable<any, number> {
|
|
39
|
+
return custom<any, number>(p.any(), p.number(), {
|
|
23
40
|
decode(input, ctx) {
|
|
24
41
|
if (typeof input === "number") return { success: true, output: input };
|
|
25
|
-
if (
|
|
42
|
+
if (input == null || (typeof input === "string" && input.toLowerCase()) === "nan")
|
|
26
43
|
return { success: true, output: Number.NaN };
|
|
27
44
|
|
|
28
45
|
const output = parser(input);
|
package/src/containers.test.ts
CHANGED
|
@@ -28,7 +28,7 @@ test("array failed element", () => {
|
|
|
28
28
|
});
|
|
29
29
|
});
|
|
30
30
|
|
|
31
|
-
test("object", () => {
|
|
31
|
+
test("plain object", () => {
|
|
32
32
|
const o = v.object({ foo: v.number().gt(4) });
|
|
33
33
|
type O = v.Output<typeof o>;
|
|
34
34
|
|
|
@@ -53,6 +53,14 @@ test("object", () => {
|
|
|
53
53
|
});
|
|
54
54
|
});
|
|
55
55
|
|
|
56
|
+
test("registry", () => {
|
|
57
|
+
const o1 = v.object({ foo: v.number().gt(4) }).register("foo", 1);
|
|
58
|
+
const o2 = o1.register("bar", 2);
|
|
59
|
+
|
|
60
|
+
expect(o1.registry).toStrictEqual({ foo: 1 });
|
|
61
|
+
expect(o2.registry).toStrictEqual({ foo: 1, bar: 2 });
|
|
62
|
+
});
|
|
63
|
+
|
|
56
64
|
test("loose object", () => {
|
|
57
65
|
const o = v.object({ foo: v.number().gt(4) }).loose<number>();
|
|
58
66
|
type O = v.Output<typeof o>;
|