1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-23 00:22:19 +01:00

chore: Begin converting files from JS to TypeScript

This commit is contained in:
Ivar Conradi Østhus 2021-02-24 12:33:02 +01:00
commit 8d4cdd56c1
No known key found for this signature in database
GPG Key ID: 31AC596886B0BD09
24 changed files with 285 additions and 58 deletions

View File

@ -2,13 +2,24 @@
"env": {
"node": true
},
"extends": ["airbnb-base", "prettier"],
"extends": [
"airbnb-typescript/base",
"prettier"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2019
"ecmaVersion": 2019,
"project": "./tsconfig.json"
},
"plugins": ["prettier"],
"plugins": ["prettier","@typescript-eslint"],
"root": true,
"rules": {
"@typescript-eslint/no-var-requires": 0,
"@typescript-eslint/indent": 0,
"@typescript-eslint/naming-convention": 0,
"@typescript-eslint/space-before-function-paren": 0,
"import/no-unresolved": 0,
"class-methods-use-this": [0],
"prettier/prettier": ["error"],
"func-names": "off",
@ -28,5 +39,17 @@
}
]
},
"overrides": [
{
// enable the rule specifically for TypeScript files
"files": ["*.ts", "*.tsx"],
"rules": {
"@typescript-eslint/explicit-module-boundary-types": ["error"],
"@typescript-eslint/indent": ["error"],
"@typescript-eslint/naming-convention": ["error"],
"@typescript-eslint/space-before-function-paren": ["error"]
}
}
],
"ignorePatterns": ["**/docs/api/oas/"]
}

4
.nycrc Normal file
View File

@ -0,0 +1,4 @@
{
"extends": "@istanbuljs/nyc-config-typescript",
"all": true
}

View File

@ -100,14 +100,18 @@
"yargs": "^16.0.3"
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "^1.0.1",
"@passport-next/passport": "^3.1.0",
"@passport-next/passport-google-oauth2": "^1.0.0",
"@types/express": "^4.17.11",
"@types/node": "^14.0.0",
"@typescript-eslint/eslint-plugin": "^4.15.2",
"@typescript-eslint/parser": "^4.15.2",
"ava": "^3.7.0",
"coveralls": "^3.1.0",
"eslint": "^6.8.0",
"eslint-config-airbnb-base": "^14.1.0",
"eslint-config-airbnb-typescript": "^12.3.1",
"eslint-config-prettier": "^6.10.1",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-prettier": "^3.1.3",
@ -121,9 +125,11 @@
"passport-google-auth": "^1.0.2",
"prettier": "^1.19.1",
"proxyquire": "^2.1.3",
"source-map-support": "^0.5.19",
"sinon": "^9.2.4",
"superagent": "^6.1.0",
"supertest": "^5.0.0",
"ts-node": "^9.1.1",
"tsc-watch": "^4.2.9",
"typescript": "^4.1.5"
},

View File

