diff --git a/src/Utils/removeUnreachable.ts b/src/Utils/removeUnreachable.ts index 430ccb1ed..479c99d89 100644 --- a/src/Utils/removeUnreachable.ts +++ b/src/Utils/removeUnreachable.ts @@ -39,7 +39,7 @@ function addReachable( } } else if (definition.not) { addReachable(definition.not, definitions, reachable); - } else if (definition.type === "object") { + } else if (definition.type?.includes("object")) { for (const prop in definition.properties || {}) { const propDefinition = definition.properties![prop]; addReachable(propDefinition, definitions, reachable); @@ -49,7 +49,7 @@ function addReachable( if (additionalProperties) { addReachable(additionalProperties, definitions, reachable); } - } else if (definition.type === "array") { + } else if (definition.type?.includes("array")) { const items = definition.items; if (Array.isArray(items)) { for (const item of items) { diff --git a/test/valid-data-annotations.test.ts b/test/valid-data-annotations.test.ts index 4cead7918..ffa9e1ba1 100644 --- a/test/valid-data-annotations.test.ts +++ b/test/valid-data-annotations.test.ts @@ -73,4 +73,6 @@ describe("valid-data-annotations", () => { it("annotation-writeOnly", assertValidSchema("annotation-writeOnly", "MyObject", "basic")); it("annotation-union-if-then", assertValidSchema("annotation-union-if-then", "Animal", "basic")); + + it("annotation-nullable-definition", assertValidSchema("annotation-nullable-definition", "MyObject", "extended")); }); diff --git a/test/valid-data/annotation-nullable-definition/main.ts b/test/valid-data/annotation-nullable-definition/main.ts new file mode 100644 index 000000000..b78627f98 --- /dev/null +++ b/test/valid-data/annotation-nullable-definition/main.ts @@ -0,0 +1,10 @@ +export class Definition { + name: string +} + +export class MyObject { + /** + * @nullable + */ + optional?: Definition[] +} diff --git a/test/valid-data/annotation-nullable-definition/schema.json b/test/valid-data/annotation-nullable-definition/schema.json new file mode 100644 index 000000000..217292f05 --- /dev/null +++ b/test/valid-data/annotation-nullable-definition/schema.json @@ -0,0 +1,33 @@ +{ + "$schema":"http://json-schema.org/draft-07/schema#", + "$ref":"#/definitions/MyObject", + "definitions":{ + "MyObject":{ + "type":"object", + "properties":{ + "optional":{ + "type":[ + "array", + "null" + ], + "items":{ + "$ref":"#/definitions/Definition" + } + } + }, + "additionalProperties":false + }, + "Definition":{ + "type":"object", + "properties":{ + "name":{ + "type":"string" + } + }, + "required":[ + "name" + ], + "additionalProperties":false + } + } +} diff --git a/yarn.lock b/yarn.lock index 8aa2b9d7c..765d8db68 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1115,10 +1115,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@humanwhocodes/config-array@^0.10.4": - version "0.10.4" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" - integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== +"@humanwhocodes/config-array@^0.10.5": + version "0.10.5" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.5.tgz#bb679745224745fff1e9a41961c1d45a49f81c04" + integrity sha512-XVVDtp+dVvRxMoxSiSfasYaG02VEe1qH5cKgMQJWhol6HwzbcqoCMJi8dAGoYAO57jhUyhI6cWuRiTcRaDaYug== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -1697,9 +1697,9 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*", "@types/node@^18.7.18": - version "18.7.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.18.tgz#633184f55c322e4fb08612307c274ee6d5ed3154" - integrity sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg== + version "18.7.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.20.tgz#d9442de7b5cb166476340b4271b15300fe058a39" + integrity sha512-adzY4vLLr5Uivmx8+zfSJ5fbdgKxX8UMtjtl+17n0B1q1Nz8JEmE151vefMdpD+1gyh+77weN4qEhej/O7budQ== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -2876,12 +2876,12 @@ eslint-visitor-keys@^3.3.0: integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.23.1: - version "8.23.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.1.tgz#cfd7b3f7fdd07db8d16b4ac0516a29c8d8dca5dc" - integrity sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg== + version "8.24.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.24.0.tgz#489516c927a5da11b3979dbfb2679394523383c8" + integrity sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ== dependencies: "@eslint/eslintrc" "^1.3.2" - "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/config-array" "^0.10.5" "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" "@humanwhocodes/module-importer" "^1.0.1" ajv "^6.10.0"