Open
Description
We have to process a bunch of json schemas produced by another team and bundled using @hyperjump/json-schema
.
For reference (pun intended) here is a simple sample of such bundles.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://common-schemas.redacted.com",
"type": "object",
"properties": {
"dateInMilliseconds": { "$ref": "#/definitions/DateInMilliseconds" },
"monetary": { "$ref": "#/definitions/Monetary" },
"reference": { "$ref": "#/definitions/Reference" },
"referenceWithExternalId": {
"$ref": "#/definitions/ReferenceWithExternalId"
}
},
"required": [
"dateInMilliseconds",
"monetary",
"reference",
"referenceWithExternalId"
],
"additionalProperties": false,
"title": "CommonTypes",
"description": "Bunndle of common types",
"definitions": {
"DateInMilliseconds": {
"$ref": "http://common-schemas.redacted.com/date-in-milliseconds"
},
"Monetary": {
"$ref": "http://common-schemas.redacted.com/monetary"
},
"Reference": {
"$ref": "http://common-schemas.redacted.com/reference"
},
"ReferenceWithExternalId": {
"$ref": "http://common-schemas.redacted.com/reference-with-external-id"
},
"http://common-schemas.redacted.com/date-in-milliseconds": {
"$id": "http://common-schemas.redacted.com/date-in-milliseconds",
"title": "DateInMilliseconds",
"description": "A UTC datetime in milliseconds",
"type": "integer"
},
"http://common-schemas.redacted.com/monetary": {
"$id": "http://common-schemas.redacted.com/monetary",
"title": "Monetary",
"description": "An amount of money in a specific currency.",
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "The net monetary value. A negative amount denotes a debit; a positive amount a credit."
},
"currency": {
"type": "string",
"description": "The [ISO 4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) for this monetary value. This is always upper case ASCII.",
"minLength": 3,
"maxLength": 3
}
},
"required": ["amount", "currency"],
"additionalProperties": false
},
"http://common-schemas.redacted.com/reference": {
"$id": "http://common-schemas.redacted.com/reference",
"title": "Reference",
"description": "Reference to an API object",
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "Well known global unique identifier",
"minLength": 1
},
"lastModif": { "$ref": "#/definitions/DateInMilliseconds" }
},
"required": ["id", "lastModif"],
"definitions": {
"DateInMilliseconds": {
"$ref": "http://common-schemas.redacted.com/date-in-milliseconds"
}
}
},
"http://common-schemas.redacted.com/reference-with-external-id": {
"$id": "http://common-schemas.redacted.com/reference-with-external-id",
"title": "ReferenceWithExternalId",
"description": "Reference to an API object which has an `externalId' property",
"type": "object",
"additionalProperties": false,
"properties": {
"externalId": {
"type": ["string", "null"],
"description": "Well known global unique identifier from an external data source",
"minLength": 1
},
"id": {
"type": "string",
"description": "Well known global unique identifier",
"minLength": 1
},
"lastModif": { "$ref": "#/definitions/DateInMilliseconds" }
},
"required": ["externalId", "id", "lastModif"],
"definitions": {
"DateInMilliseconds": {
"$ref": "http://common-schemas.redacted.com/date-in-milliseconds"
}
}
}
}
}
Above bundle references four schemas which are plainly defined under #/definitions
with matching $id
s.
"$id": "http://common-schemas.redacted.com/date-in-milliseconds"
"$id": "http://common-schemas.redacted.com/monetary"
"$id": "http://common-schemas.redacted.com/reference"
"$id": "http://common-schemas.redacted.com/reference-with-external-id"
Whenever we attempt to process it (initially via json-schema-to-typescript or using json-schema-ref-parser
's dereference()
function) we get the bellow ResolverError
.
/Users/redacted/dev/redacted/node_modules/.pnpm/@[email protected]/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/resolvers/http.js:123
throw new errors_js_1.ResolverError((0, ono_1.ono)(err, `Error downloading ${u.href}`), u.href);
^
ResolverError: Error downloading http://common-schemas.redacted.com/date-in-milliseconds
fetch failed
at download (/Users/redacted/dev/redacted/node_modules/.pnpm/@[email protected]/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/resolvers/http.js:123:15)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5) {
code: 'ERESOLVER',
source: 'http://common-schemas.redacted.com/date-in-milliseconds',
path: null,
toJSON: [Function: toJSON],
[Symbol(nodejs.util.inspect.custom)]: [Function: inspect]
}
We are probably missing something obvious, but couldn't find how to prevent "bundled" references to be (wrongfully) processed by the http
parser while already referenced under #/definitions
.
Any advice?
Thanks in advance,
Metadata
Metadata
Assignees
Labels
No labels