diff --git a/packages/whook-cors/src/__snapshots__/index.test.js.snap b/packages/whook-cors/src/__snapshots__/index.test.js.snap index 063f62da..1bc2c71e 100644 --- a/packages/whook-cors/src/__snapshots__/index.test.js.snap +++ b/packages/whook-cors/src/__snapshots__/index.test.js.snap @@ -45,16 +45,24 @@ Object { }, "/users/{userid}": Object { "head": Object { - "operationId": "ping", + "operationId": "getUser", "parameters": Array [ Object { "in": "path", "name": "userId", + "required": true, "type": "number", }, Object { "in": "query", "name": "full", + "required": true, + "type": "boolean", + }, + Object { + "in": "query", + "name": "retry", + "required": false, "type": "boolean", }, ], @@ -63,7 +71,7 @@ Object { "description": "The user", }, }, - "summary": "Checks API's availability.", + "summary": "Return a user.", }, "options": Object { "operationId": "optionsWithCORS", @@ -71,11 +79,19 @@ Object { Object { "in": "path", "name": "userId", + "required": true, "type": "number", }, Object { "in": "query", "name": "full", + "required": false, + "type": "boolean", + }, + Object { + "in": "query", + "name": "retry", + "required": false, "type": "boolean", }, ], @@ -90,7 +106,7 @@ Object { ], "x-whook": Object { "private": true, - "sourceOperationId": "ping", + "sourceOperationId": "getUser", "suffix": "CORS", "type": "http", }, diff --git a/packages/whook-cors/src/index.js b/packages/whook-cors/src/index.js index e44c29dc..1cac1fdb 100644 --- a/packages/whook-cors/src/index.js +++ b/packages/whook-cors/src/index.js @@ -48,7 +48,16 @@ export async function augmentAPIWithCORS(API) { const operations = await getOpenAPIOperations(await flattenOpenAPI(API)); return operations.reduce((newAPI, operation) => { + if ('options' === operation.method) { + return newAPI; + } + const existingOperation = newAPI.paths[operation.path].options; + + if (existingOperation) { + return newAPI; + } + const whookConfig = { type: 'http', ...(operation['x-whook'] || {}), @@ -60,12 +69,6 @@ export async function augmentAPIWithCORS(API) { if (whookConfig.type !== 'http') { return newAPI; } - if ('options' === operation.method) { - return newAPI; - } - if (existingOperation) { - return newAPI; - } newAPI.paths[operation.path].options = { operationId: 'optionsWithCORS', @@ -74,9 +77,14 @@ export async function augmentAPIWithCORS(API) { 'x-whook': { ...whookConfig, }, - parameters: (operation.parameters || []).filter( - parameter => 'path' === parameter.in || 'query' === parameter.in, - ), + parameters: (operation.parameters || []) + .filter( + parameter => 'path' === parameter.in || 'query' === parameter.in, + ) + .map(parameter => ({ + ...parameter, + required: 'path' === parameter.in, + })), responses: { 200: { description: 'CORS sent.', diff --git a/packages/whook-cors/src/index.test.js b/packages/whook-cors/src/index.test.js index 2b5ee9cb..46f334e7 100644 --- a/packages/whook-cors/src/index.test.js +++ b/packages/whook-cors/src/index.test.js @@ -89,18 +89,26 @@ describe('augmentAPIWithCORS()', () => { }, '/users/{userid}': { head: { - operationId: 'ping', - summary: "Checks API's availability.", + operationId: 'getUser', + summary: 'Return a user.', parameters: [ { in: 'path', name: 'userId', type: 'number', + required: true, }, { in: 'query', name: 'full', type: 'boolean', + required: true, + }, + { + in: 'query', + name: 'retry', + type: 'boolean', + required: false, }, ], responses: {