justus 0.0.7 → 0.1.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/NOTICE.md +1 -1
- package/README.md +13 -6
- 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 +169 -151
- package/dist/index.js.map +3 -3
- package/dist/index.mjs +163 -150
- package/dist/index.mjs.map +3 -3
- package/dts-generator.d.ts +3 -3
- package/index.d.ts +75 -134
- package/package.json +14 -14
- package/src/dts-generator.ts +39 -17
- package/src/index.ts +3 -1
- 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 +2 -2
- 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 +8 -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)
|
|
@@ -548,7 +549,7 @@ const o2 = object({
|
|
|
548
549
|
|
|
549
550
|
When allowing extra properties, or extending objects, we might want to validate
|
|
550
551
|
the _non-existance_ of a specific property. We can do this setting a property
|
|
551
|
-
to `never
|
|
552
|
+
to `never`.
|
|
552
553
|
|
|
553
554
|
```typescript
|
|
554
555
|
import { allowAdditionalProperties, never, number, object, string } from 'justus'
|
|
@@ -570,19 +571,25 @@ const o3 = object({
|
|
|
570
571
|
} as const)
|
|
571
572
|
```
|
|
572
573
|
|
|
573
|
-
|
|
574
|
+
Optional Validator
|
|
575
|
+
------------------
|
|
574
576
|
|
|
575
|
-
Optional
|
|
577
|
+
Optional properties properties can also be declared in objects, arrays, ...:
|
|
576
578
|
|
|
577
579
|
```typescript
|
|
578
|
-
import { object,
|
|
580
|
+
import { object, arrayOf, optional, string } from 'justus'
|
|
579
581
|
|
|
580
582
|
const o1 = object({
|
|
581
583
|
foo: string, // any string, but must be a string
|
|
582
584
|
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
585
|
})
|
|
586
|
+
|
|
587
|
+
const r1 = validate(o1, something)
|
|
588
|
+
// here "r1" will have a shape like "{ foo: string, bar?: number | undefined }"
|
|
589
|
+
|
|
590
|
+
const o2 = arrayOf(optional(string)) // array members will be "string | undefined"
|
|
591
|
+
const r2 = validate(o2, something)
|
|
592
|
+
// here "r2" will have a shape like "(string | undefined)[]"
|
|
586
593
|
```
|
|
587
594
|
|
|
588
595
|
|
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": ";AAAA,OAAO,QAAQ;AACf;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAsBP,IAAM,aAAa,oBAAI,IAA8C;AAG9D,SAAS,sBACZ,WACA,WACI;AACN,aAAW,IAAI,WAAW,SAAS;AACrC;AAGO,SAAS,cAAc,aAAiD;AAK7E,QAAM,aAAa,oBAAI,IAAuB;AAC9C,QAAM,aAAa,oBAAI,IAAuB;AAE9C,SAAO,QAAQ,WAAW,EAAE,QAAQ,CAAC,CAAE,MAAM,UAAW,MAAM;AAC5D,UAAM,YAAY,aAAa,UAAU;AAEzC,QAAI,CAAE,WAAW,IAAI,SAAS;AAAG,iBAAW,IAAI,WAAW,IAAI;AAC/D,eAAW,IAAI,MAAM,SAAS;AAAA,EAChC,CAAC;AAGD,QAAM,QAAmC,CAAC;AAC1C,aAAW,CAAE,MAAM,SAAU,KAAK,WAAW,QAAQ,GAAG;AAGtD,UAAM,gBAAgB,IAAI,IAAI,UAAU;AACxC,QAAI,cAAc,IAAI,SAAS,MAAM,MAAM;AACzC,oBAAc,OAAO,SAAS;AAAA,IAChC;AAGA,UAAM,OAAO,iBAAiB,WAAW,aAAa;AAGtD,UAAM,YAAY,CAAE,GAAG,QAAQ,eAAe,GAAG,WAAW,aAAa,CAAE;AAC3E,UAAM,OAAO,GAAG,QAAQ,2BAA2B,WAAW,MAAM,CAAC,GAAG,IAAI;AAC5E,UAAM,KAAK,IAAI;AAAA,EACjB;AAGA,SAAO,GAAG,cAAc,EAAE;AAAA,IACtB,GAAG,WAAW;AAAA,IACd,GAAG,QAAQ,gBAAgB,KAAK;AAAA,IAChC,GAAG,iBAAiB,cAAc,IAAI,GAAG,aAAa,MAAM;AAAA,EAAC;AACnE;AAOA,SAAS,iBACL,WACA,YACW;AACb,QAAM,YAAY,WAAW,IAAI,SAAS;AAC1C,MAAI;AAAW,WAAO,GAAG,QAAQ,wBAAwB,SAAS;AAElE,QAAM,YAAY,WAAW,IAAI,SAAS,KAAK,WAAW,IAAI,UAAU,WAAW;AACnF,eAAa,CAAC,CAAE,WAAW,uBAAuB,UAAU,YAAY,iBAAiB;AACzF,SAAO,UAAU,WAAW,UAAU;AACxC;AAMA,IAAM,UAAU,GAAG,QAAQ,sBAAsB,GAAG,WAAW,UAAU;AACzE,IAAM,eAAe,GAAG,QAAQ,oBAAoB,OAAO;AAC3D,IAAM,cAAc,GAAG,QAAQ,sBAAsB,GAAG,WAAW,cAAc;AACjF,IAAM,aAAa,GAAG,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AAC/E,IAAM,YAAY,GAAG,QAAQ,sBAAsB,GAAG,WAAW,YAAY;AAC7E,IAAM,aAAa,GAAG,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AAC/E,IAAM,gBAAgB,GAAG,QAAQ,sBAAsB,GAAG,WAAW,gBAAgB;AACrF,IAAM,aAAa,GAAG,QAAQ;AAAA,EAC1B;AAAA;AAAA,EACA,GAAG,QAAQ,+BAA+B,CAAC,GAAG,OAAO,UAAU;AAAA,EAC/D;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAS;AAGb,IAAM,kBAAkB,GAAG,QAAQ,YAAY,GAAG,WAAW,aAAa;AAO1E,sBAAsB,cAAc,MAAM,OAAO;AACjD,sBAAsB,mBAAmB,MAAM,YAAY;AAC3D,sBAAsB,oBAAoB,MAAM,UAAU;AAC1D,sBAAsB,oBAAoB,MAAM,UAAU;AAC1D,sBAAsB,oBAAoB,MAAM,UAAU;AAC1D,sBAAsB,kBAAkB,MAAM,WAAW;AACzD,sBAAsB,gBAAgB,MAAM,SAAS;AACrD,sBAAsB,eAAe,MAAM,GAAG,QAAQ,wBAAwB,MAAM,CAAC;AACrF,sBAAsB,cAAc,MAAM,GAAG,QAAQ,wBAAwB,KAAK,CAAC;AAEnF,sBAAsB,KAAK,MAAM,OAAO;AACxC,sBAAsB,OAAO,MAAM,YAAY;AAC/C,sBAAsB,QAAQ,MAAM,UAAU;AAC9C,sBAAsB,QAAQ,MAAM,UAAU;AAC9C,sBAAsB,QAAQ,MAAM,UAAU;AAC9C,sBAAsB,SAAS,MAAM,WAAW;AAChD,sBAAsB,MAAM,MAAM,GAAG,QAAQ,wBAAwB,MAAM,CAAC;AAC5E,sBAAsB,KAAK,MAAM,GAAG,QAAQ,wBAAwB,KAAK,CAAC;AAM1E,sBAAsB,gBAAgB,CAAC,WAAW,eAAe;AAC/D,QAAM,WAAW,iBAAiB,UAAU,OAAO,UAAU;AAC7D,SAAO,GAAG,QAAQ,oBAAoB,QAAQ;AAChD,CAAC;AAED,sBAAsB,mBAAmB,CAAC,cAAc;AACtD,QAAM,UACJ,OAAO,UAAU,aAAa,WAAW,GAAG,QAAQ,qBAAqB,UAAU,QAAQ,IAC3F,OAAO,UAAU,aAAa,WAAW,GAAG,QAAQ,oBAAoB,UAAU,QAAQ,IAC1F,UAAU,aAAa,QAAQ,GAAG,QAAQ,YAAY,IACtD,UAAU,aAAa,OAAO,GAAG,QAAQ,WAAW,IACpD,UAAU,aAAa,OAAO,GAAG,QAAQ,WAAW,IACpD;AAEF,eAAa,CAAC,CAAE,SAAS,qBAAqB,UAAU,WAAW;AACnE,SAAO,GAAG,QAAQ,sBAAsB,OAAO;AACjD,CAAC;AAED,sBAAsB,iBAAiB,CAAC,cAA+B;AACrE,MAAI,CAAE,UAAU;AAAO,WAAO;AAE9B,QAAM,YAAY,GAAG,QAAQ,wBAAwB,QAAW,WAAW,UAAU,SAAS,QAAW,SAAS;AAClH,QAAM,UAAU,GAAG,QAAQ,sBAAsB,CAAE,SAAU,CAAC;AAC9D,SAAO,GAAG,QAAQ,2BAA2B,CAAE,YAAY,OAAQ,CAAC;AACtE,CAAC;AAED,sBAAsB,mBAAmB,CAAC,WAA8B,eAAe;AACrF,QAAM,OAAO,iBAAiB,UAAU,WAAW,UAAU;AAC7D,SAAO,GAAG,QAAQ,oBAAoB,CAAE,MAAM,aAAc,CAAC;AAC/D,CAAC;AAED,sBAAsB,iBAAiB,CAAC,cAA+B;AACrE,MAAI,CAAE,UAAU;AAAO,WAAO;AAE9B,QAAM,YAAY,GAAG,QAAQ,wBAAwB,QAAW,WAAW,UAAU,SAAS,QAAW,SAAS;AAClH,QAAM,UAAU,GAAG,QAAQ,sBAAsB,CAAE,SAAU,CAAC;AAC9D,SAAO,GAAG,QAAQ,2BAA2B,CAAE,YAAY,OAAQ,CAAC;AACtE,CAAC;AAED,sBAAsB,gBAAgB,CAAC,WAAgC,eAAe;AACpF,QAAM,UAAU,UAAU;AAG1B,QAAM,EAAE,OAAO,OAAO,KAAK,IACvB,QAAQ,OAAO,CAAC,EAAE,OAAAA,QAAO,OAAAC,QAAO,MAAAC,MAAK,GAAG,EAAE,OAAO,GAAG,MAAM;AACxD,QAAI,CAAE,QAAQ;AACZ,UAAI,IAAID;AAAO,QAAAA,SAAQ;AACvB,MAAAC,QAAO,IAAI;AACX,MAAAF,UAAS;AAAA,IACX;AACA,WAAO,EAAE,OAAAA,QAAO,OAAAC,QAAO,MAAAC,MAAK;AAAA,EAC9B,GAAG,EAAE,OAAO,GAAG,OAAO,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAGpD,MAAI,QAAQ,GAAG;AACb,UAAMC,SAAQ,QAAQ,IAAI,CAAC,EAAE,QAAQ,WAAAC,WAAU,MAAM;AACnD,YAAM,aAAa,iBAAiBA,YAAW,UAAU;AAEzD,UAAI;AAAQ,eAAO,iBAAiBA,YAAW,UAAU;AAEzD,YAAM,YAAY,GAAG,QAAQ,oBAAoB,UAAU;AAC3D,aAAO,GAAG,QAAQ,mBAAmB,SAAS;AAAA,IAChD,CAAC;AAED,WAAO,GAAG,QAAQ,oBAAoBD,MAAK;AAAA,EAC7C;AAIA,QAAM,SAAS,QAAQ,MAAM,GAAG,KAAK,EAChC,IAAI,CAAC,EAAE,WAAAC,WAAU,MAAM,iBAAiBA,YAAW,UAAU,CAAC;AACnE,QAAM,QAAQ,QAAQ,MAAM,OAAO,IAAI,EAClC,IAAI,CAAC,EAAE,WAAAA,WAAU,MAAM,iBAAiBA,YAAW,UAAU,CAAC;AACnE,QAAM,QAAQ,QAAQ,MAAM,IAAI,EAC3B,IAAI,CAAC,EAAE,WAAAA,WAAU,MAAM,iBAAiBA,YAAW,UAAU,CAAC;AAEnE,QAAM,QAAQ,GAAG,QAAQ,oBAAoB,KAAK;AAClD,QAAMC,SAAQ,GAAG,QAAQ,oBAAoB,KAAK;AAClD,QAAM,OAAO,GAAG,QAAQ,mBAAmBA,MAAK;AAEhD,SAAO,GAAG,QAAQ,oBAAoB,CAAE,GAAG,QAAQ,MAAM,GAAG,KAAM,CAAC;AACrE,CAAC;AAED,sBAAsB,gBAAgB,CAAC,WAAW,eAAe;AAC/D,QAAM,UAAU,UAAU,WAAW,IAAI,CAACD,eAAc,iBAAiBA,YAAW,UAAU,CAAC;AAC/F,SAAO,GAAG,QAAQ,2BAA2B,OAAO;AACtD,CAAC;AAED,sBAAsB,gBAAgB,CAAC,WAAW,eAAe;AAC/D,QAAM,UAAU,UAAU,WAAW,IAAI,CAACA,eAAc,iBAAiBA,YAAW,UAAU,CAAC;AAC/F,SAAO,GAAG,QAAQ,oBAAoB,OAAO;AAC/C,CAAC;AAED,sBAAsB,iBAAiB,CAAC,WAAW,eAAe;AAChE,QAAM,aAAqC,CAAC;AAE5C,aAAW,CAAE,KAAK,cAAe,KAAK,UAAU,WAAW,QAAQ,GAAG;AACpE,UAAM,OAAO,iBAAiB,gBAAgB,UAAU;AACxD,UAAM,WAAW,eAAe;AAEhC,UAAM,YAAY,GAAG,QAAQ;AAAA,MACzB;AAAA,MACA;AAAA,MACA,WAAW,kBAAkB;AAAA,MAC7B;AAAA,IAAI;AAER,eAAW,KAAK,SAAS;AAAA,EAC3B;AAEA,MAAI,UAAU,sBAAsB;AAClC,UAAM,eAAe,iBAAiB,UAAU,sBAAsB,UAAU;AAChF,UAAM,uBAAuB,GAAG,QAAQ,oBAAoB,CAAE,cAAc,aAAc,CAAC;AAE3F,UAAM,QAAQ,GAAG,QAAQ;AAAA,MACrB;AAAA;AAAA,MACA,GAAG,QAAQ,+BAA+B,CAAC,GAAG,OAAO,UAAU;AAAA,MAC/D;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,IAAS;AAEb,QAAI,WAAW,UAAU;AAAG,aAAO;AAEnC,UAAM,OAAO,GAAG,QAAQ,sBAAsB,UAAU;AACxD,WAAO,GAAG,QAAQ,2BAA2B,CAAE,MAAM,KAAM,CAAC;AAAA,EAC9D,OAAO;AACL,WAAO,GAAG,QAAQ,sBAAsB,UAAU;AAAA,EACpD;AACF,CAAC;",
|
|
5
|
+
"names": ["count", "first", "next", "types", "validator", "array"]
|
|
6
6
|
}
|