diff --git a/packages/cli/cli/versions.yml b/packages/cli/cli/versions.yml index 7c11ca83172..f4ba3f926cd 100644 --- a/packages/cli/cli/versions.yml +++ b/packages/cli/cli/versions.yml @@ -1,3 +1,21 @@ +- changelogEntry: + - summary: | + The API V2 configuration (in beta) now supports global header overrides. + This fixes a bug where those header overrides were getting dropped in + certain cases. + + ```yml generators.yml + api: + headers: + X-API-VERSION: string + specs: + - openapi: /path/to/openapi + overrides: /path/to/overrides + ``` + type: fix + irVersion: 53 + version: 0.42.8 + - changelogEntry: - summary: | The API V2 configuration (in beta) now supports global header diff --git a/packages/cli/ete-tests/src/tests/write-definition/__snapshots__/writeDefinition.test.ts.snap b/packages/cli/ete-tests/src/tests/write-definition/__snapshots__/writeDefinition.test.ts.snap index 7294ef4ba14..f4cafbdd012 100644 --- a/packages/cli/ete-tests/src/tests/write-definition/__snapshots__/writeDefinition.test.ts.snap +++ b/packages/cli/ete-tests/src/tests/write-definition/__snapshots__/writeDefinition.test.ts.snap @@ -97,6 +97,105 @@ service: ] `; +exports[`validate header overrides > header-overrides 1`] = ` +[ + { + "contents": "types: + Pet: + properties: + id: long + name: string + tag: optional + source: + openapi: openapi/openapi.yml + Pets: list + Error: + properties: + code: integer + message: string + source: + openapi: openapi/openapi.yml +", + "name": "__package__.yml", + "type": "file", + }, + { + "contents": "name: api +error-discrimination: + strategy: status-code +display-name: Swagger Petstore +environments: + Default: http://petstore.swagger.io/v1 +default-environment: Default +headers: + X-Dummy-Header: optional +", + "name": "api.yml", + "type": "file", + }, + { + "contents": "imports: + root: __package__.yml +service: + auth: false + base-path: '' + endpoints: + listPets: + path: /pets + method: GET + auth: false + display-name: List all pets + request: + name: ListPetsRequest + query-parameters: + limit: + type: optional + docs: How many items to return at one time (max 100) + response: + docs: A paged array of pets + type: root.Pets + examples: + - response: + body: + - id: 1000000 + name: name + tag: tag + createPets: + path: /pets + method: POST + auth: false + display-name: Create a pet + examples: + - {} + showPetById: + path: /pets/{petId} + method: GET + auth: false + path-parameters: + petId: + type: string + docs: The id of the pet to retrieve + display-name: Info for a specific pet + response: + docs: Expected response to a valid request + type: root.Pet + examples: + - path-parameters: + petId: petId + response: + body: + id: 1000000 + name: name + tag: tag + source: + openapi: openapi/openapi.yml +", + "name": "pets.yml", + "type": "file", + }, +] +`; + exports[`validate namespaced API > namespaced 1`] = ` [ { diff --git a/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/.definition/__package__.yml b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/.definition/__package__.yml new file mode 100644 index 00000000000..4f2c9816dd5 --- /dev/null +++ b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/.definition/__package__.yml @@ -0,0 +1,15 @@ +types: + Pet: + properties: + id: long + name: string + tag: optional + source: + openapi: openapi/openapi.yml + Pets: list + Error: + properties: + code: integer + message: string + source: + openapi: openapi/openapi.yml diff --git a/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/.definition/api.yml b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/.definition/api.yml new file mode 100644 index 00000000000..83ac41e9b2d --- /dev/null +++ b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/.definition/api.yml @@ -0,0 +1,9 @@ +name: api +error-discrimination: + strategy: status-code +display-name: Swagger Petstore +environments: + Default: http://petstore.swagger.io/v1 +default-environment: Default +headers: + X-Dummy-Header: optional diff --git a/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/.definition/pets.yml b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/.definition/pets.yml new file mode 100644 index 00000000000..ddf187ef9e0 --- /dev/null +++ b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/.definition/pets.yml @@ -0,0 +1,55 @@ +imports: + root: __package__.yml +service: + auth: false + base-path: '' + endpoints: + listPets: + path: /pets + method: GET + auth: false + display-name: List all pets + request: + name: ListPetsRequest + query-parameters: + limit: + type: optional + docs: How many items to return at one time (max 100) + response: + docs: A paged array of pets + type: root.Pets + examples: + - response: + body: + - id: 1000000 + name: name + tag: tag + createPets: + path: /pets + method: POST + auth: false + display-name: Create a pet + examples: + - {} + showPetById: + path: /pets/{petId} + method: GET + auth: false + path-parameters: + petId: + type: string + docs: The id of the pet to retrieve + display-name: Info for a specific pet + response: + docs: Expected response to a valid request + type: root.Pet + examples: + - path-parameters: + petId: petId + response: + body: + id: 1000000 + name: name + tag: tag + source: + openapi: openapi/openapi.yml diff --git a/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/fern.config.json b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/fern.config.json new file mode 100644 index 00000000000..4168d955f58 --- /dev/null +++ b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/fern.config.json @@ -0,0 +1,4 @@ +{ + "version": "*", + "organization": "fern" +} \ No newline at end of file diff --git a/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/generators.yml b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/generators.yml new file mode 100644 index 00000000000..eeee8eb7f3d --- /dev/null +++ b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/generators.yml @@ -0,0 +1,6 @@ +api: + headers: + X-Dummy-Header: optional + specs: + - openapi: openapi/openapi.yml +groups: {} diff --git a/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/openapi/openapi.yml b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/openapi/openapi.yml new file mode 100644 index 00000000000..f5b955a22e5 --- /dev/null +++ b/packages/cli/ete-tests/src/tests/write-definition/fixtures/header-overrides/fern/openapi/openapi.yml @@ -0,0 +1,113 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT +servers: + - url: http://petstore.swagger.io/v1 +paths: + /pets: + get: + summary: List all pets + operationId: listPets + tags: + - pets + parameters: + - name: limit + in: query + description: How many items to return at one time (max 100) + required: false + schema: + type: integer + maximum: 100 + format: int32 + responses: + "200": + description: A paged array of pets + headers: + x-next: + description: A link to the next page of responses + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Pets" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + summary: Create a pet + operationId: createPets + tags: + - pets + responses: + "201": + description: Null response + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /pets/{petId}: + get: + summary: Info for a specific pet + operationId: showPetById + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: + type: string + responses: + "200": + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/schemas/Pet" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" +components: + schemas: + Pet: + type: object + required: + - id + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string + Pets: + type: array + maxItems: 100 + items: + $ref: "#/components/schemas/Pet" + Error: + type: object + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string diff --git a/packages/cli/ete-tests/src/tests/write-definition/writeDefinition.test.ts b/packages/cli/ete-tests/src/tests/write-definition/writeDefinition.test.ts index d2ec327e24a..61218ca3cb9 100644 --- a/packages/cli/ete-tests/src/tests/write-definition/writeDefinition.test.ts +++ b/packages/cli/ete-tests/src/tests/write-definition/writeDefinition.test.ts @@ -22,6 +22,10 @@ describe("validate namespaced API from Cohere", () => { itFixture("namespaced-fleshedout"); }); +describe("validate header overrides", () => { + itFixture("header-overrides"); +}); + function itFixture(fixtureName: string) { it( // eslint-disable-next-line jest/valid-title diff --git a/packages/cli/workspace-loader/src/workspaces/OSSWorkspace.ts b/packages/cli/workspace-loader/src/workspaces/OSSWorkspace.ts index 756db781f01..b670f5a18d5 100644 --- a/packages/cli/workspace-loader/src/workspaces/OSSWorkspace.ts +++ b/packages/cli/workspace-loader/src/workspaces/OSSWorkspace.ts @@ -105,7 +105,7 @@ export class OSSWorkspace extends AbstractAPIWorkspace { : undefined, globalHeaderOverrides: this.generatorsConfiguration?.api?.headers != null - ? this.generatorsConfiguration?.api?.headers + ? { ...this.generatorsConfiguration?.api } : undefined, taskContext: context, ir: openApiIr,