justus 0.0.7 → 0.1.1
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/NOTICE.md +1 -1
- package/README.md +35 -11
- package/dist/dts-generator.js +64 -14
- package/dist/dts-generator.js.map +2 -2
- package/dist/dts-generator.mjs +66 -15
- package/dist/dts-generator.mjs.map +2 -2
- package/dist/index.js +195 -152
- package/dist/index.js.map +3 -3
- package/dist/index.mjs +188 -151
- package/dist/index.mjs.map +3 -3
- package/dts-generator.d.ts +3 -3
- package/index.d.ts +94 -135
- package/package.json +14 -14
- package/src/dts-generator.ts +39 -17
- package/src/index.ts +4 -2
- package/src/schema.ts +1 -72
- package/src/types.ts +53 -140
- package/src/utilities.ts +5 -11
- package/src/validators/any.ts +2 -2
- package/src/validators/array.ts +7 -15
- package/src/validators/boolean.ts +35 -3
- package/src/validators/constant.ts +2 -2
- package/src/validators/date.ts +5 -11
- package/src/validators/never.ts +18 -0
- package/src/validators/number.ts +20 -12
- package/src/validators/object.ts +15 -48
- package/src/validators/optional.ts +30 -0
- package/src/validators/string.ts +8 -13
- package/src/validators/tuple.ts +2 -12
- package/src/validators/union.ts +3 -2
- package/src/validators/url.ts +5 -9
package/NOTICE.md
CHANGED
package/README.md
CHANGED
|
@@ -25,6 +25,7 @@ typing can be inferred.
|
|
|
25
25
|
* [Dates](#date-validator)
|
|
26
26
|
* [Tuples](#tuple-validator)
|
|
27
27
|
* [Objects](#object-validator) (yes, this is the important one!!!)
|
|
28
|
+
* [Optionals](#optional-validator)
|
|
28
29
|
* [Any of, all of](#union-validators)
|
|
29
30
|
* [Validation Options](#validation-options)
|
|
30
31
|
* [A (slightly more) complex example](#a-complex-example)
|
|
@@ -92,7 +93,7 @@ String validators are created using the `string` function:
|
|
|
92
93
|
```typescript
|
|
93
94
|
import { string } from 'justus'
|
|
94
95
|
|
|
95
|
-
const s1 = string
|
|
96
|
+
const s1 = string // validates any string
|
|
96
97
|
const s2 = string({ minLength: 1 }) // validate non empty strings
|
|
97
98
|
```
|
|
98
99
|
|
|
@@ -164,8 +165,9 @@ Number validators are created using the `number` function:
|
|
|
164
165
|
```typescript
|
|
165
166
|
import { number } from 'justus'
|
|
166
167
|
|
|
167
|
-
const n1 = number
|
|
168
|
+
const n1 = number // validates any number
|
|
168
169
|
const n2 = number({ minimum: 123 }) // validate numbers 123 and greater
|
|
170
|
+
const n3 = number({ fromString: true }) // parse strings like "12.34" or "0x0CAFE"
|
|
169
171
|
```
|
|
170
172
|
|
|
171
173
|
#### Options
|
|
@@ -176,6 +178,7 @@ const n2 = number({ minimum: 123 }) // validate numbers 123 and greater
|
|
|
176
178
|
* `exclusiveMaximum?: number`: The _exclusive_ maximum value for a valid `number`
|
|
177
179
|
* `exclusiveMinimum?: number`: The _exclusive_ minimum value for a valid `number`
|
|
178
180
|
* `allowNaN?: boolean`: Whether to allow `NaN` or not (default: `false`)
|
|
181
|
+
* `fromString?: boolean`: Whether to parse numbers from strings or not (default: `false`)
|
|
179
182
|
|
|
180
183
|
#### Branded numbers
|
|
181
184
|
|
|
@@ -242,6 +245,21 @@ const validator = object({
|
|
|
242
245
|
})
|
|
243
246
|
```
|
|
244
247
|
|
|
248
|
+
To validate the string `true` or `false` as booleans, simply create the
|
|
249
|
+
validator with the `fromString` option (defaults to `false`):
|
|
250
|
+
|
|
251
|
+
```typescript
|
|
252
|
+
import { boolean, object } from 'justus'
|
|
253
|
+
|
|
254
|
+
const validator = object({
|
|
255
|
+
foo: boolean({ fromString: 'true' })
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
// Here myValue can be a boolean or the string "true" or "false" (case insensitive)
|
|
259
|
+
const bool = validate(validator, myValue)
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
|
|
245
263
|
|
|
246
264
|
Constant Validator
|
|
247
265
|
------------------
|
|
@@ -309,7 +327,7 @@ Array validators are created using the `array` or `arrayOf` functions:
|
|
|
309
327
|
```typescript
|
|
310
328
|
import { array, arrayOf, number, string } from 'justus'
|
|
311
329
|
|
|
312
|
-
const a1 = array
|
|
330
|
+
const a1 = array // validates any array
|
|
313
331
|
const a2 = array({ maxItems: 10, items: string }) // array of strings
|
|
314
332
|
const a3 = arrayOf(number) // array of numbers
|
|
315
333
|
```
|
|
@@ -353,7 +371,7 @@ Date validators are created using the `date` function:
|
|
|
353
371
|
```typescript
|
|
354
372
|
import { date } from 'justus'
|
|
355
373
|
|
|
356
|
-
const d1 = date
|
|
374
|
+
const d1 = date // validates any date
|
|
357
375
|
const d2 = date({ format: 'iso' }) // validate ISO dates
|
|
358
376
|
```
|
|
359
377
|
|
|
@@ -434,7 +452,7 @@ As seen in the examples above, object validators are created using the
|
|
|
434
452
|
```typescript
|
|
435
453
|
import { object, string, number, boolean } from 'justus'
|
|
436
454
|
|
|
437
|
-
const o1 = object
|
|
455
|
+
const o1 = object // any object (excluding null - darn JavaScript)
|
|
438
456
|
const o2 = object({
|
|
439
457
|
foo: string, // any string
|
|
440
458
|
bar: number, // any number
|
|
@@ -548,7 +566,7 @@ const o2 = object({
|
|
|
548
566
|
|
|
549
567
|
When allowing extra properties, or extending objects, we might want to validate
|
|
550
568
|
the _non-existance_ of a specific property. We can do this setting a property
|
|
551
|
-
to `never
|
|
569
|
+
to `never`.
|
|
552
570
|
|
|
553
571
|
```typescript
|
|
554
572
|
import { allowAdditionalProperties, never, number, object, string } from 'justus'
|
|
@@ -570,19 +588,25 @@ const o3 = object({
|
|
|
570
588
|
} as const)
|
|
571
589
|
```
|
|
572
590
|
|
|
573
|
-
|
|
591
|
+
Optional Validator
|
|
592
|
+
------------------
|
|
574
593
|
|
|
575
|
-
Optional
|
|
594
|
+
Optional properties properties can also be declared in objects, arrays, ...:
|
|
576
595
|
|
|
577
596
|
```typescript
|
|
578
|
-
import { object,
|
|
597
|
+
import { object, arrayOf, optional, string } from 'justus'
|
|
579
598
|
|
|
580
599
|
const o1 = object({
|
|
581
600
|
foo: string, // any string, but must be a string
|
|
582
601
|
bar: optional(number), // optional property as "number | undefined"
|
|
583
|
-
baz: readonly(boolean), // read-only property as "readonly boolean"
|
|
584
|
-
xxx: readonly(optional(string)) // ... guess what it'll be?
|
|
585
602
|
})
|
|
603
|
+
|
|
604
|
+
const r1 = validate(o1, something)
|
|
605
|
+
// here "r1" will have a shape like "{ foo: string, bar?: number | undefined }"
|
|
606
|
+
|
|
607
|
+
const o2 = arrayOf(optional(string)) // array members will be "string | undefined"
|
|
608
|
+
const r2 = validate(o2, something)
|
|
609
|
+
// here "r2" will have a shape like "(string | undefined)[]"
|
|
586
610
|
```
|
|
587
611
|
|
|
588
612
|
|
package/dist/dts-generator.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -16,7 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
17
|
}
|
|
17
18
|
return to;
|
|
18
19
|
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
20
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
29
|
|
|
22
30
|
// src/dts-generator.ts
|
|
@@ -30,7 +38,6 @@ var import_typescript = __toESM(require("typescript"));
|
|
|
30
38
|
var import_index = require("./index.js");
|
|
31
39
|
var generators = /* @__PURE__ */ new Map();
|
|
32
40
|
function registerTypeGenerator(validator, generator) {
|
|
33
|
-
(0, import_index.assertSchema)(validator.prototype instanceof import_index.Validator, "Not a `Validator` class");
|
|
34
41
|
generators.set(validator, generator);
|
|
35
42
|
}
|
|
36
43
|
function generateTypes(validations) {
|
|
@@ -50,16 +57,20 @@ function generateTypes(validations) {
|
|
|
50
57
|
}
|
|
51
58
|
const type = generateTypeNode(validator, referenceable);
|
|
52
59
|
const modifiers = [import_typescript.default.factory.createModifier(import_typescript.default.SyntaxKind.ExportKeyword)];
|
|
53
|
-
const decl = import_typescript.default.factory.createTypeAliasDeclaration(
|
|
60
|
+
const decl = import_typescript.default.factory.createTypeAliasDeclaration(modifiers, name, [], type);
|
|
54
61
|
types.push(decl);
|
|
55
62
|
}
|
|
56
|
-
return import_typescript.default.createPrinter().printList(
|
|
63
|
+
return import_typescript.default.createPrinter().printList(
|
|
64
|
+
import_typescript.default.ListFormat.SourceFileStatements,
|
|
65
|
+
import_typescript.default.factory.createNodeArray(types),
|
|
66
|
+
import_typescript.default.createSourceFile("types.d.ts", "", import_typescript.default.ScriptTarget.Latest)
|
|
67
|
+
);
|
|
57
68
|
}
|
|
58
69
|
function generateTypeNode(validator, references) {
|
|
59
70
|
const reference = references.get(validator);
|
|
60
71
|
if (reference)
|
|
61
72
|
return import_typescript.default.factory.createTypeReferenceNode(reference);
|
|
62
|
-
const generator = generators.get(validator.constructor);
|
|
73
|
+
const generator = generators.get(validator) || generators.get(validator.constructor);
|
|
63
74
|
(0, import_index.assertSchema)(!!generator, `Type generator for "${validator.constructor.name}" not found`);
|
|
64
75
|
return generator(validator, references);
|
|
65
76
|
}
|
|
@@ -70,8 +81,18 @@ var numberType = import_typescript.default.factory.createKeywordTypeNode(import_
|
|
|
70
81
|
var neverType = import_typescript.default.factory.createKeywordTypeNode(import_typescript.default.SyntaxKind.NeverKeyword);
|
|
71
82
|
var stringType = import_typescript.default.factory.createKeywordTypeNode(import_typescript.default.SyntaxKind.StringKeyword);
|
|
72
83
|
var undefinedType = import_typescript.default.factory.createKeywordTypeNode(import_typescript.default.SyntaxKind.UndefinedKeyword);
|
|
73
|
-
var recordType = import_typescript.default.factory.createMappedTypeNode(
|
|
74
|
-
|
|
84
|
+
var recordType = import_typescript.default.factory.createMappedTypeNode(
|
|
85
|
+
void 0,
|
|
86
|
+
// readonly
|
|
87
|
+
import_typescript.default.factory.createTypeParameterDeclaration([], "key", stringType),
|
|
88
|
+
void 0,
|
|
89
|
+
// name type
|
|
90
|
+
void 0,
|
|
91
|
+
// question token
|
|
92
|
+
anyType,
|
|
93
|
+
// type of the mapped key
|
|
94
|
+
void 0
|
|
95
|
+
);
|
|
75
96
|
var optionalKeyword = import_typescript.default.factory.createToken(import_typescript.default.SyntaxKind.QuestionToken);
|
|
76
97
|
registerTypeGenerator(import_index.AnyValidator, () => anyType);
|
|
77
98
|
registerTypeGenerator(import_index.AnyArrayValidator, () => anyArrayType);
|
|
@@ -79,8 +100,17 @@ registerTypeGenerator(import_index.AnyNumberValidator, () => numberType);
|
|
|
79
100
|
registerTypeGenerator(import_index.AnyObjectValidator, () => recordType);
|
|
80
101
|
registerTypeGenerator(import_index.AnyStringValidator, () => stringType);
|
|
81
102
|
registerTypeGenerator(import_index.BooleanValidator, () => booleanType);
|
|
103
|
+
registerTypeGenerator(import_index.NeverValidator, () => neverType);
|
|
82
104
|
registerTypeGenerator(import_index.DateValidator, () => import_typescript.default.factory.createTypeReferenceNode("Date"));
|
|
83
105
|
registerTypeGenerator(import_index.URLValidator, () => import_typescript.default.factory.createTypeReferenceNode("URL"));
|
|
106
|
+
registerTypeGenerator(import_index.any, () => anyType);
|
|
107
|
+
registerTypeGenerator(import_index.array, () => anyArrayType);
|
|
108
|
+
registerTypeGenerator(import_index.number, () => numberType);
|
|
109
|
+
registerTypeGenerator(import_index.object, () => recordType);
|
|
110
|
+
registerTypeGenerator(import_index.string, () => stringType);
|
|
111
|
+
registerTypeGenerator(import_index.boolean, () => booleanType);
|
|
112
|
+
registerTypeGenerator(import_index.date, () => import_typescript.default.factory.createTypeReferenceNode("Date"));
|
|
113
|
+
registerTypeGenerator(import_index.url, () => import_typescript.default.factory.createTypeReferenceNode("URL"));
|
|
84
114
|
registerTypeGenerator(import_index.ArrayValidator, (validator, references) => {
|
|
85
115
|
const itemType = generateTypeNode(validator.items, references);
|
|
86
116
|
return import_typescript.default.factory.createArrayTypeNode(itemType);
|
|
@@ -97,6 +127,10 @@ registerTypeGenerator(import_index.NumberValidator, (validator) => {
|
|
|
97
127
|
const literal = import_typescript.default.factory.createTypeLiteralNode([signature]);
|
|
98
128
|
return import_typescript.default.factory.createIntersectionTypeNode([numberType, literal]);
|
|
99
129
|
});
|
|
130
|
+
registerTypeGenerator(import_index.OptionalValidator, (validator, references) => {
|
|
131
|
+
const type = generateTypeNode(validator.validator, references);
|
|
132
|
+
return import_typescript.default.factory.createUnionTypeNode([type, undefinedType]);
|
|
133
|
+
});
|
|
100
134
|
registerTypeGenerator(import_index.StringValidator, (validator) => {
|
|
101
135
|
if (!validator.brand)
|
|
102
136
|
return stringType;
|
|
@@ -129,8 +163,8 @@ registerTypeGenerator(import_index.TupleValidator, (validator, references) => {
|
|
|
129
163
|
const types = members.slice(first, next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
|
|
130
164
|
const after = members.slice(next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
|
|
131
165
|
const union = import_typescript.default.factory.createUnionTypeNode(types);
|
|
132
|
-
const
|
|
133
|
-
const rest = import_typescript.default.factory.createRestTypeNode(
|
|
166
|
+
const array2 = import_typescript.default.factory.createArrayTypeNode(union);
|
|
167
|
+
const rest = import_typescript.default.factory.createRestTypeNode(array2);
|
|
134
168
|
return import_typescript.default.factory.createTupleTypeNode([...before, rest, ...after]);
|
|
135
169
|
});
|
|
136
170
|
registerTypeGenerator(import_index.AllOfValidator, (validator, references) => {
|
|
@@ -143,16 +177,32 @@ registerTypeGenerator(import_index.OneOfValidator, (validator, references) => {
|
|
|
143
177
|
});
|
|
144
178
|
registerTypeGenerator(import_index.ObjectValidator, (validator, references) => {
|
|
145
179
|
const properties = [];
|
|
146
|
-
for (const [key,
|
|
147
|
-
const
|
|
148
|
-
const
|
|
149
|
-
const signature = import_typescript.default.factory.createPropertySignature(
|
|
180
|
+
for (const [key, valueValidator] of validator.validators.entries()) {
|
|
181
|
+
const type = generateTypeNode(valueValidator, references);
|
|
182
|
+
const optional = valueValidator.optional;
|
|
183
|
+
const signature = import_typescript.default.factory.createPropertySignature(
|
|
184
|
+
void 0,
|
|
185
|
+
key,
|
|
186
|
+
optional ? optionalKeyword : void 0,
|
|
187
|
+
type
|
|
188
|
+
);
|
|
150
189
|
properties.push(signature);
|
|
151
190
|
}
|
|
152
191
|
if (validator.additionalProperties) {
|
|
153
192
|
const propertyType = generateTypeNode(validator.additionalProperties, references);
|
|
154
193
|
const optionalPropertyType = import_typescript.default.factory.createUnionTypeNode([propertyType, undefinedType]);
|
|
155
|
-
const extra = import_typescript.default.factory.createMappedTypeNode(
|
|
194
|
+
const extra = import_typescript.default.factory.createMappedTypeNode(
|
|
195
|
+
void 0,
|
|
196
|
+
// readonly
|
|
197
|
+
import_typescript.default.factory.createTypeParameterDeclaration([], "key", stringType),
|
|
198
|
+
void 0,
|
|
199
|
+
// name type
|
|
200
|
+
void 0,
|
|
201
|
+
// question token
|
|
202
|
+
optionalPropertyType,
|
|
203
|
+
// (type | undefined)
|
|
204
|
+
void 0
|
|
205
|
+
);
|
|
156
206
|
if (properties.length == 0)
|
|
157
207
|
return extra;
|
|
158
208
|
const type = import_typescript.default.factory.createTypeLiteralNode(properties);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/dts-generator.ts"],
|
|
4
|
-
"mappings": "
|
|
5
|
-
"names": []
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["ts", "count", "first", "next", "types", "validator", "array"]
|
|
6
6
|
}
|
package/dist/dts-generator.mjs
CHANGED
|
@@ -2,28 +2,36 @@
|
|
|
2
2
|
import ts from "typescript";
|
|
3
3
|
import {
|
|
4
4
|
AllOfValidator,
|
|
5
|
+
any,
|
|
5
6
|
AnyArrayValidator,
|
|
6
7
|
AnyNumberValidator,
|
|
7
8
|
AnyObjectValidator,
|
|
8
9
|
AnyStringValidator,
|
|
9
10
|
AnyValidator,
|
|
11
|
+
array,
|
|
10
12
|
ArrayValidator,
|
|
11
13
|
assertSchema,
|
|
14
|
+
boolean,
|
|
12
15
|
BooleanValidator,
|
|
13
16
|
ConstantValidator,
|
|
17
|
+
date,
|
|
14
18
|
DateValidator,
|
|
15
19
|
getValidator,
|
|
20
|
+
NeverValidator,
|
|
21
|
+
number,
|
|
16
22
|
NumberValidator,
|
|
23
|
+
object,
|
|
17
24
|
ObjectValidator,
|
|
18
25
|
OneOfValidator,
|
|
26
|
+
OptionalValidator,
|
|
27
|
+
string,
|
|
19
28
|
StringValidator,
|
|
20
29
|
TupleValidator,
|
|
21
|
-
|
|
22
|
-
|
|
30
|
+
url,
|
|
31
|
+
URLValidator
|
|
23
32
|
} from "./index.mjs";
|
|
24
33
|
var generators = /* @__PURE__ */ new Map();
|
|
25
34
|
function registerTypeGenerator(validator, generator) {
|
|
26
|
-
assertSchema(validator.prototype instanceof Validator, "Not a `Validator` class");
|
|
27
35
|
generators.set(validator, generator);
|
|
28
36
|
}
|
|
29
37
|
function generateTypes(validations) {
|
|
@@ -43,16 +51,20 @@ function generateTypes(validations) {
|
|
|
43
51
|
}
|
|
44
52
|
const type = generateTypeNode(validator, referenceable);
|
|
45
53
|
const modifiers = [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)];
|
|
46
|
-
const decl = ts.factory.createTypeAliasDeclaration(
|
|
54
|
+
const decl = ts.factory.createTypeAliasDeclaration(modifiers, name, [], type);
|
|
47
55
|
types.push(decl);
|
|
48
56
|
}
|
|
49
|
-
return ts.createPrinter().printList(
|
|
57
|
+
return ts.createPrinter().printList(
|
|
58
|
+
ts.ListFormat.SourceFileStatements,
|
|
59
|
+
ts.factory.createNodeArray(types),
|
|
60
|
+
ts.createSourceFile("types.d.ts", "", ts.ScriptTarget.Latest)
|
|
61
|
+
);
|
|
50
62
|
}
|
|
51
63
|
function generateTypeNode(validator, references) {
|
|
52
64
|
const reference = references.get(validator);
|
|
53
65
|
if (reference)
|
|
54
66
|
return ts.factory.createTypeReferenceNode(reference);
|
|
55
|
-
const generator = generators.get(validator.constructor);
|
|
67
|
+
const generator = generators.get(validator) || generators.get(validator.constructor);
|
|
56
68
|
assertSchema(!!generator, `Type generator for "${validator.constructor.name}" not found`);
|
|
57
69
|
return generator(validator, references);
|
|
58
70
|
}
|
|
@@ -63,8 +75,18 @@ var numberType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);
|
|
|
63
75
|
var neverType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword);
|
|
64
76
|
var stringType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
|
|
65
77
|
var undefinedType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword);
|
|
66
|
-
var recordType = ts.factory.createMappedTypeNode(
|
|
67
|
-
|
|
78
|
+
var recordType = ts.factory.createMappedTypeNode(
|
|
79
|
+
void 0,
|
|
80
|
+
// readonly
|
|
81
|
+
ts.factory.createTypeParameterDeclaration([], "key", stringType),
|
|
82
|
+
void 0,
|
|
83
|
+
// name type
|
|
84
|
+
void 0,
|
|
85
|
+
// question token
|
|
86
|
+
anyType,
|
|
87
|
+
// type of the mapped key
|
|
88
|
+
void 0
|
|
89
|
+
);
|
|
68
90
|
var optionalKeyword = ts.factory.createToken(ts.SyntaxKind.QuestionToken);
|
|
69
91
|
registerTypeGenerator(AnyValidator, () => anyType);
|
|
70
92
|
registerTypeGenerator(AnyArrayValidator, () => anyArrayType);
|
|
@@ -72,8 +94,17 @@ registerTypeGenerator(AnyNumberValidator, () => numberType);
|
|
|
72
94
|
registerTypeGenerator(AnyObjectValidator, () => recordType);
|
|
73
95
|
registerTypeGenerator(AnyStringValidator, () => stringType);
|
|
74
96
|
registerTypeGenerator(BooleanValidator, () => booleanType);
|
|
97
|
+
registerTypeGenerator(NeverValidator, () => neverType);
|
|
75
98
|
registerTypeGenerator(DateValidator, () => ts.factory.createTypeReferenceNode("Date"));
|
|
76
99
|
registerTypeGenerator(URLValidator, () => ts.factory.createTypeReferenceNode("URL"));
|
|
100
|
+
registerTypeGenerator(any, () => anyType);
|
|
101
|
+
registerTypeGenerator(array, () => anyArrayType);
|
|
102
|
+
registerTypeGenerator(number, () => numberType);
|
|
103
|
+
registerTypeGenerator(object, () => recordType);
|
|
104
|
+
registerTypeGenerator(string, () => stringType);
|
|
105
|
+
registerTypeGenerator(boolean, () => booleanType);
|
|
106
|
+
registerTypeGenerator(date, () => ts.factory.createTypeReferenceNode("Date"));
|
|
107
|
+
registerTypeGenerator(url, () => ts.factory.createTypeReferenceNode("URL"));
|
|
77
108
|
registerTypeGenerator(ArrayValidator, (validator, references) => {
|
|
78
109
|
const itemType = generateTypeNode(validator.items, references);
|
|
79
110
|
return ts.factory.createArrayTypeNode(itemType);
|
|
@@ -90,6 +121,10 @@ registerTypeGenerator(NumberValidator, (validator) => {
|
|
|
90
121
|
const literal = ts.factory.createTypeLiteralNode([signature]);
|
|
91
122
|
return ts.factory.createIntersectionTypeNode([numberType, literal]);
|
|
92
123
|
});
|
|
124
|
+
registerTypeGenerator(OptionalValidator, (validator, references) => {
|
|
125
|
+
const type = generateTypeNode(validator.validator, references);
|
|
126
|
+
return ts.factory.createUnionTypeNode([type, undefinedType]);
|
|
127
|
+
});
|
|
93
128
|
registerTypeGenerator(StringValidator, (validator) => {
|
|
94
129
|
if (!validator.brand)
|
|
95
130
|
return stringType;
|
|
@@ -122,8 +157,8 @@ registerTypeGenerator(TupleValidator, (validator, references) => {
|
|
|
122
157
|
const types = members.slice(first, next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
|
|
123
158
|
const after = members.slice(next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
|
|
124
159
|
const union = ts.factory.createUnionTypeNode(types);
|
|
125
|
-
const
|
|
126
|
-
const rest = ts.factory.createRestTypeNode(
|
|
160
|
+
const array2 = ts.factory.createArrayTypeNode(union);
|
|
161
|
+
const rest = ts.factory.createRestTypeNode(array2);
|
|
127
162
|
return ts.factory.createTupleTypeNode([...before, rest, ...after]);
|
|
128
163
|
});
|
|
129
164
|
registerTypeGenerator(AllOfValidator, (validator, references) => {
|
|
@@ -136,16 +171,32 @@ registerTypeGenerator(OneOfValidator, (validator, references) => {
|
|
|
136
171
|
});
|
|
137
172
|
registerTypeGenerator(ObjectValidator, (validator, references) => {
|
|
138
173
|
const properties = [];
|
|
139
|
-
for (const [key,
|
|
140
|
-
const
|
|
141
|
-
const
|
|
142
|
-
const signature = ts.factory.createPropertySignature(
|
|
174
|
+
for (const [key, valueValidator] of validator.validators.entries()) {
|
|
175
|
+
const type = generateTypeNode(valueValidator, references);
|
|
176
|
+
const optional = valueValidator.optional;
|
|
177
|
+
const signature = ts.factory.createPropertySignature(
|
|
178
|
+
void 0,
|
|
179
|
+
key,
|
|
180
|
+
optional ? optionalKeyword : void 0,
|
|
181
|
+
type
|
|
182
|
+
);
|
|
143
183
|
properties.push(signature);
|
|
144
184
|
}
|
|
145
185
|
if (validator.additionalProperties) {
|
|
146
186
|
const propertyType = generateTypeNode(validator.additionalProperties, references);
|
|
147
187
|
const optionalPropertyType = ts.factory.createUnionTypeNode([propertyType, undefinedType]);
|
|
148
|
-
const extra = ts.factory.createMappedTypeNode(
|
|
188
|
+
const extra = ts.factory.createMappedTypeNode(
|
|
189
|
+
void 0,
|
|
190
|
+
// readonly
|
|
191
|
+
ts.factory.createTypeParameterDeclaration([], "key", stringType),
|
|
192
|
+
void 0,
|
|
193
|
+
// name type
|
|
194
|
+
void 0,
|
|
195
|
+
// question token
|
|
196
|
+
optionalPropertyType,
|
|
197
|
+
// (type | undefined)
|
|
198
|
+
void 0
|
|
199
|
+
);
|
|
149
200
|
if (properties.length == 0)
|
|
150
201
|
return extra;
|
|
151
202
|
const type = ts.factory.createTypeLiteralNode(properties);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/dts-generator.ts"],
|
|
4
|
-
"mappings": ";AAAA;
|
|
5
|
-
"names": []
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["count", "first", "next", "types", "validator", "array"]
|
|
6
6
|
}
|