From 39c38b50ee710fd56ad07dfb4c4463b57427eb79 Mon Sep 17 00:00:00 2001 From: JounQin Date: Sun, 14 Aug 2022 11:01:13 +0800 Subject: [PATCH] feat: make the cli work with/without `prettier-eslint` peer (#438) BREAKING CHANGE: bump all upgradable (dev)Dependencies except pure ESM --- package.json | 10 +++++++++- src/format-files.js | 2 +- src/format-files.test.js | 2 +- src/prettier-eslint.js | 17 +++++++++++++++++ test/tests/cli.spec.js | 2 +- 5 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 src/prettier-eslint.js diff --git a/package.json b/package.json index 6135fa8..c4758ab 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,16 @@ "JounQin (https://www.1stG.me) " ], "license": "MIT", + "peerDependencies": { + "prettier-eslint": "*" + }, + "peerDependenciesMeta": { + "prettier-eslint": { + "optional": true + } + }, "dependencies": { + "@prettier/eslint": "npm:prettier-eslint@^15.0.1", "arrify": "^2.0.1", "boolify": "^1.0.1", "camelcase-keys": "^7.0.2", @@ -42,7 +51,6 @@ "lodash.memoize": "^4.1.2", "loglevel-colored-level-prefix": "^1.0.0", "messageformat": "^2.3.0", - "prettier-eslint": "^15.0.1", "rxjs": "^7.5.6", "yargs": "^13.1.1" }, diff --git a/src/format-files.js b/src/format-files.js index 911917a..610934d 100644 --- a/src/format-files.js +++ b/src/format-files.js @@ -5,7 +5,6 @@ import fs from 'fs'; import glob from 'glob'; import { bindNodeCallback, from, of } from 'rxjs'; import { catchError, concatAll, distinct, map, mergeMap } from 'rxjs/operators'; -import format from 'prettier-eslint'; import chalk from 'chalk'; import getStdin from 'get-stdin'; import nodeIgnore from 'ignore'; @@ -13,6 +12,7 @@ import findUp from 'find-up'; import memoize from 'lodash.memoize'; import indentString from 'indent-string'; import getLogger from 'loglevel-colored-level-prefix'; +import format from './prettier-eslint'; import * as messages from './messages'; const LINE_SEPERATOR_REGEX = /(\r|\n|\r\n)/; diff --git a/src/format-files.test.js b/src/format-files.test.js index bc7bae2..cb96654 100644 --- a/src/format-files.test.js +++ b/src/format-files.test.js @@ -1,10 +1,10 @@ /* eslint no-console:0 */ import fsMock from 'fs'; import findUpMock from 'find-up'; -import formatMock from 'prettier-eslint'; import globMock from 'glob'; import mockGetStdin from 'get-stdin'; import getLogger from 'loglevel-colored-level-prefix'; +import formatMock from './prettier-eslint'; import formatFiles from './format-files'; jest.mock('fs'); diff --git a/src/prettier-eslint.js b/src/prettier-eslint.js new file mode 100644 index 0000000..47178b4 --- /dev/null +++ b/src/prettier-eslint.js @@ -0,0 +1,17 @@ +const getLogger = require('loglevel-colored-level-prefix'); + +const logger = getLogger({ prefix: 'prettier-eslint-cli' }); + +try { + // if `prettier-eslint` is installed by the user manually + module.exports = require('prettier-eslint'); +} catch (err) /* istanbul ignore next */ { + logger.info('We detected that no `prettier-eslint` is installed.'); + logger.info('We will use our internal fallback one instead.'); + logger.info( + 'You can install `prettier-eslint` as dependency to skip this message.' + ); + + // it is an internal dependency using `prettier-eslint` as fallback + module.exports = require('@prettier/eslint'); +} diff --git a/test/tests/cli.spec.js b/test/tests/cli.spec.js index 82a8e86..6adc8c0 100644 --- a/test/tests/cli.spec.js +++ b/test/tests/cli.spec.js @@ -24,7 +24,7 @@ test('help outputs usage information and flags', async () => { // terminal I think)... const stdout = await runPrettierESLintCLI('--help'); expect(stdout).toMatch(/Usage:.*?.../); - expect(stdout).toContain('Options:\n'); + expect(stdout).toContain('Valid options:\n'); // just a sanity check. // If it's ever longer than 2000 then we've probably got a problem... // eslint-disable-next-line jest/no-conditional-in-test