ts-runtime-validation 1.1.4 → 1.2.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/README.md +30 -3
- package/dist/SchemaGenerator.js +5 -22
- package/dist/SchemaGenerator.js.map +1 -1
- package/package.json +1 -1
- package/src/SchemaGenerator.ts +5 -24
package/README.md
CHANGED
|
@@ -6,16 +6,25 @@ Get bulletproof type validation based off typescript interfaces without any extr
|
|
|
6
6
|
|
|
7
7
|
## How?
|
|
8
8
|
|
|
9
|
-
This is a code generator that is designed to run as a yarn / npm script. By default scans your source directory for files ending in the provided glob pattern. By default: `*.jsonschema.{ts,tsx}`. The output will create three files:
|
|
9
|
+
This is a code generator that is designed to run as a yarn / npm script. By default scans your source directory for files ending in the provided glob pattern. It will generate types based off exported type aliases and typescript interfaces. By default: `*.jsonschema.{ts,tsx}`. The output will create three files:
|
|
10
10
|
|
|
11
11
|
1. `./src/ts-runtime-validation/validation.schema.json` - containing the [jsonschema](http://json-schema.org/) types
|
|
12
12
|
1. `./src/SchemaDefinition.ts` - containing the typescript.
|
|
13
|
-
1. `./src/
|
|
13
|
+
1. `./src/isValidSchema.ts` - containing a type guard type inferring helper method (intended for consumption in your code base - examples below)
|
|
14
14
|
|
|
15
15
|
## Footnote
|
|
16
16
|
|
|
17
17
|
The helper file assumes you have [ajv-validator](https://github.com/ajv-validator/ajv) peer dependency installed. Since this is only a code generation tool this package can be installed as a dev dependency.
|
|
18
18
|
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# yarn
|
|
23
|
+
yarn add --dev ts-runtime-validation
|
|
24
|
+
# npm
|
|
25
|
+
npm install --dev ts-runtime-validation
|
|
26
|
+
```
|
|
27
|
+
|
|
19
28
|
## CLI usage
|
|
20
29
|
|
|
21
30
|
Ensure your project files containing the schemas you want to validate end with the prefix `.jsonschema.ts`
|
|
@@ -32,13 +41,31 @@ Options:
|
|
|
32
41
|
-h, --help display help for command
|
|
33
42
|
```
|
|
34
43
|
|
|
44
|
+
## npm script usage
|
|
45
|
+
|
|
46
|
+
The intended use for ts-runtime-validation is as a npm script. Here it can also be tweaked to watch (eg. using nodemon)
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"scripts": {
|
|
51
|
+
"generate-types": "ts-runtime-validation"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"ts-runtime-validation": "^1.2.0"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
35
59
|
## Example usage of generated ts type validation
|
|
36
60
|
|
|
37
61
|
```typescript
|
|
38
|
-
import { isValidSchema } from "./.ts-runtime-validation/
|
|
62
|
+
import { isValidSchema } from "./.ts-runtime-validation/isValidSchema"; // this is autogenerated by the CLI as a helper file
|
|
39
63
|
|
|
40
64
|
if (isValidSchema(data, "#/definitions/ITypeA")) {
|
|
41
65
|
// variable: data in this block will have typings for ITypeA
|
|
66
|
+
} else {
|
|
67
|
+
// type is invalid and not known here
|
|
68
|
+
throw new Error("Failed to validate payload");
|
|
42
69
|
}
|
|
43
70
|
```
|
|
44
71
|
|
package/dist/SchemaGenerator.js
CHANGED
|
@@ -62,7 +62,7 @@ class SchemaGenerator {
|
|
|
62
62
|
this.outputPath = path_1.default.join(this.options.rootPath, this.options.output);
|
|
63
63
|
this.jsonSchemaOutputFile = path_1.default.join(this.options.rootPath, this.options.output, validationSchemaFileName);
|
|
64
64
|
this.tsSchemaDefinitionOutputFile = path_1.default.join(this.options.rootPath, this.options.output, schemaDefinitionFileName);
|
|
65
|
-
this.isValidSchemaOutputFile = path_1.default.join(this.options.rootPath, this.options.output, "
|
|
65
|
+
this.isValidSchemaOutputFile = path_1.default.join(this.options.rootPath, this.options.output, "isValidSchema.ts");
|
|
66
66
|
this.Generate = () => __awaiter(this, void 0, void 0, function* () {
|
|
67
67
|
const { helpers, glob } = this.options;
|
|
68
68
|
const fileList = yield this.getMatchingFiles();
|
|
@@ -72,7 +72,6 @@ class SchemaGenerator {
|
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
74
|
const fileSchemas = yield this.getJsonSchemasForFiles(fileList);
|
|
75
|
-
console.log(`Generating validation schema(s)`);
|
|
76
75
|
if (fileSchemas.size === 0) {
|
|
77
76
|
console.log(`Aborting - no types found: ${glob}`);
|
|
78
77
|
return;
|
|
@@ -115,19 +114,6 @@ class SchemaGenerator {
|
|
|
115
114
|
});
|
|
116
115
|
return schemaMap;
|
|
117
116
|
});
|
|
118
|
-
// private getFileSymbols = (fileList: Array<string>) => {
|
|
119
|
-
// const symbolMap = new Map<string, Array<string>>();
|
|
120
|
-
// const project = new Project(defaultTsMorphProjectSettings);
|
|
121
|
-
// fileList.forEach((file) => {
|
|
122
|
-
// console.log(file);
|
|
123
|
-
// const sourceFile = project.addSourceFileAtPath(file);
|
|
124
|
-
// const aliases = sourceFile.getTypeAliases();
|
|
125
|
-
// aliases.forEach((alias) => {
|
|
126
|
-
// console.log(alias.getName());
|
|
127
|
-
// });
|
|
128
|
-
// });
|
|
129
|
-
// return symbolMap;
|
|
130
|
-
// };
|
|
131
117
|
this.getSchemaVersion = (schemaMap) => {
|
|
132
118
|
var _a;
|
|
133
119
|
const firstEntry = schemaMap.values().next().value;
|
|
@@ -189,6 +175,7 @@ class SchemaGenerator {
|
|
|
189
175
|
sourceFile.addImportDeclaration({ namedImports, moduleSpecifier: importPath });
|
|
190
176
|
});
|
|
191
177
|
sourceFile.addVariableStatement({
|
|
178
|
+
isExported: true,
|
|
192
179
|
declarationKind: ts_morph_1.VariableDeclarationKind.Const,
|
|
193
180
|
declarations: [
|
|
194
181
|
{
|
|
@@ -207,14 +194,11 @@ class SchemaGenerator {
|
|
|
207
194
|
sourceFile.addInterface({
|
|
208
195
|
kind: ts_morph_1.StructureKind.Interface,
|
|
209
196
|
name: "ISchema",
|
|
210
|
-
isExported:
|
|
197
|
+
isExported: true,
|
|
211
198
|
properties: symbols.map((symbol) => {
|
|
212
199
|
return { name: `readonly ["#/definitions/${symbol}"]`, type: symbol };
|
|
213
200
|
}),
|
|
214
201
|
});
|
|
215
|
-
sourceFile.addExportDeclaration({
|
|
216
|
-
namedExports: ["schemas", "ISchema"],
|
|
217
|
-
});
|
|
218
202
|
yield project.save();
|
|
219
203
|
});
|
|
220
204
|
this.writeValidatorFunction = () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -227,6 +211,7 @@ class SchemaGenerator {
|
|
|
227
211
|
moduleSpecifier: `./${path_1.default.parse(schemaDefinitionFileName).name}`,
|
|
228
212
|
});
|
|
229
213
|
sourceFile.addVariableStatement({
|
|
214
|
+
isExported: true,
|
|
230
215
|
declarationKind: ts_morph_1.VariableDeclarationKind.Const,
|
|
231
216
|
declarations: [
|
|
232
217
|
{
|
|
@@ -240,6 +225,7 @@ class SchemaGenerator {
|
|
|
240
225
|
});
|
|
241
226
|
sourceFile.addVariableStatement({
|
|
242
227
|
declarationKind: ts_morph_1.VariableDeclarationKind.Const,
|
|
228
|
+
isExported: true,
|
|
243
229
|
declarations: [
|
|
244
230
|
{
|
|
245
231
|
name: "isValidSchema",
|
|
@@ -252,9 +238,6 @@ class SchemaGenerator {
|
|
|
252
238
|
},
|
|
253
239
|
],
|
|
254
240
|
});
|
|
255
|
-
sourceFile.addExportDeclaration({
|
|
256
|
-
namedExports: ["validator", "isValidSchema"],
|
|
257
|
-
});
|
|
258
241
|
yield project.save();
|
|
259
242
|
});
|
|
260
243
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../src/SchemaGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA4B;AAE5B,4CAAoB;AACpB,0DAAkC;AAClC,gDAAwB;AACxB,uCAUkB;AAClB,8DAAgD;AAGhD,MAAM,6BAA6B,GAAmB;IAClD,oBAAoB,EAAE;QAClB,eAAe,EAAE,0BAAe,CAAC,UAAU;QAC3C,WAAW,EAAE,sBAAW,CAAC,QAAQ;QACjC,SAAS,EAAE,oBAAS,CAAC,MAAM;QAC3B,+BAA+B,EAAE,KAAK;QACtC,iBAAiB,EAAE,IAAI;KAC1B;CACJ,CAAC;AAEF,MAAM,wBAAwB,GAA4B;IACtD,SAAS,EAAE,IAAI;CAClB,CAAC;AAEF,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAEvD,MAAa,eAAe;IAMxB,YAA2B,OAAwB;QAAxB,YAAO,GAAP,OAAO,CAAiB;QAL3C,eAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnE,yBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QACvG,iCAA4B,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAC/G,4BAAuB,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAIrG,aAAQ,GAAG,GAAS,EAAE;YACzB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE/C,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,CAAC,MAAM,iBAAiB,CAAC,CAAC;YACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,OAAO,CAAC,GAAG,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;gBAC5D,OAAO;aACV;YACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YAEhE,
|
|
1
|
+
{"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../src/SchemaGenerator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/SchemaGenerator.ts
CHANGED
|
@@ -38,7 +38,7 @@ export class SchemaGenerator {
|
|
|
38
38
|
private outputPath = path.join(this.options.rootPath, this.options.output);
|
|
39
39
|
private jsonSchemaOutputFile = path.join(this.options.rootPath, this.options.output, validationSchemaFileName);
|
|
40
40
|
private tsSchemaDefinitionOutputFile = path.join(this.options.rootPath, this.options.output, schemaDefinitionFileName);
|
|
41
|
-
private isValidSchemaOutputFile = path.join(this.options.rootPath, this.options.output, "
|
|
41
|
+
private isValidSchemaOutputFile = path.join(this.options.rootPath, this.options.output, "isValidSchema.ts");
|
|
42
42
|
|
|
43
43
|
public constructor(private options: ICommandOptions) {}
|
|
44
44
|
|
|
@@ -53,7 +53,6 @@ export class SchemaGenerator {
|
|
|
53
53
|
}
|
|
54
54
|
const fileSchemas = await this.getJsonSchemasForFiles(fileList);
|
|
55
55
|
|
|
56
|
-
console.log(`Generating validation schema(s)`);
|
|
57
56
|
if (fileSchemas.size === 0) {
|
|
58
57
|
console.log(`Aborting - no types found: ${glob}`);
|
|
59
58
|
return;
|
|
@@ -100,20 +99,6 @@ export class SchemaGenerator {
|
|
|
100
99
|
return schemaMap;
|
|
101
100
|
};
|
|
102
101
|
|
|
103
|
-
// private getFileSymbols = (fileList: Array<string>) => {
|
|
104
|
-
// const symbolMap = new Map<string, Array<string>>();
|
|
105
|
-
// const project = new Project(defaultTsMorphProjectSettings);
|
|
106
|
-
// fileList.forEach((file) => {
|
|
107
|
-
// console.log(file);
|
|
108
|
-
// const sourceFile = project.addSourceFileAtPath(file);
|
|
109
|
-
// const aliases = sourceFile.getTypeAliases();
|
|
110
|
-
// aliases.forEach((alias) => {
|
|
111
|
-
// console.log(alias.getName());
|
|
112
|
-
// });
|
|
113
|
-
// });
|
|
114
|
-
// return symbolMap;
|
|
115
|
-
// };
|
|
116
|
-
|
|
117
102
|
private getSchemaVersion = (schemaMap: Map<string, Schema>) => {
|
|
118
103
|
const firstEntry = schemaMap.values().next().value;
|
|
119
104
|
return firstEntry["$schema"] ?? "";
|
|
@@ -183,6 +168,7 @@ export class SchemaGenerator {
|
|
|
183
168
|
});
|
|
184
169
|
|
|
185
170
|
sourceFile.addVariableStatement({
|
|
171
|
+
isExported: true,
|
|
186
172
|
declarationKind: VariableDeclarationKind.Const,
|
|
187
173
|
declarations: [
|
|
188
174
|
{
|
|
@@ -202,15 +188,12 @@ export class SchemaGenerator {
|
|
|
202
188
|
sourceFile.addInterface({
|
|
203
189
|
kind: StructureKind.Interface,
|
|
204
190
|
name: "ISchema",
|
|
205
|
-
isExported:
|
|
191
|
+
isExported: true,
|
|
206
192
|
properties: symbols.map((symbol) => {
|
|
207
193
|
return { name: `readonly ["#/definitions/${symbol}"]`, type: symbol };
|
|
208
194
|
}),
|
|
209
195
|
});
|
|
210
196
|
|
|
211
|
-
sourceFile.addExportDeclaration({
|
|
212
|
-
namedExports: ["schemas", "ISchema"],
|
|
213
|
-
});
|
|
214
197
|
await project.save();
|
|
215
198
|
};
|
|
216
199
|
|
|
@@ -224,6 +207,7 @@ export class SchemaGenerator {
|
|
|
224
207
|
moduleSpecifier: `./${path.parse(schemaDefinitionFileName).name}`,
|
|
225
208
|
});
|
|
226
209
|
sourceFile.addVariableStatement({
|
|
210
|
+
isExported: true,
|
|
227
211
|
declarationKind: VariableDeclarationKind.Const,
|
|
228
212
|
declarations: [
|
|
229
213
|
{
|
|
@@ -238,6 +222,7 @@ export class SchemaGenerator {
|
|
|
238
222
|
|
|
239
223
|
sourceFile.addVariableStatement({
|
|
240
224
|
declarationKind: VariableDeclarationKind.Const,
|
|
225
|
+
isExported: true,
|
|
241
226
|
declarations: [
|
|
242
227
|
{
|
|
243
228
|
name: "isValidSchema",
|
|
@@ -250,10 +235,6 @@ export class SchemaGenerator {
|
|
|
250
235
|
},
|
|
251
236
|
],
|
|
252
237
|
});
|
|
253
|
-
|
|
254
|
-
sourceFile.addExportDeclaration({
|
|
255
|
-
namedExports: ["validator", "isValidSchema"],
|
|
256
|
-
});
|
|
257
238
|
await project.save();
|
|
258
239
|
};
|
|
259
240
|
}
|