From ff54d7af78bf346d0f510dcfc97c6907995f45cf Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 14 Nov 2022 17:14:23 +0100 Subject: [PATCH] chore: use @swc/jest vs ts-jest (#1457) * chore: use @swc/jest vs ts-jest * chore: fix esm default import issue in tests --- config/copyServiceWorker.ts | 4 +- jest.config.js | 2 +- package.json | 3 +- test/jest.config.js | 6 +- .../scenarios/cookies-request.test.ts | 60 +++--- .../setup-server/scenarios/http.test.ts | 121 ++++++------ .../setup-server/scenarios/https.test.ts | 118 ++++++------ test/support/utils.ts | 27 +++ test/tsconfig.json | 3 +- yarn.lock | 176 ++++++++++++------ 10 files changed, 292 insertions(+), 228 deletions(-) diff --git a/config/copyServiceWorker.ts b/config/copyServiceWorker.ts index b447f298e..264ed4da2 100644 --- a/config/copyServiceWorker.ts +++ b/config/copyServiceWorker.ts @@ -3,6 +3,8 @@ import * as path from 'path' import chalk from 'chalk' import { until } from '@open-draft/until' +const { cyan } = chalk + /** * Copies the given Service Worker source file into the destination. * Injects the integrity checksum into the destination file. @@ -46,5 +48,5 @@ export default async function copyServiceWorker( throw new Error(`Failed to write file.\n${writeFileError.message}`) } - console.log('Service Worker copied to: %s', chalk.cyan(destFilePath)) + console.log('Service Worker copied to: %s', cyan(destFilePath)) } diff --git a/jest.config.js b/jest.config.js index 516f8170e..68450831a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,7 +2,7 @@ module.exports = { bail: true, roots: ['/src', '/cli'], transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': '@swc/jest', }, testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(j|t)sx?$', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], diff --git a/package.json b/package.json index 336b00511..bac62ed25 100644 --- a/package.json +++ b/package.json @@ -114,6 +114,8 @@ "@commitlint/config-conventional": "^16.0.0", "@open-draft/test-server": "^0.2.3", "@ossjs/release": "^0.4.0", + "@swc/core": "^1.3.15", + "@swc/jest": "^0.2.23", "@types/fs-extra": "^9.0.13", "@types/jest": "26", "@types/json-bigint": "^1.0.1", @@ -142,7 +144,6 @@ "rimraf": "^3.0.2", "simple-git-hooks": "^2.8.0", "statuses": "^2.0.0", - "ts-jest": "26", "ts-loader": "^9.2.6", "ts-node": "^10.1.0", "tsup": "^5.12.8", diff --git a/test/jest.config.js b/test/jest.config.js index df67b023f..5221364db 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -1,6 +1,8 @@ module.exports = { - preset: 'ts-jest', - testTimeout: 15000, + transform: { + '^.+\\.tsx?$': '@swc/jest', + }, + testTimeout: 10000, moduleNameMapper: { '^msw(.*)': '/..$1', }, diff --git a/test/msw-api/setup-server/scenarios/cookies-request.test.ts b/test/msw-api/setup-server/scenarios/cookies-request.test.ts index 6ae1dfe33..229aaa559 100644 --- a/test/msw-api/setup-server/scenarios/cookies-request.test.ts +++ b/test/msw-api/setup-server/scenarios/cookies-request.test.ts @@ -1,10 +1,14 @@ -import * as https from 'https' +/** + * @jest-environment node + */ +import https from 'https' import { rest } from 'msw' -import { setupServer, SetupServerApi } from 'msw/node' +import { setupServer } from 'msw/node' import { ServerApi, createServer } from '@open-draft/test-server' +import { waitForClientRequest } from '../../../support/utils' let httpServer: ServerApi -let server: SetupServerApi +const server = setupServer() beforeAll(async () => { httpServer = await createServer((app) => { @@ -13,12 +17,6 @@ beforeAll(async () => { }) }) - server = setupServer( - rest.get(httpServer.https.makeUrl('/user'), (req, res, ctx) => { - return res(ctx.json({ cookies: req.cookies })) - }), - ) - server.listen() }) @@ -27,34 +25,24 @@ afterAll(async () => { await httpServer.close() }) -test('has access to request cookies', (done) => { - let responseBody = '' +test('has access to request cookies', async () => { + server.use( + rest.get(httpServer.https.makeUrl('/user'), (req, res, ctx) => { + return res(ctx.json({ cookies: req.cookies })) + }), + ) + const url = new URL(httpServer.https.makeUrl('/user')) - https.get( - { - method: 'GET', - protocol: url.protocol, - host: url.host, - path: url.pathname, - headers: { - Cookie: 'auth-token=abc-123', - }, - }, - (res) => { - res.setEncoding('utf8') - res.on('error', done) - res.on('data', (chunk) => (responseBody += chunk)) - res.on('end', () => { - const json = JSON.parse(responseBody) - expect(json).toEqual({ - cookies: { - 'auth-token': 'abc-123', - }, - }) - - done() - }) + const request = https.get({ + protocol: url.protocol, + host: url.host, + path: url.pathname, + headers: { + Cookie: 'auth-token=abc-123', }, - ) + }) + const { responseText } = await waitForClientRequest(request) + + expect(responseText).toBe('{"cookies":{"auth-token":"abc-123"}}') }) diff --git a/test/msw-api/setup-server/scenarios/http.test.ts b/test/msw-api/setup-server/scenarios/http.test.ts index 5aff75a92..384a8d3f9 100644 --- a/test/msw-api/setup-server/scenarios/http.test.ts +++ b/test/msw-api/setup-server/scenarios/http.test.ts @@ -1,84 +1,75 @@ /** * @jest-environment node */ -import * as http from 'http' +/** + * @note Do not import as wildcard lest the ESM gods be displeased. + * Make sure "allowSyntheticDefaultImports" is true in tsconfig.json. + */ +import http from 'http' +import { ServerApi, createServer } from '@open-draft/test-server' import { rest } from 'msw' import { setupServer } from 'msw/node' +import { waitForClientRequest } from '../../../support/utils' + +let httpServer: ServerApi +const server = setupServer() -describe('setupServer / http', () => { - const server = setupServer( - rest.get('http://test.mswjs.io', (req, res, ctx) => { +beforeAll(async () => { + server.listen() + + httpServer = await createServer((app) => { + app.get('/resource', (_, res) => { + return res.status(500).send('original-response') + }) + }) +}) + +beforeEach(() => { + server.use( + rest.get(httpServer.http.makeUrl('/resource'), (req, res, ctx) => { return res( ctx.status(401), ctx.set('x-header', 'yes'), - ctx.json({ - firstName: 'John', - }), + ctx.json({ firstName: 'John' }), ) }), ) +}) - beforeAll(() => { - server.listen() - }) - - afterAll(() => { - server.close() - }) - - describe('given I perform a request using http.get', () => { - let res: http.IncomingMessage - let resBody = '' - - beforeAll((done) => { - http.get('http://test.mswjs.io', (message) => { - res = message - res.setEncoding('utf8') - res.on('data', (chunk) => (resBody += chunk)) - res.on('end', done) - }) - }) - - test('should return mocked status code', () => { - expect(res.statusCode).toEqual(401) - }) - - test('should return mocked headers', () => { - expect(res.headers).toHaveProperty('content-type', 'application/json') - expect(res.headers).toHaveProperty('x-header', 'yes') - }) - - test('should return mocked body', () => { - expect(resBody).toEqual('{"firstName":"John"}') - }) - }) - - describe('given I perform a request using http.request', () => { - let res: http.IncomingMessage - let resBody = '' +afterEach(() => { + server.resetHandlers() +}) - beforeAll((done) => { - const req = http.request('http://test.mswjs.io', (message) => { - res = message - res.setEncoding('utf8') - res.on('data', (chunk) => (resBody += chunk)) - res.on('end', done) - }) +afterAll(async () => { + server.close() + await httpServer.close() +}) - req.end() - }) +it('returns a mocked response to an "http.get" request', async () => { + const request = http.get(httpServer.http.makeUrl('/resource')) + const { response, responseText } = await waitForClientRequest(request) - test('should return mocked status code', () => { - expect(res.statusCode).toEqual(401) - }) + expect(response.statusCode).toBe(401) + expect(response.headers).toEqual( + expect.objectContaining({ + 'content-type': 'application/json', + 'x-header': 'yes', + }), + ) + expect(responseText).toBe('{"firstName":"John"}') +}) - test('should return mocked headers', () => { - expect(res.headers).toHaveProperty('content-type', 'application/json') - expect(res.headers).toHaveProperty('x-header', 'yes') - }) +it('returns a mocked response to an "http.request" request', async () => { + const request = http.request(httpServer.http.makeUrl('/resource')) + request.end() + const { response, responseText } = await waitForClientRequest(request) - test('should return mocked body', () => { - expect(resBody).toEqual('{"firstName":"John"}') - }) - }) + expect(response.statusCode).toBe(401) + expect(response.headers).toEqual( + expect.objectContaining({ + 'content-type': 'application/json', + 'x-header': 'yes', + }), + ) + expect(responseText).toBe('{"firstName":"John"}') }) diff --git a/test/msw-api/setup-server/scenarios/https.test.ts b/test/msw-api/setup-server/scenarios/https.test.ts index 27e80ab77..7c9fe7b64 100644 --- a/test/msw-api/setup-server/scenarios/https.test.ts +++ b/test/msw-api/setup-server/scenarios/https.test.ts @@ -1,85 +1,71 @@ /** * @jest-environment node */ -import * as https from 'https' -import { IncomingMessage } from 'http' +import https from 'https' +import { ServerApi, createServer } from '@open-draft/test-server' import { rest } from 'msw' import { setupServer } from 'msw/node' +import { waitForClientRequest } from '../../../support/utils' -describe('setupServer / https', () => { - const server = setupServer( - rest.get('https://test.mswjs.io', (req, res, ctx) => { +let httpServer: ServerApi +const server = setupServer() + +beforeAll(async () => { + server.listen() + + httpServer = await createServer((app) => { + app.get('/resource', (_, res) => { + return res.status(500).send('original-response') + }) + }) +}) + +beforeEach(() => { + server.use( + rest.get(httpServer.https.makeUrl('/resource'), (req, res, ctx) => { return res( ctx.status(401), ctx.set('x-header', 'yes'), - ctx.json({ - firstName: 'John', - }), + ctx.json({ firstName: 'John' }), ) }), ) +}) - beforeAll(() => { - server.listen() - }) - - afterAll(() => { - server.close() - }) - - describe('given I perform a request using https.get', () => { - let res: IncomingMessage - let resBody = '' - - beforeAll((done) => { - https.get('https://test.mswjs.io', (message) => { - res = message - res.setEncoding('utf8') - res.on('data', (chunk) => (resBody += chunk)) - res.on('end', done) - }) - }) - - test('should return mocked status code', () => { - expect(res.statusCode).toEqual(401) - }) - - test('should return mocked headers', () => { - expect(res.headers).toHaveProperty('content-type', 'application/json') - expect(res.headers).toHaveProperty('x-header', 'yes') - }) - - test('should return mocked body', () => { - expect(resBody).toEqual('{"firstName":"John"}') - }) - }) - - describe('given I perform a request using https.request', () => { - let res: IncomingMessage - let resBody = '' +afterEach(() => { + server.resetHandlers() +}) - beforeAll((done) => { - const req = https.request('https://test.mswjs.io', (message) => { - res = message - res.setEncoding('utf8') - res.on('data', (chunk) => (resBody += chunk)) - res.on('end', done) - }) +afterAll(async () => { + server.close() + await httpServer.close() +}) - req.end() - }) +it('returns a mocked response to an "https.get" request', async () => { + const request = https.get(httpServer.https.makeUrl('/resource')) + const { response, responseText } = await waitForClientRequest(request) - test('should return mocked status code', () => { - expect(res.statusCode).toEqual(401) - }) + expect(response.statusCode).toBe(401) + expect(response.headers).toEqual( + expect.objectContaining({ + 'content-type': 'application/json', + 'x-header': 'yes', + }), + ) + expect(responseText).toBe('{"firstName":"John"}') +}) - test('should return mocked headers', () => { - expect(res.headers).toHaveProperty('content-type', 'application/json') - expect(res.headers).toHaveProperty('x-header', 'yes') - }) +it('returns a mocked response to an "https.request" request', async () => { + const request = https.request(httpServer.https.makeUrl('/resource')) + request.end() + const { response, responseText } = await waitForClientRequest(request) - test('should return mocked body', () => { - expect(resBody).toEqual('{"firstName":"John"}') - }) - }) + expect(response.statusCode).toBe(401) + expect(response.headers).toEqual( + expect.objectContaining({ + 'content-type': 'application/json', + 'x-header': 'yes', + }), + ) + expect(responseText).toBe('{"firstName":"John"}') }) diff --git a/test/support/utils.ts b/test/support/utils.ts index 45e0ded8f..f783c5f04 100644 --- a/test/support/utils.ts +++ b/test/support/utils.ts @@ -1,5 +1,6 @@ import * as path from 'path' import { ChildProcess } from 'child_process' +import { ClientRequest, IncomingMessage } from 'http' export function sleep(duration: number) { return new Promise((resolve) => { @@ -43,3 +44,29 @@ export function clearCookies(): void { .replace(/=.*/, `=;expires=${new Date(0).toUTCString()};path=/`) }) } + +export async function waitForClientRequest(request: ClientRequest): Promise<{ + response: IncomingMessage + responseText: string +}> { + return new Promise((resolve, reject) => { + request.once('error', reject) + request.once('abort', () => reject(new Error('Request was aborted'))) + + request.on('response', (response) => { + response.once('error', reject) + + const responseChunks: Array = [] + + response.on('data', (chunk) => { + responseChunks.push(Buffer.from(chunk)) + }) + response.once('end', () => { + resolve({ + response, + responseText: Buffer.concat(responseChunks).toString('utf8'), + }) + }) + }) + }) +} diff --git a/test/tsconfig.json b/test/tsconfig.json index 7cc588052..4644efe66 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -1,9 +1,10 @@ { "compilerOptions": { + "strict": true, "target": "ES2015", "moduleResolution": "node", - "allowSyntheticDefaultImports": true, "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, "esModuleInterop": true, "declaration": false, "noEmit": true, diff --git a/yarn.lock b/yarn.lock index 73e9f9d8f..ee0b3a2dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1541,6 +1541,13 @@ slash "^3.0.0" strip-ansi "^6.0.0" +"@jest/create-cache-key-function@^27.4.2": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz#7448fae15602ea95c828f5eceed35c202a820b31" + integrity sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ== + dependencies: + "@jest/types" "^27.5.1" + "@jest/environment@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" @@ -1666,6 +1673,17 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -1820,6 +1838,80 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@swc/core-darwin-arm64@1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.15.tgz#889e4c2aba1641df6ba8f3255f8923a4d764fdcd" + integrity sha512-XDa4jtf+LsL7/cFPhlfeAfkLgwFufKQZ+0SmhRSKL8clA5Me1TU4zxmFoHNyDQZ0el8Q9dCDWOWn3e0Q32lHdQ== + +"@swc/core-darwin-x64@1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.15.tgz#5c7cb29d44ba0fbdf149df7a1629869328ff7a66" + integrity sha512-f3Dn3s6tx9JyZVWtftOkcO67IUkFHFTRRoJKXlbCxeut6ogudZSJdc42rYomjAiwWkSS8kNpsOic+cDw8EgksQ== + +"@swc/core-linux-arm-gnueabihf@1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.15.tgz#f4d31f321428b6fa32cdcadf5f9963961def2cf3" + integrity sha512-bjZByu6FKXGhF+z0EwrdC3hDGt/vQnEc1BF9lettEeCSMbOUdAjz8afbnYEu25p6Un8qgEj5xyQgsnLOzLFJ8g== + +"@swc/core-linux-arm64-gnu@1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.15.tgz#6f93caf14e10ca07d90dee87be585f93b8354108" + integrity sha512-/rm4+ck3oLC7qKi7q7IyqnPRg51HVVvpmcRPBbLrYPnD2m+FnL2uAPhOemAwM+GDv3eS+f5f8ye2Yz3hy99AtA== + +"@swc/core-linux-arm64-musl@1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.15.tgz#cc699b525fe1bcb7d404d03f56dec6cb55e532fe" + integrity sha512-TRJcHyBsW/empMTaHEPmVnIKAThI43lTG7xANwtsB8/31ZSIDUEosZ3fEqmLSBqwvCoQfp93++2MFNQGTwMwpQ== + +"@swc/core-linux-x64-gnu@1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.15.tgz#ad181324f97ed0d4519bd23a14a8104cba157d94" + integrity sha512-Xktb1uP4P9qNvyQ2nVPX2s+pAthWuTPmNeLO2NlS2jumzq01v4r3F64wLK7t31lvTEXyuiZSdfhE0yILcGmEqg== + +"@swc/core-linux-x64-musl@1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.15.tgz#4841c4f2435d848cc0d1fd50bf09c7c974fbae92" + integrity sha512-XUppG2CUE8guxKNpfhnbm2ukKdn0/hh+/t6tkQkbNm95CQqe0yiNMSZxUWIyf4wFcw1lymb15oiG8r34T+7iwQ== + +"@swc/core-win32-arm64-msvc@1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.15.tgz#1a8c7d068bc9a39663ab3339c0271a7b2a047169" + integrity sha512-gU1HFMrVAiLZaLmgN7LlsdWY5deIFjAvB84/kQzQNvPbnaDJbA9FXN7b0Wi9rn4WCmWmbZBj5H8O3UkCQV7WYw== + +"@swc/core-win32-ia32-msvc@1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.15.tgz#b0bbaa8b3b25953f5a3980f9bc9e83609912bdba" + integrity sha512-LmKqV6Vv455NaI7kv8P1xTbPCm8S1dNzI7EXb0A87Tm4Tzd5z6KnhDFCbvhMQjHixlq09V1szTdtN5YkIhMXEg== + +"@swc/core-win32-x64-msvc@1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.15.tgz#1b092b2eac1cf8c131945ae2ce4b816a37af8a10" + integrity sha512-hikhDyJCNyf0C9+b62MXywmTx72+T3cbVBJa9q7vgBV/cKA9z0qbiVMmozAGraIv/gSq9HLHR9Q2nWWWeJl7yg== + +"@swc/core@^1.3.15": + version "1.3.15" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.15.tgz#f2ebac4b4d03e1085358fd4cb48a8030a6341a3d" + integrity sha512-x5PYlmn2qFp8j0sl5vZHEdyA7SfjiqS7KgXSZfXydYiV1yFOaWQo2LvDjZ73fx3zhIR7oR96myDorglVpWdfhw== + optionalDependencies: + "@swc/core-darwin-arm64" "1.3.15" + "@swc/core-darwin-x64" "1.3.15" + "@swc/core-linux-arm-gnueabihf" "1.3.15" + "@swc/core-linux-arm64-gnu" "1.3.15" + "@swc/core-linux-arm64-musl" "1.3.15" + "@swc/core-linux-x64-gnu" "1.3.15" + "@swc/core-linux-x64-musl" "1.3.15" + "@swc/core-win32-arm64-msvc" "1.3.15" + "@swc/core-win32-ia32-msvc" "1.3.15" + "@swc/core-win32-x64-msvc" "1.3.15" + +"@swc/jest@^0.2.23": + version "0.2.23" + resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.23.tgz#0b7499d5927faaa090c5b7a4a0e35122968fef30" + integrity sha512-ZLj17XjHbPtNsgqjm83qizENw05emLkKGu3WuPUttcy9hkngl0/kcc7fDbcSBpADS0GUtsO+iKPjZFWVAtJSlA== + dependencies: + "@jest/create-cache-key-function" "^27.4.2" + jsonc-parser "^3.2.0" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -2204,6 +2296,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + "@types/yargs@^17.0.10": version "17.0.10" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" @@ -3229,13 +3328,6 @@ browserslist@^4.19.1: node-releases "^2.0.1" picocolors "^1.0.0" -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3248,11 +3340,6 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -buffer-from@1.x: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -4907,7 +4994,7 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -6569,7 +6656,7 @@ jest-snapshot@^26.6.2: pretty-format "^26.6.2" semver "^7.3.2" -jest-util@^26.1.0, jest-util@^26.6.2: +jest-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== @@ -6741,13 +6828,6 @@ json3@^3.3.3: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@2.x, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -6755,6 +6835,18 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -6984,7 +7076,7 @@ lodash.uniqby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= -lodash@4.x, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7031,7 +7123,7 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-error@1.x, make-error@^1.1.1: +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== @@ -7251,11 +7343,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@1.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -8688,18 +8775,18 @@ semver@7.3.5, semver@^7.3.5: dependencies: lru-cache "^6.0.0" -semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -9613,22 +9700,6 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -ts-jest@26: - version "26.5.6" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" - integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "^26.1.0" - json5 "2.x" - lodash "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.x" - ts-loader@^9.2.6: version "9.2.6" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.2.6.tgz#9937c4dd0a1e3dbbb5e433f8102a6601c6615d74" @@ -10423,11 +10494,6 @@ yaml@^2.1.1: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== -yargs-parser@20.x: - version "20.2.5" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.5.tgz#5d37729146d3f894f39fc94b6796f5b239513186" - integrity sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg== - yargs-parser@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"