diff --git a/README.md b/README.md index cfe6b12..1632eb3 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Check out the use case description from eslint-remote-tester's documentation: [P | :-----------------------------: | :------------------: | | `v1` | `1.0.1` or above | | `v2` | `1.0.1` or above | +| `v3` | `2.1.1` or above | ## Configuration: diff --git a/package.json b/package.json index 8dec528..27bb160 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@actions/core": "^1.2.6", "@actions/exec": "^1.0.4", "@actions/github": "^4.0.0", - "eslint-remote-tester": "^1.2.0", + "eslint-remote-tester": "^2.1.1", "semver": "^7.3.4" }, "devDependencies": { @@ -41,6 +41,7 @@ "prettier": "^2.2.1", "rimraf": "^3.0.2", "ts-jest": "24", + "ts-node": "^10.4.0", "typescript": "^4.1.3" }, "husky": { diff --git a/src/peer-dependencies.ts b/src/peer-dependencies.ts index 20b4fc3..a16ab7c 100644 --- a/src/peer-dependencies.ts +++ b/src/peer-dependencies.ts @@ -21,7 +21,7 @@ interface DependencyInfo { // Changes to minVersion's require major release const DEPENDENCY_TO_INFO: Record = { 'eslint-remote-tester': { - minVersion: '1.0.1', + minVersion: '2.1.1', exportPath: 'eslint-remote-tester/dist/exports-for-compare-action', packageJsonPath: 'eslint-remote-tester/package.json', bin: 'eslint-remote-tester', diff --git a/src/run-tester.ts b/src/run-tester.ts index 974bfe8..862fcb4 100644 --- a/src/run-tester.ts +++ b/src/run-tester.ts @@ -1,14 +1,14 @@ import fs from 'fs'; import path from 'path'; import { exec } from '@actions/exec'; -import { Config } from 'eslint-remote-tester/dist/exports-for-compare-action'; +import type { Config } from 'eslint-remote-tester'; import { requirePeerDependency, ESLINT_REMOTE_TESTER_BIN, } from './peer-dependencies'; -const INTERNAL_CONFIG = './eslint-remote-tester-runner-internal.config.js'; +const INTERNAL_CONFIG = './eslint-remote-tester-runner-internal.config'; export const RESULTS_TMP = '/tmp/results.json'; /** @@ -19,19 +19,7 @@ const DEFAULT_CONFIG: Partial = { CI: true, }; -// prettier-ignore -const CONFIGURATION_TEMPLATE = ( - pathToUsersConfiguration: string -) => - `// Generated by eslint-remote-tester-run-action -const fs = require('fs'); - -// Load user's eslint-remote-tester.config.js -const usersConfig = require('${pathToUsersConfiguration}'); - -module.exports = { - ...usersConfig, - +const CONFIGURATION_TEMPLATE_BASE = ` // Values from eslint-remote-tester-run-action's default configuration ...${JSON.stringify(DEFAULT_CONFIG, null, 4)}, @@ -43,7 +31,35 @@ module.exports = { await usersConfig.onComplete(results, comparisonResults, repositoryCount); } } +`; + +const CONFIGURATION_TEMPLATE_JS = (pathToUsersConfiguration: string) => + `// Generated by eslint-remote-tester-run-action +const fs = require('fs'); + +// Load user's eslint-remote-tester.config.js +const usersConfig = require('${pathToUsersConfiguration}'); + +module.exports = { + ...usersConfig, + ${CONFIGURATION_TEMPLATE_BASE} +}; +`; + +const CONFIGURATION_TEMPLATE_TS = (pathToUsersConfiguration: string) => + `// Generated by eslint-remote-tester-run-action +import fs from 'fs'; +import type { Config } from 'eslint-remote-tester'; + +// Load user's eslint-remote-tester.config.ts +import usersConfig from '${pathToUsersConfiguration.replace(/\.ts$/, '')}'; + +const config: Config = { + ...usersConfig, + ${CONFIGURATION_TEMPLATE_BASE} }; + +export default config; `; /** @@ -65,27 +81,33 @@ export default async function runTester(configLocation: string): Promise { ); } + const extension = usersConfigLocation.split('.').pop(); + const configTemplate = + extension === 'ts' + ? CONFIGURATION_TEMPLATE_TS + : CONFIGURATION_TEMPLATE_JS; + const createdConfig = `${INTERNAL_CONFIG}.${extension}`; + // Write eslint-remote-tester configuration file - fs.writeFileSync( - INTERNAL_CONFIG, - CONFIGURATION_TEMPLATE(usersConfigLocation) - ); + fs.writeFileSync(createdConfig, configTemplate(usersConfigLocation)); + const { loadConfig, validateConfig } = requirePeerDependency( + 'eslint-remote-tester' + ); let config: Config; // Useless try-catch required by esbuild // eslint-disable-next-line no-useless-catch try { - config = require(path.resolve(INTERNAL_CONFIG)); + config = loadConfig(path.resolve(createdConfig)); } catch (e) { throw e; } // Validate configuration before run - const { validateConfig } = requirePeerDependency('eslint-remote-tester'); await validateConfig(config, false); - await exec(`${ESLINT_REMOTE_TESTER_BIN} --config ${INTERNAL_CONFIG}`, [], { + await exec(`${ESLINT_REMOTE_TESTER_BIN} --config ${createdConfig}`, [], { ignoreReturnCode: true, env: { ...process.env, NODE_OPTIONS: '--max_old_space_size=5120' }, }); diff --git a/test/eslint-remote-tester.typescript.config.ts b/test/eslint-remote-tester.typescript.config.ts new file mode 100644 index 0000000..9e0200e --- /dev/null +++ b/test/eslint-remote-tester.typescript.config.ts @@ -0,0 +1,12 @@ +import type { Config } from 'eslint-remote-tester'; + +const config: Config = { + repositories: ['AriPerkkio/eslint-remote-tester-integration-test-target'], + extensions: ['.ts'], + eslintrc: { + root: true, + extends: ['eslint:recommended'], + }, +}; + +export default config; diff --git a/test/run-tester.test.ts b/test/run-tester.test.ts index 1b011ea..7d8bf5e 100644 --- a/test/run-tester.test.ts +++ b/test/run-tester.test.ts @@ -7,19 +7,20 @@ import { ESLINT_REMOTE_TESTER_BIN } from '../src/peer-dependencies'; import { sanitizeStackTrace } from './utils'; import { Config } from 'eslint-remote-tester/dist/exports-for-compare-action'; -const EXPECTED_RUN_CONFIG = './eslint-remote-tester-runner-internal.config.js'; -const CONFIG = './test/eslint-remote-tester.config.js'; +const EXPECTED_RUN_CONFIG = './eslint-remote-tester-runner-internal.config'; +const CONFIG_JS = './test/eslint-remote-tester.config.js'; +const CONFIG_TS = './test/eslint-remote-tester.typescript.config.ts'; const INVALID_CONFIG = './test/eslint-remote-tester.invalid.config.js'; const CONFIG_WITH_ON_COMPLETE = './test/eslint-remote-tester.config.onComplete.js'; jest.mock('@actions/exec', () => ({ exec: jest.fn() })); -function readRunConfig() { +function readRunConfig(extension: 'js' | 'ts') { let content: Config; jest.isolateModules(() => { - content = require(resolve(EXPECTED_RUN_CONFIG)); + content = require(resolve(`${EXPECTED_RUN_CONFIG}.${extension}`)); }); return content!; @@ -28,20 +29,24 @@ function readRunConfig() { function cleanup() { jest.resetModules(); - if (fs.existsSync(EXPECTED_RUN_CONFIG)) { - fs.unlinkSync(EXPECTED_RUN_CONFIG); - } + ['js', 'ts'].forEach(extension => { + const name = `${EXPECTED_RUN_CONFIG}.${extension}`; + + if (fs.existsSync(name)) { + fs.unlinkSync(name); + } + }); } describe('run-tester', () => { beforeEach(cleanup); afterEach(cleanup); - test('runs eslint-remote-tester with provided configuration', async () => { - await runTester(CONFIG); + test('runs eslint-remote-tester with provided Javascript configuration', async () => { + await runTester(CONFIG_JS); expect(exec).toHaveBeenCalledWith( - `${ESLINT_REMOTE_TESTER_BIN} --config ${EXPECTED_RUN_CONFIG}`, + `${ESLINT_REMOTE_TESTER_BIN} --config ${EXPECTED_RUN_CONFIG}.js`, [], { ignoreReturnCode: true, @@ -52,6 +57,85 @@ describe('run-tester', () => { ); }); + test('creates CommonJS module when using Javascript configuration file', async () => { + await runTester(CONFIG_JS); + + const configContents = fs.readFileSync( + `${EXPECTED_RUN_CONFIG}.js`, + 'utf8' + ); + + expect(sanitizeStackTrace(configContents)).toMatchInlineSnapshot(` + "// Generated by eslint-remote-tester-run-action + const fs = require('fs'); + + // Load user's eslint-remote-tester.config.js + const usersConfig = require('/test/eslint-remote-tester.config.js'); + + module.exports = { + ...usersConfig, + + // Values from eslint-remote-tester-run-action's default configuration + ...{ + \\"cache\\": false, + \\"CI\\": true + }, + + onComplete: async function onComplete(results, comparisonResults, repositoryCount) { + // Write results to cache + fs.writeFileSync('/tmp/results.json', JSON.stringify({ results, repositoryCount })); + + if(usersConfig.onComplete) { + await usersConfig.onComplete(results, comparisonResults, repositoryCount); + } + } + + }; + " + `); + }); + + test('creates ES module when using Typescript configuration file', async () => { + await runTester(CONFIG_TS); + + const configContents = fs.readFileSync( + `${EXPECTED_RUN_CONFIG}.ts`, + 'utf8' + ); + + expect(sanitizeStackTrace(configContents)).toMatchInlineSnapshot(` + "// Generated by eslint-remote-tester-run-action + import fs from 'fs'; + import type { Config } from 'eslint-remote-tester'; + + // Load user's eslint-remote-tester.config.ts + import usersConfig from '/test/eslint-remote-tester.typescript.config'; + + const config: Config = { + ...usersConfig, + + // Values from eslint-remote-tester-run-action's default configuration + ...{ + \\"cache\\": false, + \\"CI\\": true + }, + + onComplete: async function onComplete(results, comparisonResults, repositoryCount) { + // Write results to cache + fs.writeFileSync('/tmp/results.json', JSON.stringify({ results, repositoryCount })); + + if(usersConfig.onComplete) { + await usersConfig.onComplete(results, comparisonResults, repositoryCount); + } + } + + }; + + export default config; + " + `); + }); + test('throws if given configuration does not exist', () => { return expect(runTester('./non-existing-config')).rejects.toThrowError( /(?=.*Unable to find eslint-remote-tester config with path)(?=.*non-existing-config)/ @@ -61,7 +145,7 @@ describe('run-tester', () => { test('uses onComplete from users configuration', async () => { await runTester(CONFIG_WITH_ON_COMPLETE); - expect(sanitizeStackTrace(readRunConfig().onComplete!.toString())) + expect(sanitizeStackTrace(readRunConfig('js').onComplete!.toString())) .toMatchInlineSnapshot(` "async function onComplete(results, comparisonResults, repositoryCount) { // Write results to cache @@ -75,15 +159,15 @@ describe('run-tester', () => { }); test('cache is disabled by default', async () => { - await runTester(CONFIG); + await runTester(CONFIG_JS); - expect(readRunConfig().cache).toBe(false); + expect(readRunConfig('js').cache).toBe(false); }); test('CI is enabled by default', async () => { - await runTester(CONFIG); + await runTester(CONFIG_JS); - expect(readRunConfig().CI).toBe(true); + expect(readRunConfig('js').CI).toBe(true); }); test('configuration is validated', () => { diff --git a/yarn.lock b/yarn.lock index ead8617..49371f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -423,6 +423,18 @@ resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-11.0.0.tgz#719cf05fcc1abb6533610a2e0f5dd1e61eac14fe" integrity sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ== +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== + +"@cspotcode/source-map-support@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" + integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== + dependencies: + "@cspotcode/source-map-consumer" "0.8.0" + "@eslint/eslintrc@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" @@ -724,6 +736,26 @@ resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== +"@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + +"@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + +"@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + +"@tsconfig/node16@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" + integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + "@types/babel__core@^7.1.0": version "7.1.14" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" @@ -975,6 +1007,11 @@ acorn-walk@^6.0.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^5.5.3: version "5.7.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" @@ -990,6 +1027,11 @@ acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.4.1: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -1080,6 +1122,11 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1641,6 +1688,11 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -1790,6 +1842,11 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1952,17 +2009,17 @@ eslint-plugin-prettier@^3.3.1: dependencies: prettier-linter-helpers "^1.0.0" -eslint-remote-tester@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eslint-remote-tester/-/eslint-remote-tester-1.2.0.tgz#eea8cb72b60de530b0f10a2af0d54c13e0713f95" - integrity sha512-VwippmgzkMbcLG3qK6JekmN1K1LfKXHVLh++xz+8jBZddWxEI+XMcZk9fOVPTMuNmJOdHogMgp/sptPfaBZC3Q== +eslint-remote-tester@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-remote-tester/-/eslint-remote-tester-2.1.1.tgz#aec0bf04f8811a813853355adc6375edbff76847" + integrity sha512-zRawWUuBvRrFv5UbvTweeirPSYmc9z/RkvThZ42da1Ca4/LxKq/kR1BH105Ep8AKhvSwjXQn6KXp9C7k/5UQfA== dependencies: "@babel/code-frame" "^7.12.13" JSONStream "^1.3.5" chalk "^4.1.0" ink "^3.0.8" object-hash "^2.1.1" - react "^16.14.0" + react ">=16.8.0" simple-git "^2.20.1" eslint-scope@^5.0.0, eslint-scope@^5.1.1: @@ -3735,7 +3792,7 @@ make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-error@1.x: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -4485,14 +4542,13 @@ react-reconciler@^0.24.0: prop-types "^15.6.2" scheduler "^0.18.0" -react@^16.14.0: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== +react@>=16.8.0: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" read-pkg-up@^4.0.0: version "4.0.0" @@ -5398,6 +5454,24 @@ ts-jest@24: semver "^5.5" yargs-parser "10.x" +ts-node@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" + integrity sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A== + dependencies: + "@cspotcode/source-map-support" "0.7.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + yn "3.1.1" + tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -5822,6 +5896,11 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"