diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 1b422a132..e14977715 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [10.x, 12.x, 13.x] + node-version: [10.x, 12.x, 14.x] steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 diff --git a/package.json b/package.json index f90143c56..e28498c08 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@manifoldco/swagger-to-ts", "description": "Generate TypeScript types from Swagger OpenAPI specs", "main": "dist/cjs", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.5", "engines": { "node": ">= 10.0.0" }, diff --git a/src/index.ts b/src/index.ts index 035bbd968..ae3c62701 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,3 @@ -import fs from "fs"; import path from "path"; import prettier from "prettier"; import { swaggerVersion } from "./utils"; @@ -36,21 +35,15 @@ export default function swaggerToTS( let prettierOptions: prettier.Options = { parser: "typescript" }; if (options && options.prettierConfig) { try { + const userOptions = prettier.resolveConfig.sync( + path.resolve(process.cwd(), options.prettierConfig) + ); prettierOptions = { ...prettierOptions, - ...JSON.parse( - fs.readFileSync( - path.resolve(process.cwd(), options.prettierConfig), - "utf8" - ) - ), + ...userOptions, }; } catch (err) { - console.error( - `❌ Prettier: couldn’t find '${ - options.prettierConfig - }' in '${path.dirname(process.cwd())}'` - ); + console.error(`❌ ${err}`); } } return prettier.format(output, prettierOptions); diff --git a/src/types/index.ts b/src/types/index.ts index d2c5d30a7..26ca6699b 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -11,7 +11,9 @@ export interface Property { } export interface SwaggerToTSOptions { + /** (optional) Path to Prettier config */ prettierConfig?: string; + /** (optional) Function to iterate over every schema object before transforming to TypeScript */ propertyMapper?: ( schemaObject: OpenAPI2SchemaObject | OpenAPI3SchemaObject, property: Property diff --git a/tests/bin/cli.test.ts b/tests/bin/cli.test.ts index 5610c9f75..0d055cb35 100644 --- a/tests/bin/cli.test.ts +++ b/tests/bin/cli.test.ts @@ -6,7 +6,7 @@ import { execSync } from 'child_process' // v3/index.test.ts. So this file is mainly for testing other flags. describe('cli', () => { - it('--prettier-config', () => { + it('--prettier-config (JSON)', () => { execSync(`../../pkg/bin/cli.js specs/petstore.yaml -o generated/petstore.ts --prettier-config .prettierrc`, { cwd: path.resolve(__dirname), }) @@ -14,4 +14,13 @@ describe('cli', () => { fs.readFileSync(path.resolve(__dirname, 'generated/petstore.ts'), 'utf8'), ) }) + + it('--prettier-config (.js)', () => { + execSync(`../../pkg/bin/cli.js specs/petstore.yaml -o generated/petstore.ts --prettier-config prettier.config.js`, { + cwd: path.resolve(__dirname), + }) + expect(fs.readFileSync(path.resolve(__dirname, 'expected/petstore.ts'), 'utf8')).toBe( + fs.readFileSync(path.resolve(__dirname, 'generated/petstore.ts'), 'utf8'), + ) + }) }) diff --git a/tests/bin/prettier.config.js b/tests/bin/prettier.config.js new file mode 100644 index 000000000..c0ce4cd04 --- /dev/null +++ b/tests/bin/prettier.config.js @@ -0,0 +1,6 @@ +module.exports = { + printWidth: 150, + semi: false, + singleQuote: true, + trailingComma: 'all', +}