Skip to content

Commit 0c26ce7

Browse files
committed
feat: uri encoded $refs (YousefED#617)
1 parent 43e557d commit 0c26ce7

File tree

7 files changed

+35
-12
lines changed

7 files changed

+35
-12
lines changed

api.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1846,6 +1846,13 @@ export type MyTuple = [string, number, boolean?];
18461846
```
18471847

18481848

1849+
## [type-aliases-tuple-with-names](./test/programs/type-aliases-tuple-with-names)
1850+
1851+
```ts
1852+
export type MyTuple = [a: string, b: 123, c?: boolean, ...d: number[]];
1853+
```
1854+
1855+
18491856
## [type-aliases-tuple-with-rest-element](./test/programs/type-aliases-tuple-with-rest-element)
18501857

18511858
```ts

test/programs/generic-anonymous/schema.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@
3737
},
3838
"properties": {
3939
"value1": {
40-
"$ref": "#/definitions/MyGeneric<string,number>"
40+
"$ref": "#/definitions/MyGeneric%3Cstring%2Cnumber%3E"
4141
},
4242
"value2": {
43-
"$ref": "#/definitions/MyGeneric<number,string>"
43+
"$ref": "#/definitions/MyGeneric%3Cnumber%2Cstring%3E"
4444
}
4545
},
4646
"required": [

test/programs/generic-multiargs/schema.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@
3737
},
3838
"properties": {
3939
"value1": {
40-
"$ref": "#/definitions/MyGeneric<string,number>"
40+
"$ref": "#/definitions/MyGeneric%3Cstring%2Cnumber%3E"
4141
},
4242
"value2": {
43-
"$ref": "#/definitions/MyGeneric<number,string>"
43+
"$ref": "#/definitions/MyGeneric%3Cnumber%2Cstring%3E"
4444
}
4545
},
4646
"required": [

test/programs/generic-multiple/schema.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
},
3030
"properties": {
3131
"value1": {
32-
"$ref": "#/definitions/MyGeneric<number>"
32+
"$ref": "#/definitions/MyGeneric%3Cnumber%3E"
3333
},
3434
"value2": {
35-
"$ref": "#/definitions/MyGeneric<string>"
35+
"$ref": "#/definitions/MyGeneric%3Cstring%3E"
3636
}
3737
},
3838
"required": [

test/programs/generic-recursive/schema.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"additionalProperties": false,
77
"properties": {
88
"field": {
9-
"$ref": "#/definitions/MyGeneric<string,number>"
9+
"$ref": "#/definitions/MyGeneric%3Cstring%2Cnumber%3E"
1010
}
1111
},
1212
"required": [
@@ -18,7 +18,7 @@
1818
"additionalProperties": false,
1919
"properties": {
2020
"field": {
21-
"$ref": "#/definitions/MyGeneric<number,string>"
21+
"$ref": "#/definitions/MyGeneric%3Cnumber%2Cstring%3E"
2222
}
2323
},
2424
"required": [
@@ -30,7 +30,7 @@
3030
"additionalProperties": false,
3131
"properties": {
3232
"value": {
33-
"$ref": "#/definitions/MyGeneric<string,number>"
33+
"$ref": "#/definitions/MyGeneric%3Cstring%2Cnumber%3E"
3434
}
3535
},
3636
"required": [

test/programs/generic-simple/schema.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
},
1818
"properties": {
1919
"value": {
20-
"$ref": "#/definitions/MyGeneric<number>"
20+
"$ref": "#/definitions/MyGeneric%3Cnumber%3E"
2121
}
2222
},
2323
"required": [

typescript-json-schema.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1414,7 +1414,7 @@ export class JsonSchemaGenerator {
14141414
// We don't return the full definition, but we put it into
14151415
// reffedDefinitions below.
14161416
returnedDefinition = {
1417-
$ref: `${this.args.id}#/definitions/` + fullTypeName,
1417+
$ref: createRefURI(this.args.id, fullTypeName),
14181418
};
14191419
}
14201420

@@ -1519,7 +1519,7 @@ export class JsonSchemaGenerator {
15191519
}, {});
15201520

15211521
returnedDefinition = {
1522-
$ref: `${this.args.id}#/definitions/` + fullTypeName,
1522+
$ref: createRefURI(this.args.id, fullTypeName),
15231523
...annotations,
15241524
};
15251525
}
@@ -1640,6 +1640,22 @@ export class JsonSchemaGenerator {
16401640
}
16411641
}
16421642

1643+
/**
1644+
* Generates the reference URI to the definition in the schema `id`
1645+
* containing the definition `name`.
1646+
*
1647+
* Encodes the `name` using `encodeURIComponent`.
1648+
*
1649+
* @see https://datatracker.ietf.org/doc/html/rfc3986
1650+
* @param id the id of the schema containing the definition
1651+
* @param name the name of the definition
1652+
* @returns the URI pointing to the definition in the schema
1653+
*/
1654+
function createRefURI(id: string, name: string): string {
1655+
const encoded = encodeURIComponent(name);
1656+
return `${id}#/definitions/${encoded}`;
1657+
}
1658+
16431659
export function getProgramFromFiles(
16441660
files: string[],
16451661
jsonCompilerOptions: any = {},

0 commit comments

Comments
 (0)