@nerd-bible/valio 0.1.13 → 0.1.15
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 +1 -1
- 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/src/primitives.ts
CHANGED
|
@@ -1,35 +1,52 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
function primitive<T>(name: string, typeCheck: (v:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { Pipe } from "./pipe.ts";
|
|
2
|
+
|
|
3
|
+
function primitive<T>(name: string, typeCheck: (v: any) => v is T) {
|
|
4
|
+
return class extends Pipe<T, T> {
|
|
5
|
+
get inputName() {
|
|
6
|
+
return name;
|
|
7
|
+
}
|
|
8
|
+
inputTypeCheck(v: any) {
|
|
9
|
+
return typeCheck(v);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
get outputName() {
|
|
13
|
+
return name;
|
|
14
|
+
}
|
|
15
|
+
outputTypeCheck(v: any) {
|
|
16
|
+
return typeCheck(v);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const Boolean = primitive<boolean>(
|
|
22
|
+
"boolean",
|
|
23
|
+
(v): v is boolean => typeof v === "boolean",
|
|
24
|
+
);
|
|
8
25
|
export function boolean() {
|
|
9
|
-
return
|
|
10
|
-
"boolean",
|
|
11
|
-
(v): v is boolean => typeof v === "boolean",
|
|
12
|
-
);
|
|
26
|
+
return new Boolean();
|
|
13
27
|
}
|
|
14
28
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
);
|
|
29
|
+
const Undefined = primitive<undefined>(
|
|
30
|
+
"undefined",
|
|
31
|
+
(v): v is undefined => typeof v === "undefined",
|
|
32
|
+
);
|
|
33
|
+
function undefined_() {
|
|
34
|
+
return new Undefined();
|
|
21
35
|
}
|
|
36
|
+
export { undefined_ as undefined };
|
|
22
37
|
|
|
38
|
+
const Any = primitive<boolean>("any", (_v): _v is any => true);
|
|
23
39
|
export function any() {
|
|
24
|
-
return
|
|
40
|
+
return new Any();
|
|
25
41
|
}
|
|
26
42
|
|
|
43
|
+
const Null = primitive<null>("null", (v): v is null => v === null);
|
|
27
44
|
function null_() {
|
|
28
|
-
return
|
|
45
|
+
return new Null();
|
|
29
46
|
}
|
|
30
47
|
export { null_ as null };
|
|
31
48
|
|
|
32
|
-
export class Comparable<I, O> extends Pipe<I, O> {
|
|
49
|
+
export abstract class Comparable<I, O = I> extends Pipe<I, O> {
|
|
33
50
|
gt(n: O) {
|
|
34
51
|
return this.refine((v) => v > n, "gt", { n });
|
|
35
52
|
}
|
|
@@ -50,17 +67,53 @@ export class Comparable<I, O> extends Pipe<I, O> {
|
|
|
50
67
|
}
|
|
51
68
|
}
|
|
52
69
|
|
|
53
|
-
export class ValioNumber extends Comparable<number
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
70
|
+
export class ValioNumber extends Comparable<number> {
|
|
71
|
+
static typeCheck(v: any): v is number {
|
|
72
|
+
return typeof v === "number";
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
get inputName() {
|
|
76
|
+
return "number";
|
|
77
|
+
}
|
|
78
|
+
inputTypeCheck(v: any) {
|
|
79
|
+
return ValioNumber.typeCheck(v);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
get outputName() {
|
|
83
|
+
return this.inputName;
|
|
84
|
+
}
|
|
85
|
+
outputTypeCheck(v: any) {
|
|
86
|
+
return ValioNumber.typeCheck(v);
|
|
57
87
|
}
|
|
58
88
|
}
|
|
59
89
|
export function number() {
|
|
60
90
|
return new ValioNumber();
|
|
61
91
|
}
|
|
62
92
|
|
|
63
|
-
export class
|
|
93
|
+
export class ValioDate extends Comparable<Date> {
|
|
94
|
+
static typeCheck(v: any): v is Date {
|
|
95
|
+
return v instanceof Date;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
get inputName() {
|
|
99
|
+
return "date";
|
|
100
|
+
}
|
|
101
|
+
inputTypeCheck(v: any) {
|
|
102
|
+
return ValioDate.typeCheck(v);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
get outputName() {
|
|
106
|
+
return this.inputName;
|
|
107
|
+
}
|
|
108
|
+
outputTypeCheck(v: any) {
|
|
109
|
+
return ValioDate.typeCheck(v);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export function date(): ValioDate {
|
|
113
|
+
return new ValioDate();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export abstract class Arrayish<
|
|
64
117
|
I,
|
|
65
118
|
O extends {
|
|
66
119
|
length: number;
|
|
@@ -78,9 +131,18 @@ export class Arrayish<
|
|
|
78
131
|
}
|
|
79
132
|
|
|
80
133
|
export class ValioString extends Arrayish<string, string> {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
134
|
+
inputName = "string";
|
|
135
|
+
outputName = this.inputName;
|
|
136
|
+
|
|
137
|
+
static typeCheck(v: any): v is string {
|
|
138
|
+
return typeof v === "string";
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
inputTypeCheck(v: any) {
|
|
142
|
+
return ValioString.typeCheck(v);
|
|
143
|
+
}
|
|
144
|
+
outputTypeCheck(v: any) {
|
|
145
|
+
return ValioString.typeCheck(v);
|
|
84
146
|
}
|
|
85
147
|
|
|
86
148
|
regex(re: RegExp) {
|
|
@@ -97,10 +159,27 @@ export class ValioLiteral<T extends Lit> extends Pipe<T, T> {
|
|
|
97
159
|
literal: T;
|
|
98
160
|
|
|
99
161
|
constructor(literal: T) {
|
|
100
|
-
|
|
101
|
-
super(half, half);
|
|
162
|
+
super();
|
|
102
163
|
this.literal = literal;
|
|
103
164
|
}
|
|
165
|
+
|
|
166
|
+
typeCheck(v: any): v is T {
|
|
167
|
+
return v === this.literal;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
get inputName() {
|
|
171
|
+
return `${this.literal}`;
|
|
172
|
+
}
|
|
173
|
+
inputTypeCheck(v: any): v is T {
|
|
174
|
+
return this.typeCheck(v);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
get outputName() {
|
|
178
|
+
return this.inputName;
|
|
179
|
+
}
|
|
180
|
+
outputTypeCheck(v: any): v is T {
|
|
181
|
+
return this.typeCheck(v);
|
|
182
|
+
}
|
|
104
183
|
}
|
|
105
184
|
export function literal<T extends Lit>(literal: T) {
|
|
106
185
|
return new ValioLiteral(literal);
|
|
@@ -110,24 +189,25 @@ export class ValioEnum<T extends Lit> extends Pipe<T, T> {
|
|
|
110
189
|
literals: readonly T[];
|
|
111
190
|
|
|
112
191
|
constructor(literals: readonly T[]) {
|
|
113
|
-
|
|
114
|
-
literals.includes(v),
|
|
115
|
-
);
|
|
116
|
-
super(half, half);
|
|
192
|
+
super();
|
|
117
193
|
this.literals = literals;
|
|
118
194
|
}
|
|
195
|
+
|
|
196
|
+
get inputName() {
|
|
197
|
+
return `${this.literals.join(",")}`;
|
|
198
|
+
}
|
|
199
|
+
inputTypeCheck(v: any): v is T {
|
|
200
|
+
return this.literals.includes(v);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
get outputName() {
|
|
204
|
+
return this.inputName;
|
|
205
|
+
}
|
|
206
|
+
outputTypeCheck(v: any): v is T {
|
|
207
|
+
return this.inputTypeCheck(v);
|
|
208
|
+
}
|
|
119
209
|
}
|
|
120
210
|
function enum_<T extends Lit>(literals: readonly T[]): ValioEnum<T> {
|
|
121
211
|
return new ValioEnum(literals);
|
|
122
212
|
}
|
|
123
213
|
export { enum_ as enum };
|
|
124
|
-
|
|
125
|
-
export class ValioDate extends Comparable<Date, Date> {
|
|
126
|
-
constructor() {
|
|
127
|
-
const half = new HalfPipe("date", (v: any): v is Date => v instanceof Date);
|
|
128
|
-
super(half, half);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
export function date(): ValioDate {
|
|
132
|
-
return new ValioDate();
|
|
133
|
-
}
|