From 0eb66918763d866d8453faf102053e3de9fff4ed Mon Sep 17 00:00:00 2001 From: Alan Cha Date: Fri, 15 Feb 2019 16:57:27 -0500 Subject: [PATCH] Added operationIdFieldName option Related to #108 Signed-off-by: Alan Cha --- packages/oasgraph-cli/README.md | 21 +++-- packages/oasgraph-cli/lib/oasgraph.js | 4 +- packages/oasgraph-cli/lib/oasgraph.js.map | 2 +- packages/oasgraph-cli/package.json | 6 +- packages/oasgraph-cli/src/oasgraph.ts | 4 +- packages/oasgraph/README.md | 2 + packages/oasgraph/lib/index.js | 14 ++- packages/oasgraph/lib/index.js.map | 2 +- packages/oasgraph/package.json | 4 +- packages/oasgraph/src/index.ts | 18 ++-- packages/oasgraph/src/types/options.ts | 12 +++ packages/oasgraph/test/example_oas2.test.js | 41 ++++++++ .../oasgraph/test/fixtures/example_oas2.json | 93 +++++++++++++++++++ 13 files changed, 194 insertions(+), 29 deletions(-) create mode 100644 packages/oasgraph/test/example_oas2.test.js create mode 100644 packages/oasgraph/test/fixtures/example_oas2.json diff --git a/packages/oasgraph-cli/README.md b/packages/oasgraph-cli/README.md index e82d2817..e1ac250b 100644 --- a/packages/oasgraph-cli/README.md +++ b/packages/oasgraph-cli/README.md @@ -24,16 +24,17 @@ npm i -g oasgraph-cli Usage: oasgraph [options] Options: - -V, --version output the version number - -p, --port select the port where the server will start - -u, --url select the base url which paths will be built on - -s, --strict throw an error if OASGraph cannot run without compensating for errors or missing data in the OAS - -a, --addSubOperations nest operations based on path hierarchy - -f, --fillEmptyResponses create placeholder schemas for operations with HTTP status code 204 (no response) rather than ignore them - --cors enable Cross-origin resource sharing (CORS) - --no-viewer do not create GraphQL viewer objects for passing authentication credentials - --save save schema to path and do not start server - -h, --help output usage information + -V, --version output the version number + -p, --port select the port where the server will start + -u, --url select the base url which paths will be built on + -s, --strict throw an error if OASGraph cannot run without compensating for errors or missing data in the OAS + -a, --addSubOperations nest operations based on path hierarchy + -f, --fillEmptyResponses create placeholder schemas for operations with HTTP status code 204 (no response) rather than ignore them + -o, --operationIdFieldNames create field names based on the operationId + --cors enable Cross-origin resource sharing (CORS) + --no-viewer do not create GraphQL viewer objects for passing authentication credentials + --save save schema to path and do not start server + -h, --help output usage information ``` The basic usage of the CLI takes the specified OAS, creates a GraphQL interface for it, and starts a server to host the GraphQL interface. diff --git a/packages/oasgraph-cli/lib/oasgraph.js b/packages/oasgraph-cli/lib/oasgraph.js index 77c08bb2..a884c011 100755 --- a/packages/oasgraph-cli/lib/oasgraph.js +++ b/packages/oasgraph-cli/lib/oasgraph.js @@ -23,6 +23,7 @@ program .option('-s, --strict', 'throw an error if OASGraph cannot run without compensating for errors or missing data in the OAS') .option('-a, --addSubOperations', 'nest operations based on path hierarchy') .option('-f, --fillEmptyResponses', 'create placeholder schemas for operations with HTTP status code 204 (no response) rather than ignore them') + .option('-o, --operationIdFieldNames', 'create field names based on the operationId') .option('--cors', 'enable Cross-origin resource sharing (CORS)') .option('--no-viewer', 'do not create GraphQL viewer objects for passing authentication credentials') .option('--save ', 'save schema to path and do not start server') @@ -115,7 +116,8 @@ function startGraphQLServer(oas, port) { viewer: program.viewer, addSubOperations: program.addSubOperations, fillEmptyResponses: program.fillEmptyResponses, - baseUrl: program.url + baseUrl: program.url, + operationIdFieldNames: program.operationIdFieldNames }) .then(({ schema, report }) => { console.log(JSON.stringify(report, null, 2)); diff --git a/packages/oasgraph-cli/lib/oasgraph.js.map b/packages/oasgraph-cli/lib/oasgraph.js.map index 8efe693d..1ac9550e 100644 --- a/packages/oasgraph-cli/lib/oasgraph.js.map +++ b/packages/oasgraph-cli/lib/oasgraph.js.map @@ -1 +1 @@ -{"version":3,"file":"oasgraph.js","sourceRoot":"","sources":["../src/oasgraph.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"oasgraph.js","sourceRoot":"","sources":["../src/oasgraph.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/oasgraph-cli/package.json b/packages/oasgraph-cli/package.json index 6fa41ab7..61af05aa 100644 --- a/packages/oasgraph-cli/package.json +++ b/packages/oasgraph-cli/package.json @@ -52,12 +52,12 @@ "request": "^2.88.0" }, "devDependencies": { - "@types/node": "^10.12.0", - "jest": "^23.6.0", + "@types/node": "^11.9.4", + "jest": "^24.1.0", "standard": "^12.0.1", "tslint": "^5.11.0", "tslint-config-standard": "^8.0.1", - "typescript": "^3.1.3" + "typescript": "^3.3.3" }, "bin": { "oasgraph": "./lib/oasgraph.js" diff --git a/packages/oasgraph-cli/src/oasgraph.ts b/packages/oasgraph-cli/src/oasgraph.ts index 5cda1c41..e6e68c5e 100644 --- a/packages/oasgraph-cli/src/oasgraph.ts +++ b/packages/oasgraph-cli/src/oasgraph.ts @@ -26,6 +26,7 @@ program .option('-s, --strict', 'throw an error if OASGraph cannot run without compensating for errors or missing data in the OAS') .option('-a, --addSubOperations', 'nest operations based on path hierarchy') .option('-f, --fillEmptyResponses', 'create placeholder schemas for operations with HTTP status code 204 (no response) rather than ignore them') + .option('-o, --operationIdFieldNames', 'create field names based on the operationId') .option('--cors', 'enable Cross-origin resource sharing (CORS)') .option('--no-viewer', 'do not create GraphQL viewer objects for passing authentication credentials') .option('--save ', 'save schema to path and do not start server') @@ -118,7 +119,8 @@ function startGraphQLServer(oas, port) { viewer: program.viewer, addSubOperations: program.addSubOperations, fillEmptyResponses: program.fillEmptyResponses, - baseUrl: program.url + baseUrl: program.url, + operationIdFieldNames: program.operationIdFieldNames }) .then(({schema, report}) => { console.log(JSON.stringify(report, null, 2)) diff --git a/packages/oasgraph/README.md b/packages/oasgraph/README.md index 5212996c..d5887620 100644 --- a/packages/oasgraph/README.md +++ b/packages/oasgraph/README.md @@ -81,6 +81,8 @@ The options object can contain the following properties: * `baseUrl` (type: `string`): Used to manual specify the base URL which all paths will be built on. Normally, OASGraph will select a base URL from the [server object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#serverObject) defined in the OAS. However, if the server object contains multiple URLs, OASGraph will randomly select one. The purpose of this option is to provide greater control over the base URL in these situations, especially when the OAS cannot be modified. This option may also prove to be useful in testing and development. +* `operationIdFieldNames` (type: `boolean`, default: `false`): By default, query field names are based on the return type type name and mutation field names are based on the [`operationId`](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#operation-object), which may be generated if it does not exist. This option forces OASGraph to only create field names based on the operationId. + Consider this example of passing options: ```javascript diff --git a/packages/oasgraph/lib/index.js b/packages/oasgraph/lib/index.js index dbb6e710..a3a6102a 100644 --- a/packages/oasgraph/lib/index.js +++ b/packages/oasgraph/lib/index.js @@ -47,6 +47,9 @@ function createGraphQlSchema(spec, options) { options.fillEmptyResponses = typeof options.fillEmptyResponses === 'boolean' ? options.fillEmptyResponses : false; + options.operationIdFieldNames = typeof options.operationIdFieldNames === 'boolean' + ? options.operationIdFieldNames + : false; options.report = { warnings: [], numOps: 0, @@ -72,7 +75,7 @@ exports.createGraphQlSchema = createGraphQlSchema; /** * Creates a GraphQL interface from the given OpenAPI Specification 3.0.x */ -function translateOpenApiToGraphQL(oas, { strict, headers, qs, viewer, tokenJSONpath, addSubOperations, sendOAuthTokenInQuery, report, fillEmptyResponses, baseUrl }) { +function translateOpenApiToGraphQL(oas, { strict, headers, qs, viewer, tokenJSONpath, addSubOperations, sendOAuthTokenInQuery, report, fillEmptyResponses, baseUrl, operationIdFieldNames }) { return __awaiter(this, void 0, void 0, function* () { let options = { headers, @@ -84,7 +87,8 @@ function translateOpenApiToGraphQL(oas, { strict, headers, qs, viewer, tokenJSON sendOAuthTokenInQuery, report, fillEmptyResponses, - baseUrl + baseUrl, + operationIdFieldNames }; log(`Options: ${JSON.stringify(options)}`); /** @@ -116,7 +120,8 @@ function translateOpenApiToGraphQL(oas, { strict, headers, qs, viewer, tokenJSON authQueryFields[securityRequirement] = {}; } // Avoid overwriting fields that return the same data: - if (fieldName in authQueryFields[securityRequirement]) { + if (fieldName in authQueryFields[securityRequirement] || + operationIdFieldNames) { fieldName = Oas3Tools.beautifyAndStore(operationId, data.saneMap); } if (fieldName in authQueryFields[securityRequirement]) { @@ -132,7 +137,8 @@ function translateOpenApiToGraphQL(oas, { strict, headers, qs, viewer, tokenJSON } else { // Avoid overwriting fields that return the same data: - if (fieldName in queryFields) { + if (fieldName in queryFields || + operationIdFieldNames) { fieldName = Oas3Tools.beautifyAndStore(operationId, data.saneMap); } if (fieldName in queryFields) { diff --git a/packages/oasgraph/lib/index.js.map b/packages/oasgraph/lib/index.js.map index 59ef21b2..f3514808 100644 --- a/packages/oasgraph/lib/index.js.map +++ b/packages/oasgraph/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/oasgraph/package.json b/packages/oasgraph/package.json index 951de209..4e652e62 100644 --- a/packages/oasgraph/package.json +++ b/packages/oasgraph/package.json @@ -61,7 +61,7 @@ }, "devDependencies": { "@types/graphql": "^14.0.3", - "@types/node": "^10.12.0", + "@types/node": "^11.9.4", "body-parser": "^1.18.3", "express": "^4.16.4", "express-graphql": "^0.7.1", @@ -69,7 +69,7 @@ "isomorphic-git": "^0.51.6", "jest": "^24.0.0", "js-yaml": "^3.12.0", - "nodemon": "^1.18.5", + "nodemon": "^1.18.10", "rimraf": "^2.6.1", "simple-statistics": "^7.0.0", "standard": "^12.0.1", diff --git a/packages/oasgraph/src/index.ts b/packages/oasgraph/src/index.ts index c970f1ab..09b27359 100644 --- a/packages/oasgraph/src/index.ts +++ b/packages/oasgraph/src/index.ts @@ -83,7 +83,6 @@ export async function createGraphQlSchema ( // deal with option defaults: // @ts-ignore if (typeof options === 'undefined') options = {} - options.strict = typeof options.strict === 'boolean' ? options.strict : false @@ -99,7 +98,10 @@ export async function createGraphQlSchema ( options.fillEmptyResponses = typeof options.fillEmptyResponses === 'boolean' ? options.fillEmptyResponses : false - + options.operationIdFieldNames = typeof options.operationIdFieldNames === 'boolean' + ? options.operationIdFieldNames + : false + options.report = { warnings: [], numOps: 0, @@ -137,7 +139,8 @@ async function translateOpenApiToGraphQL ( sendOAuthTokenInQuery, report, fillEmptyResponses, - baseUrl + baseUrl, + operationIdFieldNames }: Options ): Promise<{ schema: GraphQLSchema, report: Report }> { let options = { @@ -150,7 +153,8 @@ async function translateOpenApiToGraphQL ( sendOAuthTokenInQuery, report, fillEmptyResponses, - baseUrl + baseUrl, + operationIdFieldNames } log(`Options: ${JSON.stringify(options)}`) @@ -184,7 +188,8 @@ async function translateOpenApiToGraphQL ( authQueryFields[securityRequirement] = {} } // Avoid overwriting fields that return the same data: - if (fieldName in authQueryFields[securityRequirement]) { + if (fieldName in authQueryFields[securityRequirement] || + operationIdFieldNames) { fieldName = Oas3Tools.beautifyAndStore(operationId, data.saneMap) } @@ -201,7 +206,8 @@ async function translateOpenApiToGraphQL ( } } else { // Avoid overwriting fields that return the same data: - if (fieldName in queryFields) { + if (fieldName in queryFields || + operationIdFieldNames) { fieldName = Oas3Tools.beautifyAndStore(operationId, data.saneMap) } diff --git a/packages/oasgraph/src/types/options.ts b/packages/oasgraph/src/types/options.ts index f56c634d..513fb132 100644 --- a/packages/oasgraph/src/types/options.ts +++ b/packages/oasgraph/src/types/options.ts @@ -82,4 +82,16 @@ export type Options = { * Overrides the server object in the OAS. */ baseUrl?: string + + /** + * Field names can only be beautified operationIds + * + * By default, query field names are based on the return type type name and + * mutation field names are based on the operationId, which may be generated + * if it does not exist. + * + * This option forces OASGraph to only create field names based on the + * operationId. + */ + operationIdFieldNames: boolean } diff --git a/packages/oasgraph/test/example_oas2.test.js b/packages/oasgraph/test/example_oas2.test.js new file mode 100644 index 00000000..2012d4be --- /dev/null +++ b/packages/oasgraph/test/example_oas2.test.js @@ -0,0 +1,41 @@ +// Copyright IBM Corp. 2017,2018. All Rights Reserved. +// Node module: oasgraph +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict' + +/* globals beforeAll, test, expect */ + +const OasGraph = require('../lib/index.js') + +/** + * Set up the schema first + */ +let oas = require('./fixtures/example_oas2.json') +let createdSchema +beforeAll(() => { + return OasGraph.createGraphQlSchema(oas, { operationIdFieldNames: true }) + .then(({schema, report}) => { + createdSchema = schema + console.log(schema._typeMap + .Query + .getFields()) + }) +}) + +test('The option operationIdFieldNames should allow all operations to be present', () => { + let oasGetCount = 0 + for (let path in oas.paths) { + for (let method in oas.paths[path]) { + if (method === 'get') oasGetCount++ + } + } + + let gqlTypes = Object.keys(createdSchema + ._typeMap + .Query + .getFields() + ).length + expect(gqlTypes).toEqual(oasGetCount) +}) diff --git a/packages/oasgraph/test/fixtures/example_oas2.json b/packages/oasgraph/test/fixtures/example_oas2.json new file mode 100644 index 00000000..cce1e44e --- /dev/null +++ b/packages/oasgraph/test/fixtures/example_oas2.json @@ -0,0 +1,93 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Example API 2", + "description": "An API to test converting Open API Specs 3.0 to GraphQL", + "version": "1.0.0", + "termsOfService": "http://example.com/terms/", + "contact": { + "name": "Erik Wittern", + "url": "http://www.example.com/support", + "email": "witternj@us.ibm.com" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + } + }, + "externalDocs": { + "url": "http://example.com/docs", + "description": "Some more natural language description." + }, + "tags": [{ + "name": "test", + "description": "Indicates this API is for testing" + }], + "servers": [ + { + "url": "http://localhost:{port}/{basePath}", + "description": "The location of the local test server.", + "variables": { + "port": { + "default": "3000" + }, + "basePath": { + "default": "api" + } + } + } + ], + "paths": { + "/user": { + "get": { + "description": "Return a user.", + "responses": { + "202": { + "description": "A user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/user" + } + } + } + } + } + } + }, + "/user2": { + "get": { + "operationId": "User", + "description": "Return a user.", + "responses": { + "202": { + "description": "A user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/user" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "user": { + "type": "object", + "description": "A user represents a natural person", + "properties": { + "name": { + "type": "string", + "description": "The legal name of a user" + } + } + } + } + }, + "security": [ + ] +}