@ -86,7 +86,7 @@ class JiraAddon extends Addon {
content: [
{
type: 'text',
text: `To see what happened visit Unleash`,
text: 'To see what happened visit Unleash',
marks: [
{
type: 'link',

View File

@ -1,5 +1,3 @@
'use strict';
const express = require('express');
const compression = require('compression');
@ -9,7 +7,7 @@ const path = require('path');
const errorHandler = require('errorhandler');
const IndexRouter = require('./routes');
const unleashDbSession = require('./middleware/session-db');
const responseTime = require('./middleware/response-time');
import { responseTimeMetrics } from './middleware/response-time-metrics';
const requestLogger = require('./middleware/request-logger');
const simpleAuthentication = require('./middleware/simple-authentication');
const noAuthentication = require('./middleware/no-authentication');
@ -33,7 +31,7 @@ module.exports = function(config, services = {}) {
app.use(cookieParser());
app.use(express.json({ strict: false }));
app.use(unleashDbSession(config));
app.use(responseTime(config));
app.use(responseTimeMetrics(config));
app.use(requestLogger(config));
app.use(secureHeaders(config));
app.use(express.urlencoded({ extended: true }));

View File

@ -1,3 +0,0 @@
module.exports = {
UNIQUE_CONSTRAINT_VIOLATION: '23505',
};

View File

@ -0,0 +1,3 @@
const UNIQUE_CONSTRAINT_VIOLATION = '23505';
export {UNIQUE_CONSTRAINT_VIOLATION};

View File

@ -1,5 +1,3 @@
'use strict';
class FeatureHasTagError extends Error {
constructor(message) {
super();
@ -22,5 +20,4 @@ class FeatureHasTagError extends Error {
return obj;
}
}
module.exports = FeatureHasTagError;

View File

@ -1,6 +0,0 @@
'use strict';
module.exports = {
REQUEST_TIME: 'request_time',
DB_TIME: 'db_time',
};

4
src/lib/events.ts Normal file
View File

@ -0,0 +1,4 @@
const REQUEST_TIME = 'request_time';
const DB_TIME = 'db_time';
export {REQUEST_TIME, DB_TIME};

View File

@ -1,19 +1,19 @@
'use strict';
const client = require('prom-client');
const events = require('./events');
const {
import client from 'prom-client';
import * as events from './events';
import {
FEATURE_CREATED,
FEATURE_UPDATED,
FEATURE_ARCHIVED,
FEATURE_REVIVED,
DB_POOL_UPDATE,
} = require('./event-type');
} from'./event-type';
const THREE_HOURS = 3 * 60 * 60 * 1000;
const ONE_MINUTE = 60 * 1000;
class MetricsMonitor {
timer: any;
constructor() {
this.timer = null;
}
@ -98,16 +98,15 @@ class MetricsMonitor {
});
clientMetricsStore.on('metrics', m => {
// eslint-disable-next-line no-restricted-syntax
for (const [feature, { yes, no }] of Object.entries(
for (const entry of Object.entries(
m.bucket.toggles,
)) {
featureToggleUsageTotal
.labels(feature, true, m.appName)
.inc(yes);
.labels(entry[0], 'true', m.appName)
.inc(entry[1]['yes']);
featureToggleUsageTotal
.labels(feature, false, m.appName)
.inc(no);
.labels(entry[0], 'false', m.appName)
.inc(entry[1]['no']);
}
});

View File

@ -1,10 +1,10 @@
'use strict';
import * as responseTime from 'response-time';
import { REQUEST_TIME } from '../events';
const responseTime = require('response-time');
const { REQUEST_TIME } = require('../events');
var _responseTime = responseTime.default
module.exports = function(config) {
return responseTime((req, res, time) => {
export function responseTimeMetrics(config) {
return _responseTime((req, res, time) => {
const { statusCode } = res;
const pathname = req.route ? req.baseUrl + req.route.path : '(hidden)';

View File

@ -119,7 +119,7 @@ module.exports = {
if (!options.db.host) {
throw new Error(
`Unleash requires database details to start. See https://unleash.github.io/docs/getting_started`,
'Unleash requires database details to start. See https://unleash.github.io/docs/getting_started',
);
}

View File

@ -124,7 +124,7 @@ test('should return applications', t => {
stores.clientApplicationsStore.upsert({ appName });
return request
.get(`/api/admin/metrics/applications/`)
.get('/api/admin/metrics/applications/')
.expect(200)
.expect(res => {
const metrics = res.body;

View File

@ -252,7 +252,7 @@ test('reactivating a non-existent strategy yields 404', t => {
.set('Content-Type', 'application/json')
.expect(404);
});
test(`deprecating 'default' strategy will yield 403`, t => {
test("deprecating 'default' strategy will yield 403", t => {
t.plan(0);
const { request, base, perms } = getSetup();
perms.withPermissions(UPDATE_STRATEGY);

View File

@ -1,9 +1,9 @@
'use strict';
const { register: prometheusRegister } = require('prom-client');
const Controller = require('./controller');
import { register as prometheusRegister } from 'prom-client';
import Controller from './controller';
class BackstageController extends Controller {
logger: any;
constructor(config) {
super();
@ -18,4 +18,4 @@ class BackstageController extends Controller {
}
}
module.exports = BackstageController;
export { BackstageController };

View File

@ -6,7 +6,7 @@ const FeatureController = require('./client-api/feature.js');
const Controller = require('./controller');
const HealthCheckController = require('./health-check');
const BackstageCTR = require('./backstage.js');
import { BackstageController } from './backstage';
const LogoutController = require('./logout');
const api = require('./api-def');
@ -14,7 +14,7 @@ class IndexRouter extends Controller {
constructor(config, services) {
super();
this.use('/health', new HealthCheckController(config).router);
this.use('/internal-backstage', new BackstageCTR(config).router);
this.use('/internal-backstage', new BackstageController(config).router);
this.use('/logout', new LogoutController(config).router);
this.get(api.uri, this.index);
this.use(api.links.admin.uri, new AdminApi(config, services).router);

View File

@ -63,7 +63,7 @@ class StateService {
: await this.toggleStore.getFeatures();
if (dropBeforeImport) {
this.logger.info(`Dropping existing feature toggles`);
this.logger.info('Dropping existing feature toggles');
await this.toggleStore.dropFeatures();
await this.eventStore.store({
type: DROP_FEATURES,
@ -100,7 +100,7 @@ class StateService {
: await this.strategyStore.getStrategies();
if (dropBeforeImport) {
this.logger.info(`Dropping existing strategies`);
this.logger.info('Dropping existing strategies');
await this.strategyStore.dropStrategies();
await this.eventStore.store({
type: DROP_STRATEGIES,

View File

@ -11,5 +11,5 @@ exports.up = function(db, callback) {
};
exports.down = function(db, callback) {
db.runSql(`ALTER TABLE features DROP COLUMN "variants";`, callback);
db.runSql('ALTER TABLE features DROP COLUMN "variants";', callback);
};

View File

@ -16,5 +16,5 @@ exports.up = function(db, cb) {
};
exports.down = function(db, cb) {
db.runSql(`DROP TABLE addons;`, cb);
db.runSql('DROP TABLE addons;', cb);
};

View File

@ -10,7 +10,7 @@ exports.up = function(db, cb) {
};
exports.down = function(db, cb) {
db.runSql(`ALTER TABLE strategies DROP COLUMN deprecated`, cb);
db.runSql('ALTER TABLE strategies DROP COLUMN deprecated', cb);
};
exports._meta = {

View File

@ -146,7 +146,7 @@ test.serial('should not update with invalid addon configuration', async t => {
};
await request
.put(`/api/admin/addons/1`)
.put('/api/admin/addons/1')
.send(config)
.expect(400);
});
@ -166,7 +166,7 @@ test.serial('should not update unknown addon configuration', async t => {
};
await request
.put(`/api/admin/addons/123123`)
.put('/api/admin/addons/123123')
.send(config)
.expect(404);
});
@ -209,7 +209,7 @@ test.serial('should not get unknown addon configuration', async t => {
t.plan(0);
const request = await setupApp(stores);
await request.get(`/api/admin/addons/445`).expect(404);
await request.get('/api/admin/addons/445').expect(404);
});
test.serial('should not delete unknown addon configuration', async t => {

View File

@ -29,7 +29,7 @@ test.serial('should require authenticated user', async t => {
new AuthenticationRequired({
path: '/api/admin/login',
type: 'custom',
message: `You have to identify yourself.`,
message: 'You have to identify yourself.',
}),
)
.end(),

206
yarn.lock
View File

@ -378,6 +378,13 @@
js-yaml "^3.13.1"
resolve-from "^5.0.0"
"@istanbuljs/nyc-config-typescript@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.1.tgz#55172f5663b3635586add21b14d42ca94a163d58"
integrity sha512-/gz6LgVpky205LuoOfwEZmnUtaSmdk0QIMcNFj9OvxhiMhPpKftMgZmGN7jNj7jR+lr8IB1Yks3QSSSNSxfoaQ==
dependencies:
"@istanbuljs/schema" "^0.1.2"
"@istanbuljs/schema@^0.1.2":
version "0.1.2"
resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz"
@ -543,6 +550,11 @@
"@types/minimatch" "*"
"@types/node" "*"
"@types/json-schema@^7.0.3":
version "7.0.7"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
@ -591,6 +603,76 @@
"@types/mime" "^1"
"@types/node" "*"
"@typescript-eslint/eslint-plugin@^4.15.2":
version "4.15.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz#981b26b4076c62a5a55873fbef3fe98f83360c61"
integrity sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==
dependencies:
"@typescript-eslint/experimental-utils" "4.15.2"
"@typescript-eslint/scope-manager" "4.15.2"
debug "^4.1.1"
functional-red-black-tree "^1.0.1"
lodash "^4.17.15"
regexpp "^3.0.0"
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/experimental-utils@4.15.2":
version "4.15.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz#5efd12355bd5b535e1831282e6cf465b9a71cf36"
integrity sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==
dependencies:
"@types/json-schema" "^7.0.3"
"@typescript-eslint/scope-manager" "4.15.2"
"@typescript-eslint/types" "4.15.2"
"@typescript-eslint/typescript-estree" "4.15.2"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
"@typescript-eslint/parser@^4.15.2", "@typescript-eslint/parser@^4.4.1":
version "4.15.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.2.tgz#c804474321ef76a3955aec03664808f0d6e7872e"
integrity sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==
dependencies:
"@typescript-eslint/scope-manager" "4.15.2"
"@typescript-eslint/types" "4.15.2"
"@typescript-eslint/typescript-estree" "4.15.2"
debug "^4.1.1"
"@typescript-eslint/scope-manager@4.15.2":
version "4.15.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz#5725bda656995960ae1d004bfd1cd70320f37f4f"
integrity sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==
dependencies:
"@typescript-eslint/types" "4.15.2"
"@typescript-eslint/visitor-keys" "4.15.2"
"@typescript-eslint/types@4.15.2":
version "4.15.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.2.tgz#04acf3a2dc8001a88985291744241e732ef22c60"
integrity sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==
"@typescript-eslint/typescript-estree@4.15.2":
version "4.15.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz#c2f7a1e94f3428d229d5ecff3ead6581ee9b62fa"
integrity sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==
dependencies:
"@typescript-eslint/types" "4.15.2"
"@typescript-eslint/visitor-keys" "4.15.2"
debug "^4.1.1"
globby "^11.0.1"
is-glob "^4.0.1"
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/visitor-keys@4.15.2":
version "4.15.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz#3d1c7979ce75bf6acf9691109bd0d6b5706192b9"
integrity sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==
dependencies:
"@typescript-eslint/types" "4.15.2"
eslint-visitor-keys "^2.0.0"
abort-controller@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz"
@ -720,6 +802,11 @@ archy@^1.0.0:
resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz"
integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=
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.npmjs.org/argparse/-/argparse-1.0.10.tgz"
@ -1121,6 +1208,14 @@ caching-transform@^4.0.0:
package-hash "^4.0.0"
write-file-atomic "^3.0.0"
call-bind@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
dependencies:
function-bind "^1.1.1"
get-intrinsic "^1.0.2"
callsites@^3.0.0, callsites@^3.1.0:
version "3.1.0"
resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
@ -1428,6 +1523,11 @@ configstore@^5.0.1:
write-file-atomic "^3.0.0"
xdg-basedir "^4.0.0"
confusing-browser-globals@^1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59"
integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==
confusing-browser-globals@^1.0.9:
version "1.0.9"
resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz"
@ -1548,6 +1648,11 @@ coveralls@^3.1.0:
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@^6.0.5:
version "6.0.5"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz"
@ -1837,7 +1942,7 @@ dicer@0.2.5:
readable-stream "1.1.x"
streamsearch "0.1.2"
diff@^4.0.2:
diff@^4.0.1, diff@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
@ -2078,6 +2183,33 @@ eslint-config-airbnb-base@^14.1.0:
object.assign "^4.1.0"
object.entries "^1.1.2"
eslint-config-airbnb-base@^14.2.0, eslint-config-airbnb-base@^14.2.1:
version "14.2.1"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e"
integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==
dependencies:
confusing-browser-globals "^1.0.10"
object.assign "^4.1.2"
object.entries "^1.1.2"
eslint-config-airbnb-typescript@^12.3.1:
version "12.3.1"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.3.1.tgz#83ab40d76402c208eb08516260d1d6fac8f8acbc"
integrity sha512-ql/Pe6/hppYuRp4m3iPaHJqkBB7dgeEmGPQ6X0UNmrQOfTF+dXw29/ZjU2kQ6RDoLxaxOA+Xqv07Vbef6oVTWw==
dependencies:
"@typescript-eslint/parser" "^4.4.1"
eslint-config-airbnb "^18.2.0"
eslint-config-airbnb-base "^14.2.0"
eslint-config-airbnb@^18.2.0:
version "18.2.1"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz#b7fe2b42f9f8173e825b73c8014b592e449c98d9"
integrity sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==
dependencies:
eslint-config-airbnb-base "^14.2.1"
object.assign "^4.1.2"
object.entries "^1.1.2"
eslint-config-prettier@^6.10.1:
version "6.11.0"
resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz"
@ -2142,11 +2274,23 @@ eslint-utils@^1.4.3:
dependencies:
eslint-visitor-keys "^1.1.0"
eslint-utils@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
dependencies:
eslint-visitor-keys "^1.1.0"
eslint-visitor-keys@^1.1.0:
version "1.3.0"
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
eslint-visitor-keys@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
eslint@^6.8.0:
version "6.8.0"
resolved "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz"
@ -2754,6 +2898,15 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5:
resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
get-intrinsic@^1.0.2:
version "1.1.1"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
dependencies:
function-bind "^1.1.1"
has "^1.0.3"
has-symbols "^1.0.1"
get-own-enumerable-property-symbols@^3.0.0:
version "3.0.2"
resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz"
@ -4037,6 +4190,11 @@ make-dir@^3.0.0, make-dir@^3.0.2:
dependencies:
semver "^6.0.0"
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-iterator@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz"
@ -4470,6 +4628,16 @@ object.assign@^4.1.0:
has-symbols "^1.0.0"
object-keys "^1.0.11"
object.assign@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
dependencies:
call-bind "^1.0.0"
define-properties "^1.1.3"
has-symbols "^1.0.1"
object-keys "^1.1.1"
object.defaults@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz"
@ -5249,6 +5417,11 @@ regexpp@^2.0.1:
resolved "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz"
integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
regexpp@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
registry-auth-token@^4.0.0:
version "4.2.0"
resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz"
@ -5682,7 +5855,7 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
source-map-support@^0.5.19:
source-map-support@^0.5.17, source-map-support@^0.5.19:
version "0.5.19"
resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
@ -6157,6 +6330,18 @@ trim-off-newlines@^1.0.1:
resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz"
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
ts-node@^9.1.1:
version "9.1.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d"
integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==
dependencies:
arg "^4.1.0"
create-require "^1.1.0"
diff "^4.0.1"
make-error "^1.1.1"
source-map-support "^0.5.17"
yn "3.1.1"
tsc-watch@^4.2.9:
version "4.2.9"
resolved "https://registry.yarnpkg.com/tsc-watch/-/tsc-watch-4.2.9.tgz#d93fc74233ca4ef7ee6b12d08c0fe6aca3e19044"
@ -6178,6 +6363,11 @@ tsconfig-paths@^3.9.0:
minimist "^1.2.0"
strip-bom "^3.0.0"
tslib@^1.8.1:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^1.9.0:
version "1.13.0"
resolved "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz"
@ -6188,6 +6378,13 @@ tsscmp@1.0.6:
resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz"
integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
tsutils@^3.17.1:
version "3.20.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698"
integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==
dependencies:
tslib "^1.8.1"
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz"
@ -6634,3 +6831,8 @@ yargs@^16.0.3:
string-width "^4.2.0"
y18n "^5.0.1"
yargs-parser "^20.0.0"
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==