ts-json-schema-generator
ts-json-schema-generator copied to clipboard
Missing $id prefix in $ref
How to produce
ts-json-schema-generator -f './tsconfig.json' -p './type.ts' -o './scheme.json' --id='api'
./type.ts
export type ApiSchema = {
N: B
}
export type B = string
What to expect?
./schema.json
{
"$id": "api",
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"ApiSchema": {
"type": "object",
"properties": {
"N": {
"$ref": "api#/definitions/B" // with api prefix
}
},
"required": [
"N"
],
"additionalProperties": false
},
"B": {
"type": "string"
}
}
}
What is actually happening?
./schema.json
{
"$id": "api",
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"ApiSchema": {
"type": "object",
"properties": {
"N": {
"$ref": "#/definitions/B" // missing api prefix
}
},
"required": [
"N"
],
"additionalProperties": false
},
"B": {
"type": "string"
}
}
}
Is this by design?
I think it's a serious bug, because it sabotages the combination with ajv validation
By the way typescript-json-schema can generate the expected result
Huh, can you look into why ID is being ignored?
Huh, can you look into why ID is being ignored?
No idea why it's designed like this, but I searched source code and got below discover
In ts-json-schema-generator, DefinitionTypeFormatter and ReferenceTypeFormatter hard coded '#/definition' as prefix
While in typescript-json-schema, $id will be used as prefix
Since ts-json-schema-generator is an extended version of typescript-json-schema, so I think their basic behavior should be same?
Yeah, looks like we accidentally broke that at some point. Let's fix it.