@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/src/primitives.ts CHANGED
@@ -1,35 +1,52 @@
1
- import { HalfPipe, Pipe } from "./pipe.ts";
2
-
3
- function primitive<T>(name: string, typeCheck: (v: T) => v is T) {
4
- const half = new HalfPipe(name, typeCheck);
5
- return new Pipe(half, half);
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 primitive<boolean>(
10
- "boolean",
11
- (v): v is boolean => typeof v === "boolean",
12
- );
26
+ return new Boolean();
13
27
  }
14
28
 
15
- // biome-ignore lint/suspicious/noShadowRestrictedNames: point of lib
16
- export function undefined() {
17
- return primitive<undefined>(
18
- "undefined",
19
- (v): v is undefined => typeof v === "undefined",
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 primitive<any>("any", (_v): _v is any => true);
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 primitive<null>("null", (v): v is null => v === null);
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, number> {
54
- constructor() {
55
- const half = new HalfPipe("number", (v) => typeof v === "number");
56
- super(half, half);
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 Arrayish<
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
- constructor() {
82
- const half = new HalfPipe("string", (v) => typeof v === "string");
83
- super(half, half);
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
- const half = new HalfPipe(`${literal}`, (v): v is T => v === literal);
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
- const half = new HalfPipe(`${literals.join(",")}`, (v: any): v is T =>
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
- }