From af1064a117ba4a589671b7b2b26e7fb0e68b84cb Mon Sep 17 00:00:00 2001 From: "K.Himeno" <6715229+Himenon@users.noreply.github.com> Date: Fri, 23 Jun 2023 21:49:21 +0900 Subject: [PATCH 1/2] test: complex ref --- test/remote.ref.access/v0.yml | 12 ++++++++---- test/remote.ref.access/v1.yml | 6 ++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/test/remote.ref.access/v0.yml b/test/remote.ref.access/v0.yml index 9b01f562..03065705 100644 --- a/test/remote.ref.access/v0.yml +++ b/test/remote.ref.access/v0.yml @@ -17,11 +17,17 @@ tags: components: schemas: + BookID: + type: string + format: uuid Book: type: object required: + - id - metadata properties: + id: + $ref: "#/components/schemas/BookID" author: type: object properties: @@ -56,8 +62,7 @@ paths: required: true description: Book ID schema: - type: string - format: uuid + $ref: "#/components/schemas/BookID" get: operationId: getBook responses: @@ -74,8 +79,7 @@ paths: required: true description: Book ID schema: - type: string - format: uuid + $ref: "#/components/schemas/BookID" get: operationId: getDescription responses: diff --git a/test/remote.ref.access/v1.yml b/test/remote.ref.access/v1.yml index 5c5f2ee5..3dc65fa0 100644 --- a/test/remote.ref.access/v1.yml +++ b/test/remote.ref.access/v1.yml @@ -32,8 +32,7 @@ paths: required: true description: Book ID schema: - type: string - format: uuid + $ref: "v0.yml#/components/schemas/BookID" get: operationId: getBook responses: @@ -50,8 +49,7 @@ paths: required: true description: Book ID schema: - type: string - format: uuid + $ref: "v0.yml#/components/schemas/BookID" get: operationId: getDescription responses: From 8c0ca4a2accfa60180f99d4fa1ef41534029e8c3 Mon Sep 17 00:00:00 2001 From: "K.Himeno" <6715229+Himenon@users.noreply.github.com> Date: Fri, 23 Jun 2023 21:57:04 +0900 Subject: [PATCH 2/2] chore: stop maximum loop --- scripts/testCodeGenWithClass.ts | 90 ++++++++++---------- src/internal/OpenApiTools/TypeNodeContext.ts | 4 + 2 files changed, 49 insertions(+), 45 deletions(-) diff --git a/scripts/testCodeGenWithClass.ts b/scripts/testCodeGenWithClass.ts index c010a92a..f3a1a617 100644 --- a/scripts/testCodeGenWithClass.ts +++ b/scripts/testCodeGenWithClass.ts @@ -1,57 +1,57 @@ import * as Writer from "./writer/Class"; const main = () => { - Writer.generateTypedefCodeOnly("test/api.test.domain/index.yml", "test/code/class/typedef-only/api.test.domain.ts", true); - Writer.generateTypedefCodeOnly("test/infer.domain/index.yml", "test/code/class/typedef-only/infer.domain.ts", false); - Writer.generateTypedefCodeOnly("test/json.properties/index.yml", "test/code/class/typedef-only/json.properties.ts", false); - - Writer.generateTemplateCodeOnly("test/api.test.domain/index.yml", "test/code/class/template-only/api.test.domain.ts", true, { sync: false }); - Writer.generateTemplateCodeOnly("test/api.test.domain/index.yml", "test/code/class/template-only/sync-api.test.domain.ts", true, { - sync: true, - }); - Writer.generateTemplateCodeOnly("test/infer.domain/index.yml", "test/code/class/template-only/infer.domain.ts", false, { sync: true }); - - Writer.generateTypedefWithTemplateCode("test/api.v2.domain/index.yml", "test/code/class/typedef-with-template/api.v2.domain.ts", false, { - sync: false, - }); - Writer.generateTypedefWithTemplateCode("test/api.test.domain/index.yml", "test/code/class/typedef-with-template/api.test.domain.ts", true, { - sync: false, - }); - Writer.generateTypedefWithTemplateCode( - "test/api.test.domain/index.yml", - "test/code/class/typedef-with-template/sync-api.test.domain.ts", - true, - { - sync: true, - }, - ); - Writer.generateTypedefWithTemplateCode("test/infer.domain/index.yml", "test/code/class/typedef-with-template/infer.domain.ts", false, { - sync: false, - }); - - Writer.generateTypedefWithTemplateCode("test/ref.access/index.yml", "test/code/class/typedef-with-template/ref-access.ts", false, { - sync: false, - }); + // Writer.generateTypedefCodeOnly("test/api.test.domain/index.yml", "test/code/class/typedef-only/api.test.domain.ts", true); + // Writer.generateTypedefCodeOnly("test/infer.domain/index.yml", "test/code/class/typedef-only/infer.domain.ts", false); + // Writer.generateTypedefCodeOnly("test/json.properties/index.yml", "test/code/class/typedef-only/json.properties.ts", false); + + // Writer.generateTemplateCodeOnly("test/api.test.domain/index.yml", "test/code/class/template-only/api.test.domain.ts", true, { sync: false }); + // Writer.generateTemplateCodeOnly("test/api.test.domain/index.yml", "test/code/class/template-only/sync-api.test.domain.ts", true, { + // sync: true, + // }); + // Writer.generateTemplateCodeOnly("test/infer.domain/index.yml", "test/code/class/template-only/infer.domain.ts", false, { sync: true }); + + // Writer.generateTypedefWithTemplateCode("test/api.v2.domain/index.yml", "test/code/class/typedef-with-template/api.v2.domain.ts", false, { + // sync: false, + // }); + // Writer.generateTypedefWithTemplateCode("test/api.test.domain/index.yml", "test/code/class/typedef-with-template/api.test.domain.ts", true, { + // sync: false, + // }); + // Writer.generateTypedefWithTemplateCode( + // "test/api.test.domain/index.yml", + // "test/code/class/typedef-with-template/sync-api.test.domain.ts", + // true, + // { + // sync: true, + // }, + // ); + // Writer.generateTypedefWithTemplateCode("test/infer.domain/index.yml", "test/code/class/typedef-with-template/infer.domain.ts", false, { + // sync: false, + // }); + + // Writer.generateTypedefWithTemplateCode("test/ref.access/index.yml", "test/code/class/typedef-with-template/ref-access.ts", false, { + // sync: false, + // }); Writer.generateTypedefWithTemplateCode("test/remote.ref.access/v1.yml", "test/code/class/typedef-with-template/remote-ref-access.ts", false, { sync: false, }); - Writer.generateTypedefWithTemplateCode("test/kubernetes/openapi-v1.18.5.json", "test/code/class/kubernetes/client-v1.18.5.ts", false, { - sync: false, - }); - Writer.generateTypedefWithTemplateCode("test/argo-rollout/index.json", "test/code/class/argo-rollout/client.ts", false, { - sync: false, - }); - Writer.generateTypedefWithTemplateCode("test/unknown.schema.domain/index.yml", "test/code/class/unknown.schema.domain/client.ts", false, { - sync: false, - }); + // Writer.generateTypedefWithTemplateCode("test/kubernetes/openapi-v1.18.5.json", "test/code/class/kubernetes/client-v1.18.5.ts", false, { + // sync: false, + // }); + // Writer.generateTypedefWithTemplateCode("test/argo-rollout/index.json", "test/code/class/argo-rollout/client.ts", false, { + // sync: false, + // }); + // Writer.generateTypedefWithTemplateCode("test/unknown.schema.domain/index.yml", "test/code/class/unknown.schema.domain/client.ts", false, { + // sync: false, + // }); - Writer.generateSplitCode("test/api.test.domain/index.yml", "test/code/class/split"); - Writer.generateSplitCode("test/multi-type.test.domain/index.yml", "test/code/class/mulit-type-test.domain"); + // Writer.generateSplitCode("test/api.test.domain/index.yml", "test/code/class/split"); + // Writer.generateSplitCode("test/multi-type.test.domain/index.yml", "test/code/class/mulit-type-test.domain"); - Writer.generateParameter("test/api.test.domain/index.yml", "test/code/class/parameter/api.test.domain.json"); - Writer.generateParameter("test/infer.domain/index.yml", "test/code/class/parameter/infer.domain.json"); + // Writer.generateParameter("test/api.test.domain/index.yml", "test/code/class/parameter/api.test.domain.json"); + // Writer.generateParameter("test/infer.domain/index.yml", "test/code/class/parameter/infer.domain.json"); - Writer.generateFormatTypeCode("test/format.domain/index.yml", "test/code/class/format.domain/code.ts"); + // Writer.generateFormatTypeCode("test/format.domain/index.yml", "test/code/class/format.domain/code.ts"); }; main(); diff --git a/src/internal/OpenApiTools/TypeNodeContext.ts b/src/internal/OpenApiTools/TypeNodeContext.ts index 4516456e..be9b5113 100644 --- a/src/internal/OpenApiTools/TypeNodeContext.ts +++ b/src/internal/OpenApiTools/TypeNodeContext.ts @@ -101,7 +101,11 @@ export const create = ( remainPathArray: string[] = [], ): OpenApi.Schema | OpenApi.Reference | OpenApi.JSONSchemaDefinition => { const schema = DotProp.get(rootSchema, pathArray.join(".")); + console.log(JSON.stringify({ pathArray, remainPathArray })); if (!schema) { + if (pathArray.length === 0) { + throw new Error("Not found"); + } return findSchemaByPathArray(pathArray.slice(0, pathArray.length - 1), [pathArray[pathArray.length - 1], ...remainPathArray]); } if (Guard.isReference(schema)) {