Open
Description
When using $ref
on the top-level to reference a defined type in $defs
it wrongly results in a TypeError: Converting circular structure to JSON
which is not a circular reference.
According to the JSON Schema Core Specification Draft 2020-12 (see 7.5. Applicators
) it is valid to use $ref
on the top-level.
Here's a example schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$ref": "#/$defs/TopLevelType",
"$defs": {
"PropType": {
"title": "Property",
"type": "string"
},
"TopLevelType": {
"properties": {
"prop1": {
"$ref": "#/$defs/PropType"
}
},
"title": "Top Level Type",
"type": "object"
}
}
}
Trying to resolve this issue using the following test program:
import $RefParser from "@apidevtools/json-schema-ref-parser";
import mySchema from "./bundler-demo-non-working.json" with { type: "json" };
try {
await $RefParser.dereference(mySchema);
const clonedSchema = await $RefParser.dereference(mySchema, { mutateInputSchema: false });
console.log(clonedSchema);
} catch (err) {
console.error(err);
}
Results in the following error:
node test.js
TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Object'
| property 'TopLevelType' -> object with constructor 'Object'
| property 'properties' -> object with constructor 'Object'
| property 'prop1' -> object with constructor 'Object'
--- property '$defs' closes the circle
at JSON.stringify (<anonymous>)
at normalizeArgs (node_modules/@apidevtools/json-schema-ref-parser/dist/lib/normalize-args.js:46:34)
at $RefParser.dereference (node_modules/@apidevtools/json-schema-ref-parser/dist/lib/index.js:193:54)
at Object.dereference (node_modules/@apidevtools/json-schema-ref-parser/dist/lib/index.js:190:37)
at file://test.js:6:41
It has been reproduced with version 12.0.1
of @apidevtools/json-schema-ref-parser
.
The resolution of this issue is required for skriptfabrik/json-schema-bundler#28.
Metadata
Metadata
Assignees
Labels
No labels