justus 0.0.6 → 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 +67 -14
- package/dist/dts-generator.js.map +2 -2
- package/dist/dts-generator.mjs +69 -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 +44 -18
- 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
|
}
|
|
@@ -69,8 +80,19 @@ var booleanType = import_typescript.default.factory.createKeywordTypeNode(import
|
|
|
69
80
|
var numberType = import_typescript.default.factory.createKeywordTypeNode(import_typescript.default.SyntaxKind.NumberKeyword);
|
|
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
|
-
var
|
|
73
|
-
var
|
|
83
|
+
var undefinedType = import_typescript.default.factory.createKeywordTypeNode(import_typescript.default.SyntaxKind.UndefinedKeyword);
|
|
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
|
+
);
|
|
74
96
|
var optionalKeyword = import_typescript.default.factory.createToken(import_typescript.default.SyntaxKind.QuestionToken);
|
|
75
97
|
registerTypeGenerator(import_index.AnyValidator, () => anyType);
|
|
76
98
|
registerTypeGenerator(import_index.AnyArrayValidator, () => anyArrayType);
|
|
@@ -78,8 +100,17 @@ registerTypeGenerator(import_index.AnyNumberValidator, () => numberType);
|
|
|
78
100
|
registerTypeGenerator(import_index.AnyObjectValidator, () => recordType);
|
|
79
101
|
registerTypeGenerator(import_index.AnyStringValidator, () => stringType);
|
|
80
102
|
registerTypeGenerator(import_index.BooleanValidator, () => booleanType);
|
|
103
|
+
registerTypeGenerator(import_index.NeverValidator, () => neverType);
|
|
81
104
|
registerTypeGenerator(import_index.DateValidator, () => import_typescript.default.factory.createTypeReferenceNode("Date"));
|
|
82
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"));
|
|
83
114
|
registerTypeGenerator(import_index.ArrayValidator, (validator, references) => {
|
|
84
115
|
const itemType = generateTypeNode(validator.items, references);
|
|
85
116
|
return import_typescript.default.factory.createArrayTypeNode(itemType);
|
|
@@ -96,6 +127,10 @@ registerTypeGenerator(import_index.NumberValidator, (validator) => {
|
|
|
96
127
|
const literal = import_typescript.default.factory.createTypeLiteralNode([signature]);
|
|
97
128
|
return import_typescript.default.factory.createIntersectionTypeNode([numberType, literal]);
|
|
98
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
|
+
});
|
|
99
134
|
registerTypeGenerator(import_index.StringValidator, (validator) => {
|
|
100
135
|
if (!validator.brand)
|
|
101
136
|
return stringType;
|
|
@@ -128,8 +163,8 @@ registerTypeGenerator(import_index.TupleValidator, (validator, references) => {
|
|
|
128
163
|
const types = members.slice(first, next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
|
|
129
164
|
const after = members.slice(next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
|
|
130
165
|
const union = import_typescript.default.factory.createUnionTypeNode(types);
|
|
131
|
-
const
|
|
132
|
-
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);
|
|
133
168
|
return import_typescript.default.factory.createTupleTypeNode([...before, rest, ...after]);
|
|
134
169
|
});
|
|
135
170
|
registerTypeGenerator(import_index.AllOfValidator, (validator, references) => {
|
|
@@ -142,14 +177,32 @@ registerTypeGenerator(import_index.OneOfValidator, (validator, references) => {
|
|
|
142
177
|
});
|
|
143
178
|
registerTypeGenerator(import_index.ObjectValidator, (validator, references) => {
|
|
144
179
|
const properties = [];
|
|
145
|
-
for (const [key,
|
|
146
|
-
const
|
|
147
|
-
const
|
|
148
|
-
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
|
+
);
|
|
149
189
|
properties.push(signature);
|
|
150
190
|
}
|
|
151
191
|
if (validator.additionalProperties) {
|
|
152
|
-
const
|
|
192
|
+
const propertyType = generateTypeNode(validator.additionalProperties, references);
|
|
193
|
+
const optionalPropertyType = import_typescript.default.factory.createUnionTypeNode([propertyType, undefinedType]);
|
|
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
|
+
);
|
|
153
206
|
if (properties.length == 0)
|
|
154
207
|
return extra;
|
|
155
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
|
}
|
|
@@ -62,8 +74,19 @@ var booleanType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword)
|
|
|
62
74
|
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
|
-
var
|
|
66
|
-
var
|
|
77
|
+
var undefinedType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword);
|
|
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
|
+
);
|
|
67
90
|
var optionalKeyword = ts.factory.createToken(ts.SyntaxKind.QuestionToken);
|
|
68
91
|
registerTypeGenerator(AnyValidator, () => anyType);
|
|
69
92
|
registerTypeGenerator(AnyArrayValidator, () => anyArrayType);
|
|
@@ -71,8 +94,17 @@ registerTypeGenerator(AnyNumberValidator, () => numberType);
|
|
|
71
94
|
registerTypeGenerator(AnyObjectValidator, () => recordType);
|
|
72
95
|
registerTypeGenerator(AnyStringValidator, () => stringType);
|
|
73
96
|
registerTypeGenerator(BooleanValidator, () => booleanType);
|
|
97
|
+
registerTypeGenerator(NeverValidator, () => neverType);
|
|
74
98
|
registerTypeGenerator(DateValidator, () => ts.factory.createTypeReferenceNode("Date"));
|
|
75
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"));
|
|
76
108
|
registerTypeGenerator(ArrayValidator, (validator, references) => {
|
|
77
109
|
const itemType = generateTypeNode(validator.items, references);
|
|
78
110
|
return ts.factory.createArrayTypeNode(itemType);
|
|
@@ -89,6 +121,10 @@ registerTypeGenerator(NumberValidator, (validator) => {
|
|
|
89
121
|
const literal = ts.factory.createTypeLiteralNode([signature]);
|
|
90
122
|
return ts.factory.createIntersectionTypeNode([numberType, literal]);
|
|
91
123
|
});
|
|
124
|
+
registerTypeGenerator(OptionalValidator, (validator, references) => {
|
|
125
|
+
const type = generateTypeNode(validator.validator, references);
|
|
126
|
+
return ts.factory.createUnionTypeNode([type, undefinedType]);
|
|
127
|
+
});
|
|
92
128
|
registerTypeGenerator(StringValidator, (validator) => {
|
|
93
129
|
if (!validator.brand)
|
|
94
130
|
return stringType;
|
|
@@ -121,8 +157,8 @@ registerTypeGenerator(TupleValidator, (validator, references) => {
|
|
|
121
157
|
const types = members.slice(first, next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
|
|
122
158
|
const after = members.slice(next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
|
|
123
159
|
const union = ts.factory.createUnionTypeNode(types);
|
|
124
|
-
const
|
|
125
|
-
const rest = ts.factory.createRestTypeNode(
|
|
160
|
+
const array2 = ts.factory.createArrayTypeNode(union);
|
|
161
|
+
const rest = ts.factory.createRestTypeNode(array2);
|
|
126
162
|
return ts.factory.createTupleTypeNode([...before, rest, ...after]);
|
|
127
163
|
});
|
|
128
164
|
registerTypeGenerator(AllOfValidator, (validator, references) => {
|
|
@@ -135,14 +171,32 @@ registerTypeGenerator(OneOfValidator, (validator, references) => {
|
|
|
135
171
|
});
|
|
136
172
|
registerTypeGenerator(ObjectValidator, (validator, references) => {
|
|
137
173
|
const properties = [];
|
|
138
|
-
for (const [key,
|
|
139
|
-
const
|
|
140
|
-
const
|
|
141
|
-
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
|
+
);
|
|
142
183
|
properties.push(signature);
|
|
143
184
|
}
|
|
144
185
|
if (validator.additionalProperties) {
|
|
145
|
-
const
|
|
186
|
+
const propertyType = generateTypeNode(validator.additionalProperties, references);
|
|
187
|
+
const optionalPropertyType = ts.factory.createUnionTypeNode([propertyType, undefinedType]);
|
|
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
|
+
);
|
|
146
200
|
if (properties.length == 0)
|
|
147
201
|
return extra;
|
|
148
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
|
}
|