From 5d04372f85698db7e2e7b95e3f974b0abb66ab3f Mon Sep 17 00:00:00 2001 From: David Tanner Date: Tue, 28 Jun 2022 14:15:04 -0600 Subject: [PATCH 1/4] feat!: Convert to typescript --- .eslintrc.json | 2 +- .github/workflows/pr-branch-build.yml | 9 +- .github/workflows/release.yaml | 15 +- .gitignore | 3 + jest.config.ts | 41 + package.json | 35 +- src/ValidationError.js | 10 - src/ValidationError.ts | 9 + src/{alphaProxy.js => alphaProxy.ts} | 20 +- src/cli.js | 59 -- src/cli.ts | 65 ++ src/plugins/headers.js | 38 - src/plugins/headers.ts | 43 + src/plugins/method.js | 12 - src/plugins/method.ts | 15 + src/plugins/payload.js | 11 - src/plugins/payload.ts | 14 + src/plugins/proxy-port.js | 11 - src/plugins/proxy-port.ts | 14 + src/plugins/proxy.js | 13 - src/plugins/proxy.ts | 16 + src/plugins/url.js | 7 - src/plugins/url.ts | 9 + ...{validate-status.js => validate-status.ts} | 11 +- src/plugins/version.js | 23 - src/plugins/version.ts | 23 + src/types.ts | 19 + src/utils.ts | 14 + test/{proxy.test.js => proxy.test.ts} | 14 +- ...eaders.test.js => request-headers.test.ts} | 46 +- ...ethods.test.js => request-methods.test.ts} | 9 +- ...ayload.test.js => request-payload.test.ts} | 10 +- ...request.test.js => simple-request.test.ts} | 8 +- test/utils.js | 95 --- test/utils.ts | 99 +++ ...status.test.js => validate-status.test.ts} | 12 +- test/{version.test.js => version.test.ts} | 2 +- tsconfig.build.json | 11 + tsconfig.json | 11 + yarn.lock | 766 ++++++++++-------- 40 files changed, 927 insertions(+), 717 deletions(-) create mode 100644 jest.config.ts delete mode 100644 src/ValidationError.js create mode 100644 src/ValidationError.ts rename src/{alphaProxy.js => alphaProxy.ts} (56%) delete mode 100755 src/cli.js create mode 100755 src/cli.ts delete mode 100644 src/plugins/headers.js create mode 100644 src/plugins/headers.ts delete mode 100644 src/plugins/method.js create mode 100644 src/plugins/method.ts delete mode 100644 src/plugins/payload.js create mode 100644 src/plugins/payload.ts delete mode 100644 src/plugins/proxy-port.js create mode 100644 src/plugins/proxy-port.ts delete mode 100644 src/plugins/proxy.js create mode 100644 src/plugins/proxy.ts delete mode 100644 src/plugins/url.js create mode 100644 src/plugins/url.ts rename src/plugins/{validate-status.js => validate-status.ts} (65%) delete mode 100644 src/plugins/version.js create mode 100644 src/plugins/version.ts create mode 100644 src/types.ts create mode 100644 src/utils.ts rename test/{proxy.test.js => proxy.test.ts} (88%) rename test/{request-headers.test.js => request-headers.test.ts} (65%) rename test/{request-methods.test.js => request-methods.test.ts} (85%) rename test/{request-payload.test.js => request-payload.test.ts} (75%) rename test/{simple-request.test.js => simple-request.test.ts} (85%) delete mode 100644 test/utils.js create mode 100644 test/utils.ts rename test/{validate-status.test.js => validate-status.test.ts} (81%) rename test/{version.test.js => version.test.ts} (92%) create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json index d0717c6..434132d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,6 @@ { "extends": [ - "@lifeomic/standards/javascript" + "@lifeomic/standards" ], "env": { "node": true, diff --git a/.github/workflows/pr-branch-build.yml b/.github/workflows/pr-branch-build.yml index 31db51e..d3f4d2e 100644 --- a/.github/workflows/pr-branch-build.yml +++ b/.github/workflows/pr-branch-build.yml @@ -10,10 +10,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/setup-node@v3 with: node-version: 14 - - name: Test - run: | - yarn install - yarn test + cache: yarn + - run: yarn install + - run: yarn test diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 896195f..539c44e 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -14,14 +14,11 @@ jobs: NPM_TOKEN: ${{ secrets.LIFEOMIC_NPM_TOKEN }} steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v3 with: node-version: 14 - - name: Test - run: | - echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc - yarn install --frozen-lockfile - yarn test - - name: Publish - run: | - yarn semantic-release + cache: yarn + - run: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc + - run: yarn install --frozen-lockfile + - run: yarn test + - run: yarn semantic-release diff --git a/.gitignore b/.gitignore index f17f27f..a89bb9c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ node_modules/ yarn-error.log + +test/build +coverage diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..f719d14 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,41 @@ +import type { Config } from '@jest/types'; +import inspector from 'inspector'; + +// If we are debugging then extend the timeout to max value, otherwise use the default. +const testTimeout = inspector.url() ? 1e8 : undefined; + +const config: Config.InitialOptions = { + rootDir: __dirname, + preset: '@lifeomic/jest-config', + testEnvironment: 'node', + transform: { + '^.+\\.tsx?$': [ + '@swc/jest', + { + jsc: { target: 'es2021' }, + }, + ], + }, + collectCoverageFrom: ['src/**/*.ts'], + collectCoverage: false, + coverageThreshold: { + global: { + statements: 100, + branches: 100, + functions: 100, + lines: 100, + }, + }, + coveragePathIgnorePatterns: ['/test/', '/node_modules/'], + clearMocks: true, + resetMocks: true, + restoreMocks: true, + testMatch: [ + '/test/**/*.test.ts', + ], + verbose: true, + maxWorkers: 4, + testTimeout, +}; + +export default config; diff --git a/package.json b/package.json index 580c47b..640edae 100644 --- a/package.json +++ b/package.json @@ -15,35 +15,38 @@ "alpha": "src/cli.js" }, "scripts": { + "prepublishOnly": "tsc -p tsconfig.build.json", "lint": "eslint .", + "postlint": "tsc", "pretest": "yarn lint", - "test": "jest" + "test": "jest", + "clean": "yarn tsc --build --clean; rm -rf tsconfig.build.tsbuildinfo tsconfig.tsbuildinfo" }, "devDependencies": { "@lifeomic/eslint-config-standards": "^2.1.2", "@lifeomic/jest-config": "^1.1.2", + "@lifeomic/typescript-config": "^1.0.3", + "@swc/core": "^1.2.207", + "@swc/jest": "^0.2.21", + "@types/glob": "^7.2.0", + "@types/jest": "^28.1.3", + "@types/koa": "^2.13.4", + "@types/koa-bodyparser": "^4.3.7", "@types/node": "^16", "conventional-changelog-conventionalcommits": "^4.6.3", - "coveralls": "^3.0.1", "eslint": "^8.18.0", "jest": "^28.1.1", - "koa": "^2.3.0", - "koa-bodyparser": "^4.2.0", - "semantic-release": "^19.0.2" - }, - "ava": { - "files": [ - "test/**/*.test.js" - ] - }, - "eslintConfig": { - "extends": "plugin:@lifeomic/node/recommended" + "koa": "^2.13.4", + "koa-bodyparser": "^4.3.0", + "semantic-release": "^19.0.2", + "ts-jest": "^28.0.5", + "ts-node": "^10.8.1", + "typescript": "^4.7.4" }, "dependencies": { "@lifeomic/alpha": "^2.1.0", - "glob": "^7.1.2", - "pkginfo": "^0.4.1", - "yargs": "^17.3.1" + "glob": "^8.0.3", + "yargs": "^17.5.1" }, "publishConfig": { "access": "public" diff --git a/src/ValidationError.js b/src/ValidationError.js deleted file mode 100644 index e4adf2f..0000000 --- a/src/ValidationError.js +++ /dev/null @@ -1,10 +0,0 @@ -class ValidationError extends Error { - constructor (stdout, stderr) { - super('An error was detected during response validation'); - this.name = 'ValidationError'; - this.stderr = stderr; - this.stdout = stdout; - } -} - -module.exports = ValidationError; diff --git a/src/ValidationError.ts b/src/ValidationError.ts new file mode 100644 index 0000000..6a832e7 --- /dev/null +++ b/src/ValidationError.ts @@ -0,0 +1,9 @@ +export class ValidationError extends Error { + constructor ( + public stdout: string, + public stderr: string, + ) { + super('An error was detected during response validation'); + this.name = 'ValidationError'; + } +} diff --git a/src/alphaProxy.js b/src/alphaProxy.ts similarity index 56% rename from src/alphaProxy.js rename to src/alphaProxy.ts index c3309fa..5cab3ba 100644 --- a/src/alphaProxy.js +++ b/src/alphaProxy.ts @@ -1,21 +1,23 @@ -const { createServer } = require('http'); +import { createServer } from 'http'; +import { Config } from './types'; +import { callAlpha } from './utils'; -const alphaProxy = (baseConfig, callback) => { +export const alphaProxy = (baseConfig: Config) => { return createServer((req, response) => { const { method, url } = req; - const requestConfig = { + const requestConfig: Config = { ...baseConfig, - method, - url: baseConfig.url + url, + method: method as Config['method'], + url: `${baseConfig.url as string}${url as string}`, headers: { ...baseConfig.headers, - ...req.headers, + ...req.headers as Record, }, }; let data = ''; - req.on('data', (chunk) => { + req.on('data', (chunk: string) => { data += chunk; }); @@ -23,7 +25,7 @@ const alphaProxy = (baseConfig, callback) => { if (data) { requestConfig.data = data; } - callback(requestConfig).then((result) => { + callAlpha(requestConfig).then((result) => { response.statusCode = result.status; response.write(result.data); response.end(); @@ -34,5 +36,3 @@ const alphaProxy = (baseConfig, callback) => { }); }).listen(baseConfig.proxyPort, 'localhost'); }; - -module.exports = alphaProxy; diff --git a/src/cli.js b/src/cli.js deleted file mode 100755 index 1aa792f..0000000 --- a/src/cli.js +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env node -const Alpha = require('@lifeomic/alpha'); -const glob = require('glob'); -const path = require('path'); -const yargs = require('yargs'); -const ValidationError = require('./ValidationError'); -const alphaProxy = require('./alphaProxy'); - -const plugins = glob.sync(path.join(__dirname, 'plugins/*.js')) - .map(require) - .map((loader) => loader(yargs)); - -const config = { - transformResponse: [(data) => data], - validateStatus: false, - responsePostProcessors: [], -}; - -const skipRequest = plugins.some((execute) => execute(config)); - -const callAlpha = async (config) => { - const client = new Alpha(); - const response = await client.request(config); - - const processedResponse = config.responsePostProcessors.reduce((reduce, processor) => { - return processor(reduce); - }, response); - - // Use raw output stream to preserve the raw data - return processedResponse; -}; - -if (config.proxied) { - alphaProxy(config, callAlpha).on('listening', () => { - console.log(`Proxy is listening on port ${config.proxyPort}; Press any key to quit;`); - }); - - // These are only relevant in a terminal, not in tests - /* istanbul ignore next */ - if (process.stdin.isTTY) { - /* istanbul ignore next */ - process.stdin.setRawMode(true); - } - process.stdin.on('data', () => { - process.exit(0); - }); -} else if (!skipRequest) { - callAlpha(config).then((result) => { - process.stdout.write(result.data); - }).catch((error) => { - if (error instanceof ValidationError) { - process.stdout.write(error.stdout); - process.stderr.write(error.stderr); - } else { - console.error(error.toString()); - } - process.exitCode = 1; - }); -} diff --git a/src/cli.ts b/src/cli.ts new file mode 100755 index 0000000..0ec81d9 --- /dev/null +++ b/src/cli.ts @@ -0,0 +1,65 @@ +#!/usr/bin/env node + +import glob from 'glob'; +import path from 'path'; +import yargs from 'yargs'; +import { ValidationError } from './ValidationError'; +import { alphaProxy } from './alphaProxy'; +import { Config } from './types'; +import { callAlpha } from './utils'; + +const config: Config = { + transformResponse: [(data) => data], + validateStatus: () => true, + responsePostProcessors: [], +}; + +const run = async () => { + const plugins = await Promise.all(glob.sync(path.join(__dirname, 'plugins/*.[jt]s')) + .map(async (filename) => { + const plugin = await import(filename); + return plugin.default(yargs); + })); + + const args = await yargs.parse(); + + const skipRequest = plugins.some((execute) => execute(config, args)); + + const { + proxied, + proxyPort, + } = config; + + if (proxied) { + alphaProxy(config).on('listening', () => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + console.log(`Proxy is listening on port ${proxyPort!}; Press any key to quit;`); + }); + + // These are only relevant in a terminal, not in tests + /* istanbul ignore next */ + if (process.stdin.isTTY) { + /* istanbul ignore next */ + process.stdin.setRawMode(true); + } + process.stdin.on('data', () => { + process.exit(0); + }); + } else if (!skipRequest) { + callAlpha(config).then((result) => { + process.stdout.write(result.data); + }).catch((error) => { + if (error instanceof ValidationError) { + process.stdout.write(error.stdout); + process.stderr.write(error.stderr); + } else { + console.error(error.toString()); + } + process.exitCode = 1; + }); + } +}; + +run().catch((error) => { + console.error(error); +}); diff --git a/src/plugins/headers.js b/src/plugins/headers.js deleted file mode 100644 index 992bd28..0000000 --- a/src/plugins/headers.js +++ /dev/null @@ -1,38 +0,0 @@ -module.exports = (yargs) => { - yargs.option('H', { - alias: 'header', - describe: 'Pass custom header line to server', - }); - - return (config) => { - if (yargs.argv.header) { - const lines = [].concat(yargs.argv.header); - - config.headers = lines.reduce( - (headers, line) => { - const boundary = line.indexOf(':'); - - if (boundary < 0) { - return headers; - } - - const key = line.slice(0, boundary).trim(); - const value = line.slice(boundary + 1, line.length).trim(); - - if (value) { - // This object is simply used to serialize headers on the client - // request. The risk of arbitrary attribute injection here should - // be marginal. - headers[key] = value; - } else { - // Same as above. - delete headers[key]; - } - - return headers; - }, - {}, - ); - } - }; -}; diff --git a/src/plugins/headers.ts b/src/plugins/headers.ts new file mode 100644 index 0000000..d625eba --- /dev/null +++ b/src/plugins/headers.ts @@ -0,0 +1,43 @@ +import type { Argv } from 'yargs'; +import { Config, Arguments } from '../types'; + +export const parseLine = (headers: Record, line: string) => { + const [untrimmedKey, untrimmedValue] = line.split(':'); + if (untrimmedValue === undefined) { + return headers; + } + + const key = untrimmedKey.trim(); + const value = untrimmedValue.trim(); + + if (value) { + // This object is simply used to serialize headers on the client + // request. The risk of arbitrary attribute injection here should + // be marginal. + headers[key] = value; + } else { + // Same as above. + delete headers[key]; + } + + return headers; +}; + +export default (yargs: Argv) => { + yargs.option('H', { + alias: 'header', + type: 'string', + describe: 'Pass custom header line to server', + }); + + return (config: Config, { header }: Arguments) => { + if (!header) { + return; + } + if (Array.isArray(header)) { + config.headers = header.reduce(parseLine, {}); + } else { + config.headers = [header].reduce(parseLine, {}); + } + }; +}; diff --git a/src/plugins/method.js b/src/plugins/method.js deleted file mode 100644 index 5ba71d0..0000000 --- a/src/plugins/method.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = (yargs) => { - yargs.option('X', { - alias: 'request', - describe: 'Specify the request method to use', - }); - - return (config) => { - if (yargs.argv.request) { - config.method = yargs.argv.request; - } - }; -}; diff --git a/src/plugins/method.ts b/src/plugins/method.ts new file mode 100644 index 0000000..0321103 --- /dev/null +++ b/src/plugins/method.ts @@ -0,0 +1,15 @@ +import { Argv } from 'yargs'; +import { Arguments, Config } from '../types'; + +export default (yargs: Argv) => { + yargs.option('X', { + alias: 'request', + describe: 'Specify the request method to use', + }); + + return (config: Config, { request }: Arguments) => { + if (request) { + config.method = request; + } + }; +}; diff --git a/src/plugins/payload.js b/src/plugins/payload.js deleted file mode 100644 index 8b376e7..0000000 --- a/src/plugins/payload.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = (yargs) => { - yargs.option('data-binary', { - describe: 'Send binary data', - }); - - return (config) => { - if (yargs.argv['data-binary']) { - config.data = yargs.argv['data-binary']; - } - }; -}; diff --git a/src/plugins/payload.ts b/src/plugins/payload.ts new file mode 100644 index 0000000..ce1c566 --- /dev/null +++ b/src/plugins/payload.ts @@ -0,0 +1,14 @@ +import { Argv } from 'yargs'; +import { Arguments, Config } from '../types'; + +export default (yargs: Argv) => { + yargs.option('data-binary', { + describe: 'Send binary data', + }); + + return (config: Config, args: Arguments) => { + if (args['data-binary']) { + config.data = args['data-binary']; + } + }; +}; diff --git a/src/plugins/proxy-port.js b/src/plugins/proxy-port.js deleted file mode 100644 index 6ae70c3..0000000 --- a/src/plugins/proxy-port.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = (yargs) => { - yargs.option('proxy-port', { - type: 'number', - describe: 'port to proxy requests on', - default: 9000, - }); - - return (config) => { - config.proxyPort = yargs.argv['proxy-port']; - }; -}; diff --git a/src/plugins/proxy-port.ts b/src/plugins/proxy-port.ts new file mode 100644 index 0000000..d4bfb7e --- /dev/null +++ b/src/plugins/proxy-port.ts @@ -0,0 +1,14 @@ +import { Argv } from 'yargs'; +import { Arguments, Config } from '../types'; + +export default (yargs: Argv) => { + yargs.option('proxy-port', { + type: 'number', + describe: 'port to proxy requests on', + default: 9000, + }); + + return (config: Config, args: Arguments) => { + config.proxyPort = args['proxy-port']; + }; +}; diff --git a/src/plugins/proxy.js b/src/plugins/proxy.js deleted file mode 100644 index 8c7a92d..0000000 --- a/src/plugins/proxy.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = (yargs) => { - yargs.option('proxy', { - type: 'boolean', - default: false, - describe: 'http proxy requests to alpha', - }); - - return (config) => { - if (yargs.argv.proxy) { - config.proxied = true; - } - }; -}; diff --git a/src/plugins/proxy.ts b/src/plugins/proxy.ts new file mode 100644 index 0000000..d34aaec --- /dev/null +++ b/src/plugins/proxy.ts @@ -0,0 +1,16 @@ +import { Arguments, Config } from '../types'; +import { Argv } from 'yargs'; + +export default (yargs: Argv) => { + yargs.option('proxy', { + type: 'boolean', + default: false, + describe: 'http proxy requests to alpha', + }); + + return (config: Config, args: Arguments) => { + if (args.proxy) { + config.proxied = true; + } + }; +}; diff --git a/src/plugins/url.js b/src/plugins/url.js deleted file mode 100644 index 5e8a91f..0000000 --- a/src/plugins/url.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = (yargs) => { - return (config) => { - if (yargs.argv._.length) { - config.url = yargs.argv._[0]; - } - }; -}; diff --git a/src/plugins/url.ts b/src/plugins/url.ts new file mode 100644 index 0000000..03278dc --- /dev/null +++ b/src/plugins/url.ts @@ -0,0 +1,9 @@ +import { Arguments, Config } from '../types'; + +export default () => { + return (config: Config, args: Arguments) => { + if (args._.length) { + config.url = args._[0]; + } + }; +}; diff --git a/src/plugins/validate-status.js b/src/plugins/validate-status.ts similarity index 65% rename from src/plugins/validate-status.js rename to src/plugins/validate-status.ts index e6517dc..1177bdf 100644 --- a/src/plugins/validate-status.js +++ b/src/plugins/validate-status.ts @@ -1,14 +1,17 @@ -const ValidationError = require('../ValidationError'); +import { Argv } from 'yargs'; -module.exports = (yargs) => { +import { ValidationError } from '../ValidationError'; +import { Arguments, Config } from '../types'; + +export default (yargs: Argv) => { yargs.option('validate-status', { default: false, type: 'boolean', describe: 'Validate the HTTP response code and fail if not 2XX', }); - return (config) => { - if (yargs.argv['validate-status']) { + return (config: Config, args: Arguments) => { + if (args['validate-status']) { config.responsePostProcessors.push((response) => { if (response.status < 200 || response.status >= 300) { const stderr = `The HTTP response code was ${response.status}\n`; diff --git a/src/plugins/version.js b/src/plugins/version.js deleted file mode 100644 index e29ada8..0000000 --- a/src/plugins/version.js +++ /dev/null @@ -1,23 +0,0 @@ -const metadata = require('../../package.json'); -const path = require('path'); -const pkginfo = require('pkginfo'); - -const alpha = pkginfo.find(module, path.dirname(require.resolve('@lifeomic/alpha'))); - -module.exports = (yargs) => { - yargs.version(false) - .option('V', { - alias: 'version', - describe: 'Show the version number and quit', - type: 'boolean', - }); - - return () => { - if (yargs.argv.version) { - console.log(`${metadata.name} v${metadata.version}`); - console.log(`${alpha.name} v${alpha.version}`); - return true; - } - return false; - }; -}; diff --git a/src/plugins/version.ts b/src/plugins/version.ts new file mode 100644 index 0000000..30cffa7 --- /dev/null +++ b/src/plugins/version.ts @@ -0,0 +1,23 @@ +import { Arguments, Config } from '../types'; +import { Argv } from 'yargs'; + +import metadata from '../../package.json'; +import alphaMetadata from '@lifeomic/alpha/package.json'; + +export default (yargs: Argv) => { + yargs.version(false) + .option('V', { + alias: 'version', + describe: 'Show the version number and quit', + type: 'boolean', + }); + + return (config: Config, args: Arguments) => { + if (args.version) { + console.log(`${metadata.name} v${metadata.version}`); + console.log(`${alphaMetadata.name} v${alphaMetadata.version}`); + return true; + } + return false; + }; +}; diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..2e8f237 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,19 @@ +import { AxiosRequestConfig } from 'axios'; +import { AxiosResponse } from '@lifeomic/alpha'; + +export interface Config extends AxiosRequestConfig { + responsePostProcessors: ((data: AxiosResponse) => AxiosResponse)[]; + proxied?: boolean; + proxyPort?: number; +} + +export interface Arguments { + header?: string; + request?: Config['method']; + 'data-binary'?: any; + proxy?: boolean; + 'proxy-port'?: number; + 'validate-status'?: boolean; + version?: boolean; + _: string[]; +} diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..5ada732 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,14 @@ +import { Config } from './types'; +import Alpha from '@lifeomic/alpha'; + +export const callAlpha = async (config: Config) => { + const client = new Alpha({}); + const response = await client.request(config); + + const processedResponse = config.responsePostProcessors.reduce((reduce, processor) => { + return processor(reduce); + }, response); + + // Use raw output stream to preserve the raw data + return processedResponse; +}; diff --git a/test/proxy.test.js b/test/proxy.test.ts similarity index 88% rename from test/proxy.test.js rename to test/proxy.test.ts index 46a493c..0472d22 100644 --- a/test/proxy.test.js +++ b/test/proxy.test.ts @@ -1,12 +1,12 @@ -const Koa = require('koa'); -const bodyParser = require('koa-bodyparser'); +import Koa from 'koa'; +import bodyParser from 'koa-bodyparser'; -const { createTestServer, destroyTestServer, runCommand, spawnProxy, getPort } = require('./utils'); +import { createTestServer, destroyTestServer, runCommand, spawnProxy, getPort, TestContext } from './utils'; -let context; +let context: TestContext; beforeEach(async () => { - context = {}; + context = {} as TestContext; const app = new Koa(); app.use(bodyParser({ @@ -40,7 +40,7 @@ test('The --proxy flag starts a proxy to send commands to alpha', async () => { try { const { stdout, stderr } = await runCommand('-H', 'Test-Header: header value', `http://127.0.0.1:${proxyPort}/headerTest`); - const headers = JSON.parse(stdout); + const headers = JSON.parse(stdout) as Record; expect(Object.keys(headers).sort()).toEqual(['accept', 'connection', 'host', 'test-header', 'user-agent']); expect(headers['test-header']).toBe('header value'); @@ -94,7 +94,7 @@ test('The proxy ends if the user presses a key', async () => { process.stdin.write('q\n'); await new Promise((resolve) => { process.on('exit', () => { - resolve(); + resolve(undefined); }); }); expect(process.exitCode).toBe(0); diff --git a/test/request-headers.test.js b/test/request-headers.test.ts similarity index 65% rename from test/request-headers.test.js rename to test/request-headers.test.ts index 81a3001..0ae78d2 100644 --- a/test/request-headers.test.js +++ b/test/request-headers.test.ts @@ -1,11 +1,11 @@ -const Koa = require('koa'); +import Koa from 'koa'; -const { createTestServer, destroyTestServer, runCommand } = require('./utils'); +import { createTestServer, destroyTestServer, runCommand, TestContext } from './utils'; -let context; +let context: TestContext; beforeEach(async () => { - context = {}; + context = {} as TestContext; const app = new Koa(); app.use((context) => { @@ -19,72 +19,58 @@ afterEach(async () => { await destroyTestServer(context); }); -test('The -H flag can be used to specify a request header', async () => { - const { stdout, stderr } = await runCommand('-H', 'Test-Header: header value', context.url); - const headers = JSON.parse(stdout); +const getHeaders = async (...args: string[]) => { + const { stdout, stderr } = await runCommand(...args, context.url); + expect(stderr).toBeFalsy(); + return JSON.parse(stdout) as Record; +}; +test('The -H flag can be used to specify a request header', async () => { + const headers = await getHeaders('-H', 'Test-Header: header value'); expect(Object.keys(headers).sort()).toEqual(['accept', 'connection', 'host', 'test-header', 'user-agent']); expect(headers['test-header']).toBe('header value'); - expect(stderr).toBeFalsy(); }); test('The --header flag can be used to specify a request header', async () => { - const { stdout, stderr } = await runCommand('--header', 'Test-Header: header value', context.url); - const headers = JSON.parse(stdout); + const headers = await getHeaders('--header', 'Test-Header: header value'); expect(Object.keys(headers).sort()).toEqual(['accept', 'connection', 'host', 'test-header', 'user-agent']); expect(headers['test-header']).toBe('header value'); - expect(stderr).toBeFalsy(); }); test('Specifying multiple request headers adds all the headers to the request', async () => { - const { stdout, stderr } = await runCommand( + const headers = await getHeaders( '-H', 'First-Header: one', '-H', 'Second-Header: two', - context.url, ); - const headers = JSON.parse(stdout); - expect(Object.keys(headers).sort()).toEqual( ['accept', 'connection', 'first-header', 'host', 'second-header', 'user-agent'], ); expect(headers['first-header']).toBe('one'); expect(headers['second-header']).toBe('two'); - expect(stderr).toBeFalsy(); }); test('Specifying the same header multiple times uses the last instance', async () => { - const { stdout, stderr } = await runCommand( + const headers = await getHeaders( '-H', 'Test-Header: one', '-H', 'Test-Header: two', - context.url, ); - const headers = JSON.parse(stdout); - expect(Object.keys(headers).sort()).toEqual(['accept', 'connection', 'host', 'test-header', 'user-agent']); expect(headers['test-header']).toBe('two'); - expect(stderr).toBeFalsy(); }); test('Specifying an empty header deletes the header from the request', async () => { - const { stdout, stderr } = await runCommand( + const headers = await getHeaders( '-H', 'Test-Header: foo', '-H', 'Test-Header:', - context.url, ); - - const headers = JSON.parse(stdout); - expect(Object.keys(headers).sort()).toEqual(['accept', 'connection', 'host', 'user-agent']); - expect(stderr).toBeFalsy(); }); test('Malformed request headers are ignored', async () => { - const { stdout, stderr } = await runCommand('-H', 'foo', context.url); - const headers = JSON.parse(stdout); + const headers = await getHeaders('-H', 'foo'); expect(Object.keys(headers).sort()).toEqual(['accept', 'connection', 'host', 'user-agent']); - expect(stderr).toBeFalsy(); }); diff --git a/test/request-methods.test.js b/test/request-methods.test.ts similarity index 85% rename from test/request-methods.test.js rename to test/request-methods.test.ts index da84c3d..2dd0d8a 100644 --- a/test/request-methods.test.js +++ b/test/request-methods.test.ts @@ -1,11 +1,10 @@ -const Koa = require('koa'); +import Koa from 'koa'; +import { createTestServer, destroyTestServer, runCommand, TestContext } from './utils'; -const { createTestServer, destroyTestServer, runCommand } = require('./utils'); - -let context; +let context: TestContext; beforeEach(async () => { - context = {}; + context = {} as TestContext; const app = new Koa(); app.use((context) => { diff --git a/test/request-payload.test.js b/test/request-payload.test.ts similarity index 75% rename from test/request-payload.test.js rename to test/request-payload.test.ts index 698afd3..6d05fd5 100644 --- a/test/request-payload.test.js +++ b/test/request-payload.test.ts @@ -1,12 +1,12 @@ -const bodyParser = require('koa-bodyparser'); -const Koa = require('koa'); +import bodyParser from 'koa-bodyparser'; +import Koa from 'koa'; -const { createTestServer, destroyTestServer, runCommand } = require('./utils'); +import { createTestServer, destroyTestServer, runCommand, TestContext } from './utils'; -let context; +let context: TestContext; beforeEach(async () => { - context = {}; + context = {} as TestContext; const app = new Koa(); app.use(bodyParser({ diff --git a/test/simple-request.test.js b/test/simple-request.test.ts similarity index 85% rename from test/simple-request.test.js rename to test/simple-request.test.ts index 56332bb..5589be5 100644 --- a/test/simple-request.test.js +++ b/test/simple-request.test.ts @@ -1,11 +1,11 @@ -const Koa = require('koa'); +import Koa from 'koa'; -const { createTestServer, destroyTestServer, runCommand } = require('./utils'); +import { createTestServer, destroyTestServer, runCommand, TestContext } from './utils'; -let context; +let context: TestContext; beforeEach(async () => { - context = {}; + context = {} as TestContext; const app = new Koa(); app.use((context) => { diff --git a/test/utils.js b/test/utils.js deleted file mode 100644 index 7640579..0000000 --- a/test/utils.js +++ /dev/null @@ -1,95 +0,0 @@ -const http = require('http'); -const path = require('path'); -const { spawn } = require('child_process'); -const util = require('util'); -const net = require('net'); - -const cli = path.join(__dirname, '../src/cli.js'); - -const runCommand = (...args) => { - const command = cli; - - return new Promise((resolve, reject) => { - const child = spawn(command, args); - const stderr = []; - const stdout = []; - - child.once('error', reject); - child.stderr.on('data', (chunk) => stderr.push(chunk)); - child.stdout.on('data', (chunk) => stdout.push(chunk)); - - child.once('close', (code) => { - const errorOutput = stderr.join(''); - const output = stdout.join(''); - - if (code) { - const error = new Error( - `Command failed: ${command} ${args.join(' ')}\n${errorOutput}`, - ); - error.stderr = errorOutput; - error.stdout = output; - error.code = code; - reject(error); - return; - } - - resolve({ - stderr: errorOutput, - stdout: output, - }); - }); - }); -}; - -const spawnProxy = (...args) => { - const command = cli; - - return new Promise((resolve) => { - const child = spawn(command, args); - - child.stdout.on('data', () => { - resolve(child); - }); - }); -}; - -const createTestServer = (context, app) => { - const server = context.server = http.createServer(app.callback()); - - return new Promise((resolve, reject) => { - server.once('error', reject); - server.listen(() => { - context.url = `http://localhost:${server.address().port}`; - resolve(); - }); - }); -}; - -const destroyTestServer = (context) => { - const stop = util.promisify(context.server.close.bind(context.server)); - return stop(); -}; - -const getPort = async () => { - return await new Promise((resolve, reject) => { - try { - const srv = net.createServer(() => { - }); - srv.listen(0, () => { - const { port } = srv.address(); - srv.close((err) => reject(err)); - return resolve(`${port}`); - }); - } catch (e) { - reject(e); - } - }); -}; - -module.exports = { - createTestServer, - destroyTestServer, - runCommand, - spawnProxy, - getPort, -}; diff --git a/test/utils.ts b/test/utils.ts new file mode 100644 index 0000000..12ffe6b --- /dev/null +++ b/test/utils.ts @@ -0,0 +1,99 @@ +import http from 'http'; +import path from 'path'; +import { ChildProcessWithoutNullStreams, spawn } from 'child_process'; +import util from 'util'; +import net, { Server } from 'net'; +import Koa from 'koa'; + +const root = path.join(__dirname, '..'); + +const cli = path.join(root, 'src/cli.ts'); +const tsNode = path.join(root, 'node_modules/.bin/ts-node'); + +export interface TestContext { + server: Server; + url: string; +} + +const spawnCli = (args: string[]) => { + return spawn(tsNode, [cli, ...args]); +}; + +export const runCommand = (...args: string[]): Promise<{ stderr: string; stdout: string; }> => { + return new Promise((resolve, reject) => { + const child = spawnCli(args); + const stderr: string[] = []; + const stdout: string[] = []; + + child.once('error', reject); + child.stderr.on('data', (chunk: string) => stderr.push(chunk)); + child.stdout.on('data', (chunk: string) => stdout.push(chunk)); + + child.once('close', (code) => { + const errorOutput = stderr.join(''); + const output = stdout.join(''); + + if (code) { + const error = new Error( + `Command failed: ${cli} ${args.join(' ')}\n${errorOutput}`, + ); + (error as any).stderr = errorOutput; + (error as any).stdout = output; + (error as any).code = code; + reject(error); + return; + } + + resolve({ + stderr: errorOutput, + stdout: output, + }); + }); + }); +}; + +export const spawnProxy = (...args: string[]): Promise => { + return new Promise((resolve, reject) => { + const child = spawnCli(args); + + child.stdout.on('data', () => { + resolve(child); + }); + child.once('error', reject); + child.stderr.on('data', (chunk: Buffer) => console.log(Buffer.from(chunk).toString('utf-8'))); + }); +}; + +export const createTestServer = (context: TestContext, app: Koa) => { + const srv = context.server = http.createServer(app.callback()); + + return new Promise((resolve, reject) => { + srv.once('error', reject); + srv.listen(() => { + context.url = `http://localhost:${(srv.address() as net.AddressInfo).port}`; + resolve(undefined); + }); + }); +}; + +export const destroyTestServer = (context: TestContext) => { + const close = context.server.close.bind(context.server) as Server['close']; + const stop = util.promisify(close); + return stop(); +}; + +export const getPort = async (): Promise => { + return await new Promise((resolve, reject) => { + try { + const srv = net.createServer(() => { + }); + srv.listen(0, () => { + const { port } = (srv.address() as net.AddressInfo); + srv.close((err) => reject(err)); + return resolve(`${port}`); + }); + } catch (e) { + reject(e); + } + }); +}; diff --git a/test/validate-status.test.js b/test/validate-status.test.ts similarity index 81% rename from test/validate-status.test.js rename to test/validate-status.test.ts index b9ff3b4..1c01edd 100644 --- a/test/validate-status.test.js +++ b/test/validate-status.test.ts @@ -1,12 +1,12 @@ -const bodyParser = require('koa-bodyparser'); -const Koa = require('koa'); +import bodyParser from 'koa-bodyparser'; +import Koa from 'koa'; -const { createTestServer, destroyTestServer, runCommand } = require('./utils'); +import { createTestServer, destroyTestServer, runCommand, TestContext } from './utils'; -let context; +let context: TestContext; beforeEach(() => { - context = {}; + context = {} as TestContext; const app = new Koa(); app.use(bodyParser({ @@ -25,7 +25,7 @@ afterEach(async () => { await destroyTestServer(context); }); -const requestThatGeneratesCode = (code) => { +const requestThatGeneratesCode = (code: number) => { return runCommand( '--validate-status', '--data-binary', `{"status":${code}}`, diff --git a/test/version.test.js b/test/version.test.ts similarity index 92% rename from test/version.test.js rename to test/version.test.ts index 22b0490..eaba857 100644 --- a/test/version.test.js +++ b/test/version.test.ts @@ -1,4 +1,4 @@ -const { runCommand } = require('./utils'); +import { runCommand } from './utils'; const VERSION_PATTERN = /@lifeomic\/alpha-cli v\d+\.\d+\.\d+\s@lifeomic\/alpha v\d+\.\d+\.\d+/; diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..e775a17 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false + }, + "exclude": [ + "*.js", + "*.ts", + "test/**" + ] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c51f562 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@lifeomic/typescript-config", + "compilerOptions": { + "target": "es2021", + "module": "commonjs", + "lib": ["ES2021"], + "types": ["node", "jest"], + "resolveJsonModule": true, + "noEmit": true + } +} diff --git a/yarn.lock b/yarn.lock index 254a4ed..29d20d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -305,6 +305,13 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@es-joy/jsdoccomment@~0.20.1": version "0.20.1" resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz#fe89f435f045ae5aaf89c7a4df3616c03e9d106e" @@ -416,6 +423,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@^28.1.1": version "28.1.1" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.1.tgz#c4cbf85283278d768f816ebd1a258ea6f9e39d4f" @@ -550,6 +564,17 @@ slash "^3.0.0" write-file-atomic "^4.0.1" +"@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" + "@jest/types@^28.1.1": version "28.1.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.1.tgz#d059bbc80e6da6eda9f081f293299348bd78ee0b" @@ -594,6 +619,14 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": version "0.3.14" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" @@ -632,6 +665,11 @@ resolved "https://registry.yarnpkg.com/@lifeomic/jest-config/-/jest-config-1.1.2.tgz#761cc893ca3613f09dd40b75e3324d7d5dbdd03f" integrity sha512-w3oQvdcS9y0Ccr7+xkQggmoNM/1woCZGvyMnqAo1np15tvvowpUlrfx3n4IWXRJhHEntB4ri3cciP0B17+lsXQ== +"@lifeomic/typescript-config@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@lifeomic/typescript-config/-/typescript-config-1.0.3.tgz#6804f84c9bee07e5d204d8238081cdb15c6c7abf" + integrity sha512-VFvK8mURnWK4+dlgNBjE7zq5NkzVgr4GFOvAlxDtAtJ7ZghOqnwXy3776omKo9qZtNlrvjSqlWx3XFnARsJzhQ== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1052,11 +1090,129 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@swc/core-android-arm-eabi@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.207.tgz#c70746aaba3f5bd6064dd9e8442a0edf477960e9" + integrity sha512-hmMw4EaDMh8qH3DYbNPmBvrxzRPbOlF5+wMGm0NmmWQjKSCblRZUEkM4GJFtejO/DX75HHOfvh/Op+/+1UOyRQ== + +"@swc/core-android-arm64@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-android-arm64/-/core-android-arm64-1.2.207.tgz#cba450d11e5d37b7b2a116291da683700af1818b" + integrity sha512-jCDGX+yIb9RRQ1BOLz2o7fcJuiGz8+8l/xgKTanx+c7cNg43hm5EzlNzIxQs6oklKE/dlVw75H1Y90QJoH5a2Q== + +"@swc/core-darwin-arm64@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.207.tgz#ec7ceac5e55b757bee527a305327dba8fbbbfeda" + integrity sha512-Xp4LcmVBemLLZpB8d/XR6TnlVvtXKdFSxGmbwC7uiTl26Cji2HRjBXaQnQQfSnlKGcSB+W1sH8q9K2jDJO+hIA== + +"@swc/core-darwin-x64@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.2.207.tgz#bbda0f7698438951472da2ebe076a2192cc79db7" + integrity sha512-4TG7KW5FB/4Uli3ef9Hdx4igQYDv0DK0ZnGWmvteUyYPjhoR6YhIkr04CrqfHeYNOhK6oWG58K6t3ydGfnIJSw== + +"@swc/core-freebsd-x64@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.207.tgz#13e1eb5232752f4ff0380499bd02cc5f9368350a" + integrity sha512-rOj1TRbeY1ysG2cPaFdFUlup/0EJ3c1S+jWJkPK5HYt3mlvbdDu68wa8HIR6oTdbGiyMVogVIZn+je+d92Xjrg== + +"@swc/core-linux-arm-gnueabihf@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.207.tgz#0f539b1e0e81fa7ae41e571732e3910e9201e61d" + integrity sha512-hQRgp2LLr0a0aBkch7qvTAoNx3wTQYMLiPvAzlwFLwOWlv122BmfdMvxobLvwligduFZ9XBEHTdhLc/V8hsWog== + +"@swc/core-linux-arm64-gnu@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.207.tgz#aba04c22c1ef2ce668c39585359f6d9240767fe2" + integrity sha512-WF/plJ2chQXaNvcfM9OOaJbYPryr1ljhB5I0Iaz0AChoyOQfnaQ6Iq09ed1lwoHGBFS3SdrucPxu1z0vkfNIzg== + +"@swc/core-linux-arm64-musl@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.207.tgz#f7ebcac390eb23c368455431cc08cc0055edb2e7" + integrity sha512-9h2HVHrxj7bB5DB6l04jvVVQCirfwIHWIctd5BqAyAI4HnYzirFaDqFntZHpZ0PfaJIa/l04hmhj1t/9f3GYww== + +"@swc/core-linux-x64-gnu@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.207.tgz#40774055f71df85253413fe9ce607a14d3e5948a" + integrity sha512-BjmpgEkT9OibBWC/ulnT2MxZpUbMZrfEWgdThCv2KiL0wYZ6ZAzkgjjArktmw6vjLLrB+1qnTysUN3RAuTrzxg== + +"@swc/core-linux-x64-musl@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.207.tgz#ae151ab250c9ed6059b361537db48d17ca72479e" + integrity sha512-jzBjXdjpw1+eR/GVhENreIpqS8zVezKObutiJLSSayNG3YT9MwyEz58qEHdALPhOJBjctaExr0nYCAPq9U8k2A== + +"@swc/core-win32-arm64-msvc@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.207.tgz#c0542e66a31f2333341cbb32b41f78b94c4bfcc4" + integrity sha512-zF2rID7fzgDxa0Aev92+NcSy4j1Ct87KaDhOiL/BofAOrmf274UHn6yl8HUOjbejD/WEoGG62Dv7EFlzbtVOBw== + +"@swc/core-win32-ia32-msvc@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.207.tgz#aa5ad44d587db3968dc7f6cc52e76af5ba50edc8" + integrity sha512-AUI349ky8Xh4KqmySx7Yd+HdmaEU9Q67Cr5VO1ZJYEu/XRI9aiHlwLFkIb24Jio0LLddN/0GIwnDm+5Evr3deg== + +"@swc/core-win32-x64-msvc@1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.207.tgz#36ffb9bc08b1a27415009f601fb22f13ffd076d8" + integrity sha512-clRP+rfNcGrgu2AXb/H02iKm2tTNHPd5cgqTP2bFe9PalKh2mBFR52+g44b3ca7vwdwIYie39ZoIu7jNkKEVMA== + +"@swc/core@^1.2.207": + version "1.2.207" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.2.207.tgz#cbe5f6c971ba17df83ab4934d46a1e53580634a7" + integrity sha512-4LgdAwZv+dLQsIBaWpK4eEOpeeJlcuOM6LRkUXJLZ0CUIkZHm2zQ4N6jksm/YJYgF++mYwjM6JWwCvLpW3ZTuA== + optionalDependencies: + "@swc/core-android-arm-eabi" "1.2.207" + "@swc/core-android-arm64" "1.2.207" + "@swc/core-darwin-arm64" "1.2.207" + "@swc/core-darwin-x64" "1.2.207" + "@swc/core-freebsd-x64" "1.2.207" + "@swc/core-linux-arm-gnueabihf" "1.2.207" + "@swc/core-linux-arm64-gnu" "1.2.207" + "@swc/core-linux-arm64-musl" "1.2.207" + "@swc/core-linux-x64-gnu" "1.2.207" + "@swc/core-linux-x64-musl" "1.2.207" + "@swc/core-win32-arm64-msvc" "1.2.207" + "@swc/core-win32-ia32-msvc" "1.2.207" + "@swc/core-win32-x64-msvc" "1.2.207" + +"@swc/jest@^0.2.21": + version "0.2.21" + resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.21.tgz#e8c4e234016a914f4cfbb7d75844860a250c1d1c" + integrity sha512-/+NcExiZbxXANNhNPnIdFuGq62CeumulLS1bngwqIXd8H7d96LFUfrYzdt8tlTwLMel8tFtQ5aRjzVkyOTyPDw== + dependencies: + "@jest/create-cache-key-function" "^27.4.2" + "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/accepts@*": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" + integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== + dependencies: + "@types/node" "*" + "@types/babel__core@^7.1.14": version "7.1.19" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" @@ -1090,6 +1246,63 @@ dependencies: "@babel/types" "^7.3.0" +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/content-disposition@*": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.5.tgz#650820e95de346e1f84e30667d168c8fd25aa6e3" + integrity sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA== + +"@types/cookies@*": + version "0.7.7" + resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.7.tgz#7a92453d1d16389c05a5301eef566f34946cfd81" + integrity sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA== + dependencies: + "@types/connect" "*" + "@types/express" "*" + "@types/keygrip" "*" + "@types/node" "*" + +"@types/express-serve-static-core@^4.17.18": + version "4.17.29" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" + integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/glob@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + "@types/graceful-fs@^4.1.3": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -1097,6 +1310,16 @@ dependencies: "@types/node" "*" +"@types/http-assert@*": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.3.tgz#ef8e3d1a8d46c387f04ab0f2e8ab8cb0c5078661" + integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA== + +"@types/http-errors@*": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.2.tgz#7315b4c4c54f82d13fa61c228ec5c2ea5cc9e0e1" + integrity sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -1116,11 +1339,62 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jest@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.3.tgz#52f3f3e50ce59191ff5fbb1084896cc0cf30c9ce" + integrity sha512-Tsbjk8Y2hkBaY/gJsataeb4q9Mubw9EOz7+4RjPkzD5KjTvHHs7cpws22InaoXxAVAhF5HfFbzJjo6oKWqSZLw== + dependencies: + jest-matcher-utils "^28.0.0" + pretty-format "^28.0.0" + "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/keygrip@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" + integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== + +"@types/koa-bodyparser@^4.3.7": + version "4.3.7" + resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.3.7.tgz#3ac41f2dec9d97db7a6f798bbb2e2368be762714" + integrity sha512-21NhEp7LjZm4zbNV5alHHmrNY4J+S7B8lYTO6CzRL8ShTMnl20Gd14dRgVhAxraLaW5iZMofox+BycbuiDvj2Q== + dependencies: + "@types/koa" "*" + +"@types/koa-compose@*": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d" + integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ== + dependencies: + "@types/koa" "*" + +"@types/koa@*", "@types/koa@^2.13.4": + version "2.13.4" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.4.tgz#10620b3f24a8027ef5cbae88b393d1b31205726b" + integrity sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw== + dependencies: + "@types/accepts" "*" + "@types/content-disposition" "*" + "@types/cookies" "*" + "@types/http-assert" "*" + "@types/http-errors" "*" + "@types/keygrip" "*" + "@types/koa-compose" "*" + "@types/node" "*" + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + "@types/minimist@^1.2.0": version "1.2.2" resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" @@ -1151,11 +1425,29 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + "@types/retry@^0.12.0": version "0.12.1" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== +"@types/serve-static@*": + version "1.13.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -1166,6 +1458,13 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== +"@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.8": version "17.0.10" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" @@ -1286,7 +1585,12 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.7.1: +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@^8.4.1, acorn@^8.7.1: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== @@ -1315,7 +1619,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1373,11 +1677,6 @@ ansistyles@~0.1.3: resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= -any-promise@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - anymatch@^3.0.3: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -1404,6 +1703,11 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +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" @@ -1441,23 +1745,6 @@ asap@^2.0.0: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - aws-sdk@^2.998.0: version "2.1066.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1066.0.tgz#2a9b00d983f3c740a7adda18d4e9a5c34d4d3887" @@ -1473,16 +1760,6 @@ aws-sdk@^2.998.0: uuid "3.3.2" xml2js "0.4.19" -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - axios@^0.22.0: version "0.22.0" resolved "https://registry.yarnpkg.com/axios/-/axios-0.22.0.tgz#bf702c41fb50fbca4539589d839a077117b79b25" @@ -1560,13 +1837,6 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - before-after-hook@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" @@ -1626,6 +1896,13 @@ browserslist@^4.20.2: node-releases "^2.0.5" update-browserslist-db "^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" @@ -1750,11 +2027,6 @@ cardinal@^2.1.1: ansicolors "~0.3.2" redeyed "~2.1.0" -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - chalk@^2.0.0, chalk@^2.3.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1909,13 +2181,6 @@ columnify@^1.6.0: strip-ansi "^6.0.1" wcwidth "^1.0.0" -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - commander@^2.19.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -2033,7 +2298,7 @@ copy-to@^2.0.1: resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU= -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= @@ -2049,16 +2314,10 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -coveralls@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" - integrity sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ== - dependencies: - js-yaml "^3.13.1" - lcov-parse "^1.0.0" - log-driver "^1.2.7" - minimist "^1.2.5" - request "^2.88.2" +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@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" @@ -2074,13 +2333,6 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -2100,13 +2352,6 @@ debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: dependencies: ms "2.1.2" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2171,11 +2416,6 @@ del@^6.0.0: rimraf "^3.0.2" slash "^3.0.0" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -2219,6 +2459,11 @@ diff-sequences@^28.1.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== +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== + diff@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -2262,14 +2507,6 @@ duplexer2@~0.1.0: dependencies: readable-stream "^2.0.2" -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2532,21 +2769,6 @@ expect@^28.1.1: jest-message-util "^28.1.1" jest-util "^28.1.1" -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -2563,7 +2785,7 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@2.x, 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== @@ -2660,20 +2882,6 @@ follow-redirects@^1.14.4: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -2762,13 +2970,6 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - git-log-parser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" @@ -2807,7 +3008,7 @@ glob@^7.1.1, glob@^7.1.4, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.2, glob@^7.1.3: +glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -2819,6 +3020,17 @@ glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -2865,19 +3077,6 @@ handlebars@^4.7.7: optionalDependencies: uglify-js "^3.1.4" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" @@ -2978,15 +3177,6 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -3245,11 +3435,6 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -3260,11 +3445,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - issue-parser@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" @@ -3474,7 +3654,7 @@ jest-leak-detector@^28.1.1: jest-get-type "^28.0.2" pretty-format "^28.1.1" -jest-matcher-utils@^28.1.1: +jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz#a7c4653c2b782ec96796eb3088060720f1e29304" integrity sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw== @@ -3624,7 +3804,7 @@ jest-snapshot@^28.1.1: pretty-format "^28.1.1" semver "^7.3.5" -jest-util@^28.1.1: +jest-util@^28.0.0, jest-util@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.1.tgz#ff39e436a1aca397c0ab998db5a51ae2b7080d05" integrity sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw== @@ -3706,11 +3886,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - jsdoc-type-pratt-parser@~2.2.3: version "2.2.5" resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz#c9f93afac7ee4b5ed4432fe3f09f7d36b05ed0ff" @@ -3736,11 +3911,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -3751,7 +3921,7 @@ json-stringify-nice@^1.1.4: resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -3775,16 +3945,6 @@ jsonparse@^1.2.0, jsonparse@^1.3.1: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - just-diff-apply@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-4.0.1.tgz#da89c5a4ccb14aa8873c70e2c3b6695cef45dab5" @@ -3812,7 +3972,7 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -koa-bodyparser@^4.2.0: +koa-bodyparser@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a" integrity sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw== @@ -3820,37 +3980,30 @@ koa-bodyparser@^4.2.0: co-body "^6.0.0" copy-to "^2.0.1" -koa-compose@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" - integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= - dependencies: - any-promise "^1.1.0" - koa-compose@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== -koa-convert@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" - integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= +koa-convert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5" + integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== dependencies: co "^4.6.0" - koa-compose "^3.0.0" + koa-compose "^4.1.0" -koa@^2.3.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.1.tgz#6275172875b27bcfe1d454356a5b6b9f5a9b1051" - integrity sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w== +koa@^2.13.4: + version "2.13.4" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.4.tgz#ee5b0cb39e0b8069c38d115139c774833d32462e" + integrity sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g== dependencies: accepts "^1.3.5" cache-content-type "^1.0.0" content-disposition "~0.5.2" content-type "^1.0.4" cookies "~0.8.0" - debug "~3.1.0" + debug "^4.3.2" delegates "^1.0.0" depd "^2.0.0" destroy "^1.0.4" @@ -3861,7 +4014,7 @@ koa@^2.3.0: http-errors "^1.6.3" is-generator-function "^1.0.7" koa-compose "^4.1.0" - koa-convert "^1.2.0" + koa-convert "^2.0.0" on-finished "^2.3.0" only "~0.0.2" parseurl "^1.3.2" @@ -3869,11 +4022,6 @@ koa@^2.3.0: type-is "^1.6.16" vary "^1.1.2" -lcov-parse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" - integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -4054,6 +4202,11 @@ lodash.isstring@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -4069,11 +4222,6 @@ lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-driver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" - integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -4093,6 +4241,11 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" +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== + make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.5: version "10.0.6" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.0.6.tgz#671269de09cc51208413460898efb7b36adf5534" @@ -4194,7 +4347,7 @@ mime-db@1.45.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.18, mime-types@~2.1.24: version "2.1.28" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== @@ -4337,11 +4490,6 @@ moo@^0.5.0: resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -4663,11 +4811,6 @@ npmlog@^6.0.0, npmlog@^6.0.1: gauge "^4.0.0" set-blocking "^2.0.0" -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - on-finished@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -4914,11 +5057,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -4954,17 +5092,12 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkginfo@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" - integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8= - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -pretty-format@^28.1.1: +pretty-format@^28.0.0, pretty-format@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb" integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw== @@ -5022,17 +5155,12 @@ promzard@^0.3.0: dependencies: read "1" -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -5052,11 +5180,6 @@ qs@^6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -5238,32 +5361,6 @@ registry-auth-token@^4.0.0: dependencies: rc "^1.2.8" -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -5357,12 +5454,12 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -5428,6 +5525,13 @@ semver-regex@^3.1.2: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.x, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -5440,13 +5544,6 @@ semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semve dependencies: lru-cache "^6.0.0" -semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -5590,21 +5687,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" @@ -5848,14 +5930,6 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -5876,6 +5950,39 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +ts-jest@^28.0.5: + version "28.0.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.5.tgz#31776f768fba6dfc8c061d488840ed0c8eeac8b9" + integrity sha512-Sx9FyP9pCY7pUzQpy4FgRZf2bhHY3za576HMKJFs+OnQ9jS96Du5vNsDKkyedQkik+sEabbKAnCliv9BEsHZgQ== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^28.0.0" + json5 "^2.2.1" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "^21.0.1" + +ts-node@^10.8.1: + version "10.8.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" + integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== + dependencies: + "@cspotcode/source-map-support" "^0.8.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" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -5893,18 +6000,6 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -5960,6 +6055,11 @@ type-is@^1.6.16: media-typer "0.3.0" mime-types "~2.1.24" +typescript@^4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + uglify-js@^3.1.4: version "3.12.8" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.8.tgz#a82e6e53c9be14f7382de3d068ef1e26e7d4aaf8" @@ -6047,16 +6147,16 @@ uuid@3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -6091,15 +6191,6 @@ vary@^1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - walk-up-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" @@ -6216,7 +6307,7 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.0.0: +yargs-parser@^21.0.0, yargs-parser@^21.0.1: version "21.0.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== @@ -6234,10 +6325,10 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.3.1: - version "17.3.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" - integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== +yargs@^17.3.1, yargs@^17.5.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== dependencies: cliui "^7.0.2" escalade "^3.1.1" @@ -6251,3 +6342,8 @@ ylru@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 981f7a022088824521ffa3c96559596ef39b7536 Mon Sep 17 00:00:00 2001 From: David Tanner Date: Tue, 28 Jun 2022 14:25:03 -0600 Subject: [PATCH 2/4] Try newer node version --- .github/workflows/pr-branch-build.yml | 2 +- .github/workflows/release.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-branch-build.yml b/.github/workflows/pr-branch-build.yml index d3f4d2e..2343c5f 100644 --- a/.github/workflows/pr-branch-build.yml +++ b/.github/workflows/pr-branch-build.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v3 with: - node-version: 14 + node-version: 16 cache: yarn - run: yarn install - run: yarn test diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 539c44e..ab72c21 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,7 +16,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v3 with: - node-version: 14 + node-version: 16 cache: yarn - run: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc - run: yarn install --frozen-lockfile From 6c89c155f4ca3df9c119a389a85c9be44657b8ff Mon Sep 17 00:00:00 2001 From: David Tanner Date: Tue, 28 Jun 2022 14:31:04 -0600 Subject: [PATCH 3/4] Extend timeout --- .github/workflows/pr-branch-build.yml | 2 +- .github/workflows/release.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-branch-build.yml b/.github/workflows/pr-branch-build.yml index 2343c5f..77b3448 100644 --- a/.github/workflows/pr-branch-build.yml +++ b/.github/workflows/pr-branch-build.yml @@ -15,4 +15,4 @@ jobs: node-version: 16 cache: yarn - run: yarn install - - run: yarn test + - run: yarn test --testTimeout=120000 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index ab72c21..6829561 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,5 +20,5 @@ jobs: cache: yarn - run: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc - run: yarn install --frozen-lockfile - - run: yarn test + - run: yarn test --testTimeout=120000 - run: yarn semantic-release From 725a8065198337849ead0355106fe7ea01b54ba2 Mon Sep 17 00:00:00 2001 From: David Tanner Date: Tue, 28 Jun 2022 14:34:48 -0600 Subject: [PATCH 4/4] Try with less workers --- .github/workflows/pr-branch-build.yml | 2 +- .github/workflows/release.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-branch-build.yml b/.github/workflows/pr-branch-build.yml index 77b3448..9acb3f0 100644 --- a/.github/workflows/pr-branch-build.yml +++ b/.github/workflows/pr-branch-build.yml @@ -15,4 +15,4 @@ jobs: node-version: 16 cache: yarn - run: yarn install - - run: yarn test --testTimeout=120000 + - run: yarn test --testTimeout=120000 --maxWorkers=50% diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6829561..09c467b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,5 +20,5 @@ jobs: cache: yarn - run: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc - run: yarn install --frozen-lockfile - - run: yarn test --testTimeout=120000 + - run: yarn test --testTimeout=120000 --maxWorkers=50% - run: yarn semantic-release