Skip to content

Commit a62cb19

Browse files
author
Robert Kesterson
committed
Removed invalid tokens from generic type names
1 parent 5d7b12f commit a62cb19

File tree

12 files changed

+205
-125
lines changed

12 files changed

+205
-125
lines changed

package.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
},
5757
"devDependencies": {
5858
"@types/chai": "^4.2.21",
59+
"@types/lodash": "^4.14.178",
5960
"@types/glob": "^7.1.4",
6061
"@types/mocha": "^9.0.0",
6162
"ajv": "^8.6.3",
@@ -64,7 +65,9 @@
6465
"mocha": "^9.1.3",
6566
"prettier": "^2.4.1",
6667
"source-map-support": "^0.5.20",
67-
"tslint": "^6.1.3"
68+
"tslint": "^6.1.3",
69+
"jsonpath-plus": "^6.0.1",
70+
"lodash": "^4.17.21"
6871
},
6972
"scripts": {
7073
"prepare": "tsc",

test/programs/generic-anonymous/schema.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "http://json-schema.org/draft-07/schema#",
33
"definitions": {
4-
"MyGeneric<number,string>": {
4+
"MyGeneric_number_string_": {
55
"properties": {
66
"a": {
77
"type": "number"
@@ -16,7 +16,7 @@
1616
],
1717
"type": "object"
1818
},
19-
"MyGeneric<string,number>": {
19+
"MyGeneric_string_number_": {
2020
"properties": {
2121
"a": {
2222
"type": "string"
@@ -34,10 +34,10 @@
3434
},
3535
"properties": {
3636
"value1": {
37-
"$ref": "#/definitions/MyGeneric<string,number>"
37+
"$ref": "#/definitions/MyGeneric_string_number_"
3838
},
3939
"value2": {
40-
"$ref": "#/definitions/MyGeneric<number,string>"
40+
"$ref": "#/definitions/MyGeneric_number_string_"
4141
}
4242
},
4343
"required": [

test/programs/generic-hell/schema.json

+18-18
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "http://json-schema.org/draft-07/schema#",
33
"definitions": {
4-
"GenericA<\"alias\">": {
4+
"GenericA_\"alias\"_": {
55
"properties": {
66
"a": {
77
"enum": [
@@ -15,7 +15,7 @@
1515
],
1616
"type": "object"
1717
},
18-
"GenericA<1>": {
18+
"GenericA_1_": {
1919
"properties": {
2020
"a": {
2121
"enum": [
@@ -29,7 +29,7 @@
2929
],
3030
"type": "object"
3131
},
32-
"GenericA<string>": {
32+
"GenericA_string_": {
3333
"properties": {
3434
"a": {
3535
"type": "string"
@@ -40,7 +40,7 @@
4040
],
4141
"type": "object"
4242
},
43-
"GenericC<\"alias\">": {
43+
"GenericC_\"alias\"_": {
4444
"properties": {
4545
"c": {
4646
"enum": [
@@ -54,7 +54,7 @@
5454
],
5555
"type": "object"
5656
},
57-
"GenericC<2>": {
57+
"GenericC_2_": {
5858
"properties": {
5959
"c": {
6060
"enum": [
@@ -68,29 +68,29 @@
6868
],
6969
"type": "object"
7070
},
71-
"GenericC<GenericA<string>>": {
71+
"GenericC_GenericA_string__": {
7272
"properties": {
7373
"c": {
74-
"$ref": "#/definitions/GenericA<string>"
74+
"$ref": "#/definitions/GenericA_string_"
7575
}
7676
},
7777
"required": [
7878
"c"
7979
],
8080
"type": "object"
8181
},
82-
"GenericC<GenericC<GenericA<string>>>": {
82+
"GenericC_GenericC_GenericA_string___": {
8383
"properties": {
8484
"c": {
85-
"$ref": "#/definitions/GenericC<GenericA<string>>"
85+
"$ref": "#/definitions/GenericC_GenericA_string__"
8686
}
8787
},
8888
"required": [
8989
"c"
9090
],
9191
"type": "object"
9292
},
93-
"SomeGeneric<\"alias\",\"alias\">": {
93+
"SomeGeneric_\"alias\",\"alias\"_": {
9494
"properties": {
9595
"a": {
9696
"enum": [
@@ -105,10 +105,10 @@
105105
"type": "string"
106106
},
107107
"c": {
108-
"$ref": "#/definitions/GenericA<\"alias\">"
108+
"$ref": "#/definitions/GenericA_\"alias\"_"
109109
},
110110
"d": {
111-
"$ref": "#/definitions/GenericC<\"alias\">"
111+
"$ref": "#/definitions/GenericC_\"alias\"_"
112112
}
113113
},
114114
"required": [
@@ -119,7 +119,7 @@
119119
],
120120
"type": "object"
121121
},
122-
"SomeGeneric<1,2>": {
122+
"SomeGeneric_1_2_": {
123123
"properties": {
124124
"a": {
125125
"enum": [
@@ -134,10 +134,10 @@
134134
"type": "number"
135135
},
136136
"c": {
137-
"$ref": "#/definitions/GenericA<1>"
137+
"$ref": "#/definitions/GenericA_1_"
138138
},
139139
"d": {
140-
"$ref": "#/definitions/GenericC<2>"
140+
"$ref": "#/definitions/GenericC_2_"
141141
}
142142
},
143143
"required": [
@@ -154,13 +154,13 @@
154154
"type": "number"
155155
},
156156
"c": {
157-
"$ref": "#/definitions/GenericC<GenericC<GenericA<string>>>"
157+
"$ref": "#/definitions/GenericC_GenericC_GenericA_string___"
158158
},
159159
"someAlias": {
160-
"$ref": "#/definitions/SomeGeneric<\"alias\",\"alias\">"
160+
"$ref": "#/definitions/SomeGeneric_\"alias\",\"alias\"_"
161161
},
162162
"someGeneric": {
163-
"$ref": "#/definitions/SomeGeneric<1,2>"
163+
"$ref": "#/definitions/SomeGeneric_1_2_"
164164
}
165165
},
166166
"required": [

test/programs/generic-multiargs/schema.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "http://json-schema.org/draft-07/schema#",
33
"definitions": {
4-
"MyGeneric<number,string>": {
4+
"MyGeneric_number_string_": {
55
"properties": {
66
"a": {
77
"type": "number"
@@ -16,7 +16,7 @@
1616
],
1717
"type": "object"
1818
},
19-
"MyGeneric<string,number>": {
19+
"MyGeneric_string_number_": {
2020
"properties": {
2121
"a": {
2222
"type": "string"
@@ -34,10 +34,10 @@
3434
},
3535
"properties": {
3636
"value1": {
37-
"$ref": "#/definitions/MyGeneric<string,number>"
37+
"$ref": "#/definitions/MyGeneric_string_number_"
3838
},
3939
"value2": {
40-
"$ref": "#/definitions/MyGeneric<number,string>"
40+
"$ref": "#/definitions/MyGeneric_number_string_"
4141
}
4242
},
4343
"required": [

test/programs/generic-multiple/schema.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "http://json-schema.org/draft-07/schema#",
33
"definitions": {
4-
"MyGeneric<number>": {
4+
"MyGeneric_number_": {
55
"properties": {
66
"field": {
77
"type": "number"
@@ -12,7 +12,7 @@
1212
],
1313
"type": "object"
1414
},
15-
"MyGeneric<string>": {
15+
"MyGeneric_string_": {
1616
"properties": {
1717
"field": {
1818
"type": "string"
@@ -26,10 +26,10 @@
2626
},
2727
"properties": {
2828
"value1": {
29-
"$ref": "#/definitions/MyGeneric<number>"
29+
"$ref": "#/definitions/MyGeneric_number_"
3030
},
3131
"value2": {
32-
"$ref": "#/definitions/MyGeneric<string>"
32+
"$ref": "#/definitions/MyGeneric_string_"
3333
}
3434
},
3535
"required": [

test/programs/generic-recursive/schema.json

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
22
"$ref": "#/definitions/MyObject",
33
"$schema": "http://json-schema.org/draft-07/schema#",
44
"definitions": {
5-
"MyGeneric<number,string>": {
5+
"MyGeneric_number_string_": {
66
"properties": {
77
"field": {
8-
"$ref": "#/definitions/MyGeneric<string,number>"
8+
"$ref": "#/definitions/MyGeneric_string_number_"
99
}
1010
},
1111
"required": [
1212
"field"
1313
],
1414
"type": "object"
1515
},
16-
"MyGeneric<string,number>": {
16+
"MyGeneric_string_number_": {
1717
"properties": {
1818
"field": {
19-
"$ref": "#/definitions/MyGeneric<number,string>"
19+
"$ref": "#/definitions/MyGeneric_number_string_"
2020
}
2121
},
2222
"required": [
@@ -27,7 +27,7 @@
2727
"MyObject": {
2828
"properties": {
2929
"value": {
30-
"$ref": "#/definitions/MyGeneric<string,number>"
30+
"$ref": "#/definitions/MyGeneric_string_number_"
3131
}
3232
},
3333
"required": [
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export interface MyGeneric<T> {
2+
field: T;
3+
}
4+
5+
export interface MyObject {
6+
value: MyGeneric<number>;
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema#",
3+
"definitions": {
4+
"MyGeneric_number_.7590b3ed": {
5+
"properties": {
6+
"field": {
7+
"type": "number"
8+
}
9+
},
10+
"required": [
11+
"field"
12+
],
13+
"type": "object"
14+
}
15+
},
16+
"properties": {
17+
"value": {
18+
"$ref": "#/definitions/MyGeneric_number_.7590b3ed"
19+
}
20+
},
21+
"required": [
22+
"value"
23+
],
24+
"type": "object"
25+
}
26+

test/programs/generic-simple/schema.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "http://json-schema.org/draft-07/schema#",
33
"definitions": {
4-
"MyGeneric<number>": {
4+
"MyGeneric_number_": {
55
"properties": {
66
"field": {
77
"type": "number"
@@ -15,7 +15,7 @@
1515
},
1616
"properties": {
1717
"value": {
18-
"$ref": "#/definitions/MyGeneric<number>"
18+
"$ref": "#/definitions/MyGeneric_number_"
1919
}
2020
},
2121
"required": [

test/schema.test.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { readFileSync } from "fs";
55
import { resolve } from "path";
66
import { versionMajorMinor as typescriptVersionMajorMinor } from "typescript";
77
import * as TJS from "../typescript-json-schema";
8+
import {JSONPath} from 'jsonpath-plus'
9+
import {isEmpty} from 'lodash'
810

911
let ajvWarnings: string[] = [];
1012
const ajv = new Ajv({
@@ -47,7 +49,6 @@ export function assertSchema(
4749

4850
const files = [resolve(BASE + group + "/main.ts")];
4951
const actual = TJS.generateSchema(TJS.getProgramFromFiles(files, compilerOptions), type, settings, files);
50-
5152
// writeFileSync(BASE + group + "/schema.json", stringify(actual, {space: 4}) + "\n\n");
5253

5354
const file = readFileSync(BASE + group + "/schema.json", "utf8");
@@ -68,6 +69,13 @@ export function assertSchema(
6869
ajv.compile(actual);
6970
assert.deepEqual(ajvWarnings, ajvOptions.expectedWarnings || [], "Got unexpected AJV warnings");
7071
}
72+
73+
const refs:{$ref: string}[] = JSONPath({path: '$..[?(@ && @.$ref)]', json: actual})
74+
if (!isEmpty(refs)) {
75+
assert.isTrue(refs.every(({$ref: r}) => {
76+
return !(/[<>,]/.test(r))
77+
}))
78+
}
7179
}
7280
});
7381
}
@@ -282,6 +290,7 @@ describe("schema", () => {
282290

283291
describe("generics", () => {
284292
assertSchema("generic-simple", "MyObject");
293+
assertSchema("generic-simple-unique", "MyObject", {uniqueNames: true});
285294
assertSchema("generic-arrays", "MyObject");
286295
assertSchema("generic-multiple", "MyObject");
287296
assertSchema("generic-multiargs", "MyObject");

0 commit comments

Comments
 (0)