MissingRefError Can't Resolve Reference from ID

21 hours ago 3
ARTICLE AD BOX

I am trying to validate my data using Ajv library. I have multiple types specified in JSON Schema: SetUserAccountDataPayload, UpdateUserAccountDataPayload, RemoveUserAccountDataPayload and so on.
What I would like to do is to be able to access this type definitions like this:

schema.definitions.SetUserAccountDataPayload

But, I got error:

Uncaught MissingRefError: can't resolve reference #/definitions/UserAccountData from id #

import Ajv from 'ajv'; import schema from 'app/features/cross-platform-bridge/types/cross-platform-bridge.types.json'; const ajv = new Ajv(); const validate1 = ajv.compile<SetUserAccountDataPayload>(schema.definitions.SetUserAccountDataPayload); const validate2 = ajv.compile<UpdateUserAccountDataPayload>(schema.definitions.UpdateUserAccountDataPayload); const validate3 = ajv.compile<RemoveUserAccountDataPayload>(schema.definitions.RemoveUserAccountDataPayload);

Schema:

{ "$ref": "#/definitions/SchemaRoot", "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { "AtLeastOne<UserAccountData>": { "anyOf": [ { "additionalProperties": false, "properties": { "firstTimeDeposited": { "type": "boolean" }, "kycState": { "$ref": "#/definitions/VerificationStatus" }, "lastDepositedAt": { "type": "string" }, "sessionStatus": { "$ref": "#/definitions/SessionStatus" }, "userId": { "type": "string" } }, "required": [ "userId" ], "type": "object" }, { "additionalProperties": false, "properties": { "firstTimeDeposited": { "type": "boolean" }, "kycState": { "$ref": "#/definitions/VerificationStatus" }, "lastDepositedAt": { "type": "string" }, "sessionStatus": { "$ref": "#/definitions/SessionStatus" }, "userId": { "type": "string" } }, "required": [ "sessionStatus" ], "type": "object" }, { "additionalProperties": false, "properties": { "firstTimeDeposited": { "type": "boolean" }, "kycState": { "$ref": "#/definitions/VerificationStatus" }, "lastDepositedAt": { "type": "string" }, "sessionStatus": { "$ref": "#/definitions/SessionStatus" }, "userId": { "type": "string" } }, "required": [ "kycState" ], "type": "object" }, { "additionalProperties": false, "properties": { "firstTimeDeposited": { "type": "boolean" }, "kycState": { "$ref": "#/definitions/VerificationStatus" }, "lastDepositedAt": { "type": "string" }, "sessionStatus": { "$ref": "#/definitions/SessionStatus" }, "userId": { "type": "string" } }, "required": [ "firstTimeDeposited" ], "type": "object" }, { "additionalProperties": false, "properties": { "firstTimeDeposited": { "type": "boolean" }, "kycState": { "$ref": "#/definitions/VerificationStatus" }, "lastDepositedAt": { "type": "string" }, "sessionStatus": { "$ref": "#/definitions/SessionStatus" }, "userId": { "type": "string" } }, "required": [ "lastDepositedAt" ], "type": "object" } ] }, "RemoveUserAccountDataPayload": { "additionalProperties": false, "properties": { "data": { "type": "null" }, "type": { "type": "string" }, "version": { "type": "string" } }, "required": [ "data", "type", "version" ], "type": "object" }, "SchemaRoot": { "additionalProperties": false, "properties": { "removeUserAccountDataPayload": { "$ref": "#/definitions/RemoveUserAccountDataPayload" }, "setUserAccountDataPayload": { "$ref": "#/definitions/SetUserAccountDataPayload" }, "updateUserAccountDataPayload": { "$ref": "#/definitions/UpdateUserAccountDataPayload" } }, "required": [ "setUserAccountDataPayload", "updateUserAccountDataPayload", "removeUserAccountDataPayload" ], "type": "object" }, "SessionStatus": { "enum": [ "FAILED", "RESTRICTED", "SUCCESSFUL", "null" ], "type": "string" }, "SetUserAccountDataPayload": { "additionalProperties": false, "properties": { "data": { "$ref": "#/definitions/UserAccountData" }, "type": { "type": "string" }, "version": { "type": "string" } }, "required": [ "data", "type", "version" ], "type": "object" }, "UpdateUserAccountDataPayload": { "additionalProperties": false, "properties": { "data": { "$ref": "#/definitions/AtLeastOne%3CUserAccountData%3E" }, "type": { "type": "string" }, "version": { "type": "string" } }, "required": [ "data", "type", "version" ], "type": "object" }, "UserAccountData": { "additionalProperties": false, "properties": { "firstTimeDeposited": { "type": "boolean" }, "kycState": { "$ref": "#/definitions/VerificationStatus" }, "lastDepositedAt": { "type": "string" }, "sessionStatus": { "$ref": "#/definitions/SessionStatus" }, "userId": { "type": "string" } }, "required": [ "userId", "sessionStatus", "kycState", "firstTimeDeposited", "lastDepositedAt" ], "type": "object" }, "VerificationStatus": { "enum": [ "EXPIRED", "PENDING", "TEMPORARY", "UNVERIFIED", "VERIFIED" ], "type": "string" } } }

Any ideas, I can't make it work?

Read Entire Article