diff --git a/.vscode/settings.json b/.vscode/settings.json index 4c6ad29..7756bd5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,13 +1,14 @@ { "cSpell.words": [ - "Repos", "boardcat", + "execa", "gitea", "lpush", "lrange", "metatype", "pmessage", "psubscribe", + "Repos", "rpop", "rpush" ] diff --git a/config.yml.example b/config.yml.example index 220e738..830f0d4 100644 --- a/config.yml.example +++ b/config.yml.example @@ -16,6 +16,4 @@ db: prefix: blog etcd: hosts: - - 'http://192.168.31.194:2379' -workspaces: - root: '/Users/ivanli/Projects/fennec/workspaces' \ No newline at end of file + - 'http://192.168.31.194:2379' \ No newline at end of file diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml new file mode 100644 index 0000000..d465d25 --- /dev/null +++ b/docker/docker-compose.dev.yml @@ -0,0 +1,20 @@ +version: "3.9" + +services: + postgres: + image: 'postgres:14' + restart: always + environment: + - POSTGRES_HOST_AUTH_METHOD=trust + ports: + - '${PG_PORT}:5432' + redis: + image: 'redis:6' + restart: always + ports: + - '${REDIS_PORT}:6379' + +networks: + default: + name: 'blog-dev' + driver: bridge \ No newline at end of file diff --git a/docker/init-dev.mjs b/docker/init-dev.mjs new file mode 100644 index 0000000..aa661f4 --- /dev/null +++ b/docker/init-dev.mjs @@ -0,0 +1,61 @@ +import execa from 'execa'; +import { URL } from 'url'; +import { findFreePorts } from 'find-free-ports'; +import YAML from 'js-yaml'; +import { readFile, writeFile } from 'fs/promises'; + +const [PG_PORT, REDIS_PORT] = await findFreePorts(2); + +await execa( + 'docker-compose', + [ + '-f', + new URL('./docker-compose.dev.yml', import.meta.url).pathname, + 'up', + '-d', + ], + { + env: { + PG_PORT, + REDIS_PORT, + }, + stdout: process.stdout, + stderr: process.stderr, + }, +); + +console.log(`✅ Postgres is running on port ${PG_PORT}`); +console.log(`✅ Redis is running on port ${REDIS_PORT}`); + +const config = await YAML.load( + await readFile( + new URL('../config.yml.example', import.meta.url).pathname, + 'utf-8', + ), +); +config.db.postgres = { + host: 'localhost', + port: PG_PORT, + database: 'postgres', + username: 'postgres', + password: '', +}; + +config.db.redis = { + host: 'localhost', + port: REDIS_PORT, +}; + +const configOutputPath = new URL('../config.yml', import.meta.url).pathname; + +await writeFile(configOutputPath, YAML.dump(config), 'utf-8'); + +console.log(`✅ Config file is written to ${configOutputPath}`); + +await execa.command('npm run typeorm -- migration:run', { + cwd: new URL('../', import.meta.url).pathname, + stdout: process.stdout, + stderr: process.stderr, +}); + +console.log(`✅ Database Initiated!`); diff --git a/migrations/1635661602570-articleAndTagMigration.ts b/migrations/1635661602570-articleAndTagMigration.ts new file mode 100644 index 0000000..7bd2973 --- /dev/null +++ b/migrations/1635661602570-articleAndTagMigration.ts @@ -0,0 +1,20 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class articleAndTagMigration1635661602570 implements MigrationInterface { + name = 'articleAndTagMigration1635661602570' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`CREATE TABLE "article" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP, "title" character varying NOT NULL, "content" text NOT NULL, "publishedAt" TIMESTAMP, "tags" character varying array NOT NULL, CONSTRAINT "PK_40808690eb7b915046558c0f81b" PRIMARY KEY ("id"))`); + await queryRunner.query(`CREATE INDEX "IDX_f330baf6be412e8dd60ff7f78e" ON "article" ("publishedAt") `); + await queryRunner.query(`CREATE TABLE "tag" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP, "name" character varying(100) NOT NULL, CONSTRAINT "PK_8e4052373c579afc1471f526760" PRIMARY KEY ("id"))`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_6a9775008add570dc3e5a0bab7" ON "tag" ("name") `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP INDEX "public"."IDX_6a9775008add570dc3e5a0bab7"`); + await queryRunner.query(`DROP TABLE "tag"`); + await queryRunner.query(`DROP INDEX "public"."IDX_f330baf6be412e8dd60ff7f78e"`); + await queryRunner.query(`DROP TABLE "article"`); + } + +} diff --git a/ormconfig.js b/ormconfig.js new file mode 100644 index 0000000..3ba0055 --- /dev/null +++ b/ormconfig.js @@ -0,0 +1,22 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const yaml = require('js-yaml'); +const fs = require('fs'); +const path = require('path'); + +const config = yaml.load( + fs.readFileSync(path.join(__dirname, './config.yml'), 'utf8'), +); + +module.exports = { + type: 'postgres', + host: config.db.postgres.host, + port: config.db.postgres.port, + username: config.db.postgres.username, + password: config.db.postgres.password, + database: config.db.postgres.database, + migrations: ['migrations/**/*.ts'], + entities: ['src/**/*.entity.ts'], + cli: { + migrationsDir: 'migrations', + }, +}; diff --git a/package-lock.json b/package-lock.json index e3b4d0b..434f4c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "license": "UNLICENSED", "dependencies": { - "@fennec/configuration": "^0.0.1", + "@fennec/configuration": "^0.0.2", "@nestjs-lib/auth": "^0.2.3", "@nestjs-lib/etcd3": "^0.0.1", "@nestjs/common": "^8.1.1", @@ -56,6 +56,8 @@ "eslint": "^8.0.1", "eslint-config-prettier": "8.3.0", "eslint-plugin-prettier": "^4.0.0", + "execa": "^5.1.1", + "find-free-ports": "^3.0.0", "jest": "^27.3.1", "prettier": "^2.4.1", "supertest": "^6.1.6", @@ -66,26 +68,6 @@ "typescript": "^4.4.4" } }, - "../../Fennec/configuration": { - "name": "@fennec/configuration", - "version": "0.0.1", - "extraneous": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.2", - "etcd3": "^1.1.0", - "js-yaml": "^4.1.0" - }, - "devDependencies": { - "@tsconfig/node14": "^1.0.1", - "@types/debug": "^4.1.7", - "@types/js-yaml": "^4.0.3", - "@types/node": "^14.17.17", - "rimraf": "^3.0.2", - "ts-node": "^10.2.1", - "typescript": "^4.4.4" - } - }, "node_modules/@angular-devkit/core": { "version": "12.2.10", "resolved": "https://npm.ivanli.cc/@angular-devkit%2fcore/-/core-12.2.10.tgz", @@ -296,9 +278,9 @@ "license": "MIT" }, "node_modules/@apollographql/apollo-tools": { - "version": "0.5.1", - "resolved": "https://npm.ivanli.cc/@apollographql%2fapollo-tools/-/apollo-tools-0.5.1.tgz", - "integrity": "sha512-ZII+/xUFfb9ezDU2gad114+zScxVFMVlZ91f8fGApMzlS1kkqoyLnC4AJaQ1Ya/X+b63I20B4Gd+eCL8QuB4sA==", + "version": "0.5.2", + "resolved": "https://npm.ivanli.cc/@apollographql%2fapollo-tools/-/apollo-tools-0.5.2.tgz", + "integrity": "sha512-KxZiw0Us3k1d0YkJDhOpVH5rJ+mBfjXcgoRoCcslbgirjgLotKMzOcx4PZ7YTEvvEROmvG7X3Aon41GvMmyGsw==", "license": "MIT", "engines": { "node": ">=8", @@ -410,22 +392,22 @@ "license": "0BSD" }, "node_modules/@babel/code-frame": { - "version": "7.15.8", - "resolved": "https://npm.ivanli.cc/@babel%2fcode-frame/-/code-frame-7.15.8.tgz", - "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fcode-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://npm.ivanli.cc/@babel%2fcompat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fcompat-data/-/compat-data-7.16.0.tgz", + "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", "dev": true, "license": "MIT", "engines": { @@ -433,21 +415,21 @@ } }, "node_modules/@babel/core": { - "version": "7.15.8", - "resolved": "https://npm.ivanli.cc/@babel%2fcore/-/core-7.15.8.tgz", - "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fcore/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.15.8", - "@babel/generator": "^7.15.8", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.8", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.8", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -484,13 +466,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.15.8", - "resolved": "https://npm.ivanli.cc/@babel%2fgenerator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fgenerator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.15.6", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -509,13 +491,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", - "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", + "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.15.0", + "@babel/compat-data": "^7.16.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" @@ -538,100 +520,100 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-get-function-arity": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", - "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-module-imports/-/helper-module-imports-7.15.4.tgz", - "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.15.8", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.15.8.tgz", - "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-simple-access": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", - "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" @@ -648,42 +630,42 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-replace-supers/-/helper-replace-supers-7.15.4.tgz", - "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-simple-access/-/helper-simple-access-7.15.4.tgz", - "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" @@ -710,28 +692,28 @@ } }, "node_modules/@babel/helpers": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelpers/-/helpers-7.15.4.tgz", - "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelpers/-/helpers-7.16.0.tgz", + "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://npm.ivanli.cc/@babel%2fhighlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhighlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -818,9 +800,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.15.8", - "resolved": "https://npm.ivanli.cc/@babel%2fparser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fparser/-/parser-7.16.0.tgz", + "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==", "dev": true, "license": "MIT", "bin": { @@ -990,9 +972,9 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://npm.ivanli.cc/@babel%2fplugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fplugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz", + "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1006,34 +988,34 @@ } }, "node_modules/@babel/template": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2ftemplate/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2ftemplate/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2ftraverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2ftraverse/-/traverse-7.16.0.tgz", + "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1052,13 +1034,13 @@ } }, "node_modules/@babel/types": { - "version": "7.15.6", - "resolved": "https://npm.ivanli.cc/@babel%2ftypes/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2ftypes/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1175,9 +1157,9 @@ "license": "MIT" }, "node_modules/@fennec/configuration": { - "version": "0.0.1", - "resolved": "https://npm.ivanli.cc/@fennec%2fconfiguration/-/configuration-0.0.1.tgz", - "integrity": "sha512-5LZLmml8B684BvJFA1XxdsdpOMJeXnayWTnZLS3mM6lx34ZAhfuMQS5e222m0w+eqbfb/b/LD5JaHSqG+pKVYQ==", + "version": "0.0.2", + "resolved": "https://npm.ivanli.cc/@fennec%2fconfiguration/-/configuration-0.0.2.tgz", + "integrity": "sha512-NPolqyjLYSvqtWolp6AN8cRQsmskiRopNpHnKtotEdNGV2wzoeMxIWYOGIlmvxRTrnAr0iJCu1ULc5m5LoAUXA==", "license": "MIT", "dependencies": { "debug": "^4.3.2", @@ -1206,13 +1188,13 @@ "license": "0BSD" }, "node_modules/@graphql-tools/mock": { - "version": "8.4.1", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmock/-/mock-8.4.1.tgz", - "integrity": "sha512-eIW2H1k9b4Sczzy1Za+GdaKBc8lTXo8MbJH4oivh1AoGl6/Tu9jTOOTS/b07zQzG+6sIQG54o9W6s2TqDmD+YQ==", + "version": "8.4.2", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmock/-/mock-8.4.2.tgz", + "integrity": "sha512-2v4v99mWUB1by+6Bk01PoJCUVnYoNSOT0E5VvFRf5oMwJPaRKLAbC+IjZaRoen1tWpVrg+3Coub7co8jyhvm/Q==", "license": "MIT", "dependencies": { - "@graphql-tools/schema": "^8.2.0", - "@graphql-tools/utils": "^8.2.3", + "@graphql-tools/schema": "^8.3.1", + "@graphql-tools/utils": "^8.5.1", "fast-json-stable-stringify": "^2.1.0", "tslib": "~2.3.0" }, @@ -1220,27 +1202,14 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/merge": { - "version": "8.2.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.0.tgz", - "integrity": "sha512-nfMLYF7zczjnIbChZtqbvozRfuRweMD1Fe9HHd4RXd3Tcsj6E17srW0QJfxUoIIWh4pitj+XwZAwhj1PWBDU7g==", - "license": "MIT", - "dependencies": { - "@graphql-tools/utils": "^8.4.0", - "tslib": "~2.3.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/schema": { - "version": "8.3.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.0.tgz", - "integrity": "sha512-OJD4Q1Xa3sffRiHzy0sskZz9ZWeqaujINfoim4CTk5Y9es1LS+WnKi25wVhmL2SGzzmKuAv7oDn+dpQAlM+Gfw==", + "version": "8.3.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.1.tgz", + "integrity": "sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ==", "license": "MIT", "dependencies": { - "@graphql-tools/merge": "^8.2.0", - "@graphql-tools/utils": "^8.4.0", + "@graphql-tools/merge": "^8.2.1", + "@graphql-tools/utils": "^8.5.1", "tslib": "~2.3.0", "value-or-promise": "1.0.11" }, @@ -1248,10 +1217,23 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/schema/node_modules/@graphql-tools/merge": { + "version": "8.2.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.1.tgz", + "integrity": "sha512-Q240kcUszhXiAYudjuJgNuLgy9CryDP3wp83NOZQezfA6h3ByYKU7xI6DiKrdjyVaGpYN3ppUmdj0uf5GaXzMA==", + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^8.5.1", + "tslib": "~2.3.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/utils": { - "version": "8.5.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.0.tgz", - "integrity": "sha512-jMwLm6YdN+Vbqntg5GHqDvGLpLa/xPSpRs/c40d0rBuel77wo7AaQ8jHeBSpp9y+7kp7HrGSWff1u7yJ7F8ppw==", + "version": "8.5.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.1.tgz", + "integrity": "sha512-V/OQVpj+Z05qW9ZdlJWSKzREYlgGEq+juV+pUy3JO9jI+sZo/W3oncuW9+1awwp/RkL0aZ9RgjL+XYOgCsmOLw==", "license": "MIT", "dependencies": { "tslib": "~2.3.0" @@ -1320,9 +1302,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.4.1", - "resolved": "https://npm.ivanli.cc/@grpc%2fgrpc-js/-/grpc-js-1.4.1.tgz", - "integrity": "sha512-/chkA48TdAvATHA7RXJPeHQLdfFhpu51974s8htjO/XTDHA41j5+SkR5Io+lr9XsLmkZD6HxLyRAFGmA9wjO2w==", + "version": "1.4.2", + "resolved": "https://npm.ivanli.cc/@grpc%2fgrpc-js/-/grpc-js-1.4.2.tgz", + "integrity": "sha512-aUN6oGk9un8rfYWz73nQgFxPCYJQYd8LpIGguZHBsNduBMyqG6EWANrsVBuTG+nl/l4dKb3x+qi1l9+oxDxqGg==", "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.6.4", @@ -2953,9 +2935,9 @@ "license": "MIT" }, "node_modules/@types/validator": { - "version": "13.6.5", - "resolved": "https://npm.ivanli.cc/@types%2fvalidator/-/validator-13.6.5.tgz", - "integrity": "sha512-ilpDKpjjq/w/IyyTuQ38mABdaEzTzTugPyU7DlMCMKd8MMYngnPKhA2TgdO1MfEDED9KVV7uSOL1fDkgwJp/wg==", + "version": "13.6.6", + "resolved": "https://npm.ivanli.cc/@types%2fvalidator/-/validator-13.6.6.tgz", + "integrity": "sha512-+qogUELb4gMhrMjSh/seKmGVvN+uQLfyqJAqYRWqVHsvBsUO2xDBCL8CJ/ZSukbd8vXaoYbpIssAmfLEzzBHEw==", "license": "MIT" }, "node_modules/@types/ws": { @@ -3694,9 +3676,9 @@ } }, "node_modules/apollo-graphql": { - "version": "0.9.3", - "resolved": "https://npm.ivanli.cc/apollo-graphql/-/apollo-graphql-0.9.3.tgz", - "integrity": "sha512-rcAl2E841Iko4kSzj4Pt3PRBitmyq1MvoEmpl04TQSpGnoVgl1E/ZXuLBYxMTSnEAm7umn2IsoY+c6Ll9U/10A==", + "version": "0.9.4", + "resolved": "https://npm.ivanli.cc/apollo-graphql/-/apollo-graphql-0.9.4.tgz", + "integrity": "sha512-0X2sZxfmn7lJrRknUPBG+L0LP1B0SKX1qtULIWrDbIpyl9LuSyjnDaGtmvc4IQtyKvmQXtAhEHBnprRokkjkyw==", "license": "MIT", "dependencies": { "core-js-pure": "^3.10.2", @@ -3810,27 +3792,14 @@ "graphql": "^15.3.0" } }, - "node_modules/apollo-server-core/node_modules/@graphql-tools/merge": { - "version": "8.2.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.0.tgz", - "integrity": "sha512-nfMLYF7zczjnIbChZtqbvozRfuRweMD1Fe9HHd4RXd3Tcsj6E17srW0QJfxUoIIWh4pitj+XwZAwhj1PWBDU7g==", - "license": "MIT", - "dependencies": { - "@graphql-tools/utils": "^8.4.0", - "tslib": "~2.3.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, "node_modules/apollo-server-core/node_modules/@graphql-tools/schema": { - "version": "8.3.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.0.tgz", - "integrity": "sha512-OJD4Q1Xa3sffRiHzy0sskZz9ZWeqaujINfoim4CTk5Y9es1LS+WnKi25wVhmL2SGzzmKuAv7oDn+dpQAlM+Gfw==", + "version": "8.3.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.1.tgz", + "integrity": "sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ==", "license": "MIT", "dependencies": { - "@graphql-tools/merge": "^8.2.0", - "@graphql-tools/utils": "^8.4.0", + "@graphql-tools/merge": "^8.2.1", + "@graphql-tools/utils": "^8.5.1", "tslib": "~2.3.0", "value-or-promise": "1.0.11" }, @@ -3838,10 +3807,23 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "node_modules/apollo-server-core/node_modules/@graphql-tools/schema/node_modules/@graphql-tools/merge": { + "version": "8.2.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.1.tgz", + "integrity": "sha512-Q240kcUszhXiAYudjuJgNuLgy9CryDP3wp83NOZQezfA6h3ByYKU7xI6DiKrdjyVaGpYN3ppUmdj0uf5GaXzMA==", + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^8.5.1", + "tslib": "~2.3.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/apollo-server-core/node_modules/@graphql-tools/utils": { - "version": "8.5.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.0.tgz", - "integrity": "sha512-jMwLm6YdN+Vbqntg5GHqDvGLpLa/xPSpRs/c40d0rBuel77wo7AaQ8jHeBSpp9y+7kp7HrGSWff1u7yJ7F8ppw==", + "version": "8.5.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.1.tgz", + "integrity": "sha512-V/OQVpj+Z05qW9ZdlJWSKzREYlgGEq+juV+pUy3JO9jI+sZo/W3oncuW9+1awwp/RkL0aZ9RgjL+XYOgCsmOLw==", "license": "MIT", "dependencies": { "tslib": "~2.3.0" @@ -4465,16 +4447,16 @@ } }, "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.0.4", - "resolved": "https://npm.ivanli.cc/istanbul-lib-instrument/-/istanbul-lib-instrument-5.0.4.tgz", - "integrity": "sha512-W6jJF9rLGEISGoCyXRqa/JCGQGmmxPO10TMu7izaUTynxvBvTjqzAIIGCK9USBmIbQAaSWD6XJPrM9Pv5INknw==", + "version": "5.1.0", + "resolved": "https://npm.ivanli.cc/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" }, "engines": { @@ -4895,9 +4877,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001271", - "resolved": "https://npm.ivanli.cc/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", - "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==", + "version": "1.0.30001274", + "resolved": "https://npm.ivanli.cc/caniuse-lite/-/caniuse-lite-1.0.30001274.tgz", + "integrity": "sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==", "dev": true, "license": "CC-BY-4.0", "funding": { @@ -5713,9 +5695,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.3.879", - "resolved": "https://npm.ivanli.cc/electron-to-chromium/-/electron-to-chromium-1.3.879.tgz", - "integrity": "sha512-zJo+D9GwbJvM31IdFmwcGvychhk4KKbKYo2GWlsn+C/dxz2NwmbhGJjWwTfFSF2+eFH7VvfA8MCZ8SOqTrlnpw==", + "version": "1.3.885", + "resolved": "https://npm.ivanli.cc/electron-to-chromium/-/electron-to-chromium-1.3.885.tgz", + "integrity": "sha512-JXKFJcVWrdHa09n4CNZYfYaK6EW5aAew7/wr3L1OnsD1L+JHL+RCtd7QgIsxUbFPeTwPlvnpqNNTOLkoefmtXg==", "dev": true, "license": "ISC" }, @@ -6646,6 +6628,13 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "license": "MIT" }, + "node_modules/find-free-ports": { + "version": "3.0.0", + "resolved": "https://npm.ivanli.cc/find-free-ports/-/find-free-ports-3.0.0.tgz", + "integrity": "sha512-C9XrjG5O1EWPHSjY/hzJaUAoyUQ+KhmiYn0zHohOpScSeWr5TqJu613iIvzI4DnIKpdcBZZ5B4ifiUA10Y2HuA==", + "dev": true, + "license": "MIT" + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://npm.ivanli.cc/find-up/-/find-up-4.1.0.tgz", @@ -6682,9 +6671,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.14.4", - "resolved": "https://npm.ivanli.cc/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "version": "1.14.5", + "resolved": "https://npm.ivanli.cc/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", "funding": [ { "type": "individual", @@ -7009,9 +6998,9 @@ "license": "BSD-2-Clause" }, "node_modules/globals": { - "version": "13.11.0", - "resolved": "https://npm.ivanli.cc/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.0", + "resolved": "https://npm.ivanli.cc/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "license": "MIT", "dependencies": { @@ -7053,9 +7042,9 @@ "license": "ISC" }, "node_modules/graphql": { - "version": "15.6.1", - "resolved": "https://npm.ivanli.cc/graphql/-/graphql-15.6.1.tgz", - "integrity": "sha512-3i5lu0z6dRvJ48QP9kFxBkJ7h4Kso7PS8eahyTFz5Jm6CvQfLtNIE8LX9N6JLnXTuwR+sIYnXzaWp6anOg0QQw==", + "version": "15.7.2", + "resolved": "https://npm.ivanli.cc/graphql/-/graphql-15.7.2.tgz", + "integrity": "sha512-AnnKk7hFQFmU/2I9YSQf3xw44ctnSFCfp3zE0N6W174gqe9fWG/2rKaKxROK7CcI3XtERpjEKFqts8o319Kf7A==", "license": "MIT", "engines": { "node": ">= 10.x" @@ -7166,27 +7155,14 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/graphql-tools/node_modules/@graphql-tools/merge": { - "version": "8.2.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.0.tgz", - "integrity": "sha512-nfMLYF7zczjnIbChZtqbvozRfuRweMD1Fe9HHd4RXd3Tcsj6E17srW0QJfxUoIIWh4pitj+XwZAwhj1PWBDU7g==", - "license": "MIT", - "dependencies": { - "@graphql-tools/utils": "^8.4.0", - "tslib": "~2.3.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, "node_modules/graphql-tools/node_modules/@graphql-tools/schema": { - "version": "8.3.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.0.tgz", - "integrity": "sha512-OJD4Q1Xa3sffRiHzy0sskZz9ZWeqaujINfoim4CTk5Y9es1LS+WnKi25wVhmL2SGzzmKuAv7oDn+dpQAlM+Gfw==", + "version": "8.3.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.1.tgz", + "integrity": "sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ==", "license": "MIT", "dependencies": { - "@graphql-tools/merge": "^8.2.0", - "@graphql-tools/utils": "^8.4.0", + "@graphql-tools/merge": "^8.2.1", + "@graphql-tools/utils": "^8.5.1", "tslib": "~2.3.0", "value-or-promise": "1.0.11" }, @@ -7194,10 +7170,23 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/graphql-tools/node_modules/@graphql-tools/utils": { - "version": "8.5.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.0.tgz", - "integrity": "sha512-jMwLm6YdN+Vbqntg5GHqDvGLpLa/xPSpRs/c40d0rBuel77wo7AaQ8jHeBSpp9y+7kp7HrGSWff1u7yJ7F8ppw==", + "node_modules/graphql-tools/node_modules/@graphql-tools/schema/node_modules/@graphql-tools/merge": { + "version": "8.2.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.1.tgz", + "integrity": "sha512-Q240kcUszhXiAYudjuJgNuLgy9CryDP3wp83NOZQezfA6h3ByYKU7xI6DiKrdjyVaGpYN3ppUmdj0uf5GaXzMA==", + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^8.5.1", + "tslib": "~2.3.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-tools/node_modules/@graphql-tools/schema/node_modules/@graphql-tools/utils": { + "version": "8.5.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.1.tgz", + "integrity": "sha512-V/OQVpj+Z05qW9ZdlJWSKzREYlgGEq+juV+pUy3JO9jI+sZo/W3oncuW9+1awwp/RkL0aZ9RgjL+XYOgCsmOLw==", "license": "MIT", "dependencies": { "tslib": "~2.3.0" @@ -9154,9 +9143,9 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.9.38", - "resolved": "https://npm.ivanli.cc/libphonenumber-js/-/libphonenumber-js-1.9.38.tgz", - "integrity": "sha512-7CCl9NZPYtX4JNXdvV5RnrQqrXp7LsLOTpYSUfEJBiySEnC5hysdwouXAuWgPDB55D/fpKm4RjM2/tUUh8kuoA==", + "version": "1.9.39", + "resolved": "https://npm.ivanli.cc/libphonenumber-js/-/libphonenumber-js-1.9.39.tgz", + "integrity": "sha512-TxYz/Ii7mjkocKGKmFHhsTAvvcxr4AY3yUlZzZ2z7HC4DPRrNlzJ9n32/SMogqsyFOXLMXQPCkCInNRbiVaEPA==", "license": "MIT" }, "node_modules/lines-and-columns": { @@ -12799,9 +12788,9 @@ } }, "node_modules/webpack": { - "version": "5.60.0", - "resolved": "https://npm.ivanli.cc/webpack/-/webpack-5.60.0.tgz", - "integrity": "sha512-OL5GDYi2dKxnwJPSOg2tODgzDxAffN0osgWkZaBo/l3ikCxDFP+tuJT3uF7GyBE3SDBpKML/+a8EobyWAQO3DQ==", + "version": "5.61.0", + "resolved": "https://npm.ivanli.cc/webpack/-/webpack-5.61.0.tgz", + "integrity": "sha512-fPdTuaYZ/GMGFm4WrPi2KRCqS1vDp773kj9S0iI5Uc//5cszsFEDgHNaX4Rj1vobUiU1dFIV3mA9k1eHeluFpw==", "dev": true, "license": "MIT", "peer": true, @@ -13464,9 +13453,9 @@ } }, "@apollographql/apollo-tools": { - "version": "0.5.1", - "resolved": "https://npm.ivanli.cc/@apollographql%2fapollo-tools/-/apollo-tools-0.5.1.tgz", - "integrity": "sha512-ZII+/xUFfb9ezDU2gad114+zScxVFMVlZ91f8fGApMzlS1kkqoyLnC4AJaQ1Ya/X+b63I20B4Gd+eCL8QuB4sA==" + "version": "0.5.2", + "resolved": "https://npm.ivanli.cc/@apollographql%2fapollo-tools/-/apollo-tools-0.5.2.tgz", + "integrity": "sha512-KxZiw0Us3k1d0YkJDhOpVH5rJ+mBfjXcgoRoCcslbgirjgLotKMzOcx4PZ7YTEvvEROmvG7X3Aon41GvMmyGsw==" }, "@apollographql/graphql-playground-html": { "version": "1.6.29", @@ -13552,35 +13541,35 @@ } }, "@babel/code-frame": { - "version": "7.15.8", - "resolved": "https://npm.ivanli.cc/@babel%2fcode-frame/-/code-frame-7.15.8.tgz", - "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fcode-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.0" } }, "@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://npm.ivanli.cc/@babel%2fcompat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fcompat-data/-/compat-data-7.16.0.tgz", + "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", "dev": true }, "@babel/core": { - "version": "7.15.8", - "resolved": "https://npm.ivanli.cc/@babel%2fcore/-/core-7.15.8.tgz", - "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fcore/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.15.8", - "@babel/generator": "^7.15.8", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.8", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.8", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -13604,12 +13593,12 @@ } }, "@babel/generator": { - "version": "7.15.8", - "resolved": "https://npm.ivanli.cc/@babel%2fgenerator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fgenerator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, "requires": { - "@babel/types": "^7.15.6", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -13623,12 +13612,12 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", - "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", + "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", "dev": true, "requires": { - "@babel/compat-data": "^7.15.0", + "@babel/compat-data": "^7.16.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" @@ -13643,75 +13632,75 @@ } }, "@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", - "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-imports": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-module-imports/-/helper-module-imports-7.15.4.tgz", - "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-transforms": { - "version": "7.15.8", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.15.8.tgz", - "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-simple-access": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-optimise-call-expression": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", - "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-plugin-utils": { @@ -13721,33 +13710,33 @@ "dev": true }, "@babel/helper-replace-supers": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-replace-supers/-/helper-replace-supers-7.15.4.tgz", - "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-simple-access": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-simple-access/-/helper-simple-access-7.15.4.tgz", - "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-validator-identifier": { @@ -13763,23 +13752,23 @@ "dev": true }, "@babel/helpers": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2fhelpers/-/helpers-7.15.4.tgz", - "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhelpers/-/helpers-7.16.0.tgz", + "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", "dev": true, "requires": { - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://npm.ivanli.cc/@babel%2fhighlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fhighlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -13843,9 +13832,9 @@ } }, "@babel/parser": { - "version": "7.15.8", - "resolved": "https://npm.ivanli.cc/@babel%2fparser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fparser/-/parser-7.16.0.tgz", + "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -13957,38 +13946,38 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://npm.ivanli.cc/@babel%2fplugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2fplugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz", + "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/template": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2ftemplate/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2ftemplate/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/traverse": { - "version": "7.15.4", - "resolved": "https://npm.ivanli.cc/@babel%2ftraverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2ftraverse/-/traverse-7.16.0.tgz", + "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -14002,12 +13991,12 @@ } }, "@babel/types": { - "version": "7.15.6", - "resolved": "https://npm.ivanli.cc/@babel%2ftypes/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://npm.ivanli.cc/@babel%2ftypes/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" } }, @@ -14095,9 +14084,9 @@ } }, "@fennec/configuration": { - "version": "0.0.1", - "resolved": "https://npm.ivanli.cc/@fennec%2fconfiguration/-/configuration-0.0.1.tgz", - "integrity": "sha512-5LZLmml8B684BvJFA1XxdsdpOMJeXnayWTnZLS3mM6lx34ZAhfuMQS5e222m0w+eqbfb/b/LD5JaHSqG+pKVYQ==", + "version": "0.0.2", + "resolved": "https://npm.ivanli.cc/@fennec%2fconfiguration/-/configuration-0.0.2.tgz", + "integrity": "sha512-NPolqyjLYSvqtWolp6AN8cRQsmskiRopNpHnKtotEdNGV2wzoeMxIWYOGIlmvxRTrnAr0iJCu1ULc5m5LoAUXA==", "requires": { "debug": "^4.3.2", "etcd3": "^1.1.0", @@ -14122,40 +14111,42 @@ } }, "@graphql-tools/mock": { - "version": "8.4.1", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmock/-/mock-8.4.1.tgz", - "integrity": "sha512-eIW2H1k9b4Sczzy1Za+GdaKBc8lTXo8MbJH4oivh1AoGl6/Tu9jTOOTS/b07zQzG+6sIQG54o9W6s2TqDmD+YQ==", + "version": "8.4.2", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmock/-/mock-8.4.2.tgz", + "integrity": "sha512-2v4v99mWUB1by+6Bk01PoJCUVnYoNSOT0E5VvFRf5oMwJPaRKLAbC+IjZaRoen1tWpVrg+3Coub7co8jyhvm/Q==", "requires": { - "@graphql-tools/schema": "^8.2.0", - "@graphql-tools/utils": "^8.2.3", + "@graphql-tools/schema": "^8.3.1", + "@graphql-tools/utils": "^8.5.1", "fast-json-stable-stringify": "^2.1.0", "tslib": "~2.3.0" }, "dependencies": { - "@graphql-tools/merge": { - "version": "8.2.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.0.tgz", - "integrity": "sha512-nfMLYF7zczjnIbChZtqbvozRfuRweMD1Fe9HHd4RXd3Tcsj6E17srW0QJfxUoIIWh4pitj+XwZAwhj1PWBDU7g==", - "requires": { - "@graphql-tools/utils": "^8.4.0", - "tslib": "~2.3.0" - } - }, "@graphql-tools/schema": { - "version": "8.3.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.0.tgz", - "integrity": "sha512-OJD4Q1Xa3sffRiHzy0sskZz9ZWeqaujINfoim4CTk5Y9es1LS+WnKi25wVhmL2SGzzmKuAv7oDn+dpQAlM+Gfw==", + "version": "8.3.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.1.tgz", + "integrity": "sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ==", "requires": { - "@graphql-tools/merge": "^8.2.0", - "@graphql-tools/utils": "^8.4.0", + "@graphql-tools/merge": "^8.2.1", + "@graphql-tools/utils": "^8.5.1", "tslib": "~2.3.0", "value-or-promise": "1.0.11" + }, + "dependencies": { + "@graphql-tools/merge": { + "version": "8.2.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.1.tgz", + "integrity": "sha512-Q240kcUszhXiAYudjuJgNuLgy9CryDP3wp83NOZQezfA6h3ByYKU7xI6DiKrdjyVaGpYN3ppUmdj0uf5GaXzMA==", + "requires": { + "@graphql-tools/utils": "^8.5.1", + "tslib": "~2.3.0" + } + } } }, "@graphql-tools/utils": { - "version": "8.5.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.0.tgz", - "integrity": "sha512-jMwLm6YdN+Vbqntg5GHqDvGLpLa/xPSpRs/c40d0rBuel77wo7AaQ8jHeBSpp9y+7kp7HrGSWff1u7yJ7F8ppw==", + "version": "8.5.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.1.tgz", + "integrity": "sha512-V/OQVpj+Z05qW9ZdlJWSKzREYlgGEq+juV+pUy3JO9jI+sZo/W3oncuW9+1awwp/RkL0aZ9RgjL+XYOgCsmOLw==", "requires": { "tslib": "~2.3.0" } @@ -14209,9 +14200,9 @@ "requires": {} }, "@grpc/grpc-js": { - "version": "1.4.1", - "resolved": "https://npm.ivanli.cc/@grpc%2fgrpc-js/-/grpc-js-1.4.1.tgz", - "integrity": "sha512-/chkA48TdAvATHA7RXJPeHQLdfFhpu51974s8htjO/XTDHA41j5+SkR5Io+lr9XsLmkZD6HxLyRAFGmA9wjO2w==", + "version": "1.4.2", + "resolved": "https://npm.ivanli.cc/@grpc%2fgrpc-js/-/grpc-js-1.4.2.tgz", + "integrity": "sha512-aUN6oGk9un8rfYWz73nQgFxPCYJQYd8LpIGguZHBsNduBMyqG6EWANrsVBuTG+nl/l4dKb3x+qi1l9+oxDxqGg==", "requires": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" @@ -15388,9 +15379,9 @@ "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==" }, "@types/validator": { - "version": "13.6.5", - "resolved": "https://npm.ivanli.cc/@types%2fvalidator/-/validator-13.6.5.tgz", - "integrity": "sha512-ilpDKpjjq/w/IyyTuQ38mABdaEzTzTugPyU7DlMCMKd8MMYngnPKhA2TgdO1MfEDED9KVV7uSOL1fDkgwJp/wg==" + "version": "13.6.6", + "resolved": "https://npm.ivanli.cc/@types%2fvalidator/-/validator-13.6.6.tgz", + "integrity": "sha512-+qogUELb4gMhrMjSh/seKmGVvN+uQLfyqJAqYRWqVHsvBsUO2xDBCL8CJ/ZSukbd8vXaoYbpIssAmfLEzzBHEw==" }, "@types/ws": { "version": "7.4.7", @@ -15902,9 +15893,9 @@ } }, "apollo-graphql": { - "version": "0.9.3", - "resolved": "https://npm.ivanli.cc/apollo-graphql/-/apollo-graphql-0.9.3.tgz", - "integrity": "sha512-rcAl2E841Iko4kSzj4Pt3PRBitmyq1MvoEmpl04TQSpGnoVgl1E/ZXuLBYxMTSnEAm7umn2IsoY+c6Ll9U/10A==", + "version": "0.9.4", + "resolved": "https://npm.ivanli.cc/apollo-graphql/-/apollo-graphql-0.9.4.tgz", + "integrity": "sha512-0X2sZxfmn7lJrRknUPBG+L0LP1B0SKX1qtULIWrDbIpyl9LuSyjnDaGtmvc4IQtyKvmQXtAhEHBnprRokkjkyw==", "requires": { "core-js-pure": "^3.10.2", "lodash.sortby": "^4.7.0", @@ -15994,30 +15985,32 @@ "uuid": "^8.0.0" }, "dependencies": { - "@graphql-tools/merge": { - "version": "8.2.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.0.tgz", - "integrity": "sha512-nfMLYF7zczjnIbChZtqbvozRfuRweMD1Fe9HHd4RXd3Tcsj6E17srW0QJfxUoIIWh4pitj+XwZAwhj1PWBDU7g==", - "requires": { - "@graphql-tools/utils": "^8.4.0", - "tslib": "~2.3.0" - } - }, "@graphql-tools/schema": { - "version": "8.3.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.0.tgz", - "integrity": "sha512-OJD4Q1Xa3sffRiHzy0sskZz9ZWeqaujINfoim4CTk5Y9es1LS+WnKi25wVhmL2SGzzmKuAv7oDn+dpQAlM+Gfw==", + "version": "8.3.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.1.tgz", + "integrity": "sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ==", "requires": { - "@graphql-tools/merge": "^8.2.0", - "@graphql-tools/utils": "^8.4.0", + "@graphql-tools/merge": "^8.2.1", + "@graphql-tools/utils": "^8.5.1", "tslib": "~2.3.0", "value-or-promise": "1.0.11" + }, + "dependencies": { + "@graphql-tools/merge": { + "version": "8.2.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.1.tgz", + "integrity": "sha512-Q240kcUszhXiAYudjuJgNuLgy9CryDP3wp83NOZQezfA6h3ByYKU7xI6DiKrdjyVaGpYN3ppUmdj0uf5GaXzMA==", + "requires": { + "@graphql-tools/utils": "^8.5.1", + "tslib": "~2.3.0" + } + } } }, "@graphql-tools/utils": { - "version": "8.5.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.0.tgz", - "integrity": "sha512-jMwLm6YdN+Vbqntg5GHqDvGLpLa/xPSpRs/c40d0rBuel77wo7AaQ8jHeBSpp9y+7kp7HrGSWff1u7yJ7F8ppw==", + "version": "8.5.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.1.tgz", + "integrity": "sha512-V/OQVpj+Z05qW9ZdlJWSKzREYlgGEq+juV+pUy3JO9jI+sZo/W3oncuW9+1awwp/RkL0aZ9RgjL+XYOgCsmOLw==", "requires": { "tslib": "~2.3.0" } @@ -16457,15 +16450,15 @@ }, "dependencies": { "istanbul-lib-instrument": { - "version": "5.0.4", - "resolved": "https://npm.ivanli.cc/istanbul-lib-instrument/-/istanbul-lib-instrument-5.0.4.tgz", - "integrity": "sha512-W6jJF9rLGEISGoCyXRqa/JCGQGmmxPO10TMu7izaUTynxvBvTjqzAIIGCK9USBmIbQAaSWD6XJPrM9Pv5INknw==", + "version": "5.1.0", + "resolved": "https://npm.ivanli.cc/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", "dev": true, "requires": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" } }, @@ -16750,9 +16743,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001271", - "resolved": "https://npm.ivanli.cc/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", - "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==", + "version": "1.0.30001274", + "resolved": "https://npm.ivanli.cc/caniuse-lite/-/caniuse-lite-1.0.30001274.tgz", + "integrity": "sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==", "dev": true }, "chalk": { @@ -17326,9 +17319,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.879", - "resolved": "https://npm.ivanli.cc/electron-to-chromium/-/electron-to-chromium-1.3.879.tgz", - "integrity": "sha512-zJo+D9GwbJvM31IdFmwcGvychhk4KKbKYo2GWlsn+C/dxz2NwmbhGJjWwTfFSF2+eFH7VvfA8MCZ8SOqTrlnpw==", + "version": "1.3.885", + "resolved": "https://npm.ivanli.cc/electron-to-chromium/-/electron-to-chromium-1.3.885.tgz", + "integrity": "sha512-JXKFJcVWrdHa09n4CNZYfYaK6EW5aAew7/wr3L1OnsD1L+JHL+RCtd7QgIsxUbFPeTwPlvnpqNNTOLkoefmtXg==", "dev": true }, "emittery": { @@ -17996,6 +17989,12 @@ } } }, + "find-free-ports": { + "version": "3.0.0", + "resolved": "https://npm.ivanli.cc/find-free-ports/-/find-free-ports-3.0.0.tgz", + "integrity": "sha512-C9XrjG5O1EWPHSjY/hzJaUAoyUQ+KhmiYn0zHohOpScSeWr5TqJu613iIvzI4DnIKpdcBZZ5B4ifiUA10Y2HuA==", + "dev": true + }, "find-up": { "version": "4.1.0", "resolved": "https://npm.ivanli.cc/find-up/-/find-up-4.1.0.tgz", @@ -18023,9 +18022,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.4", - "resolved": "https://npm.ivanli.cc/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==" + "version": "1.14.5", + "resolved": "https://npm.ivanli.cc/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" }, "for-each": { "version": "0.3.3", @@ -18234,9 +18233,9 @@ "dev": true }, "globals": { - "version": "13.11.0", - "resolved": "https://npm.ivanli.cc/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.0", + "resolved": "https://npm.ivanli.cc/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -18263,9 +18262,9 @@ "dev": true }, "graphql": { - "version": "15.6.1", - "resolved": "https://npm.ivanli.cc/graphql/-/graphql-15.6.1.tgz", - "integrity": "sha512-3i5lu0z6dRvJ48QP9kFxBkJ7h4Kso7PS8eahyTFz5Jm6CvQfLtNIE8LX9N6JLnXTuwR+sIYnXzaWp6anOg0QQw==" + "version": "15.7.2", + "resolved": "https://npm.ivanli.cc/graphql/-/graphql-15.7.2.tgz", + "integrity": "sha512-AnnKk7hFQFmU/2I9YSQf3xw44ctnSFCfp3zE0N6W174gqe9fWG/2rKaKxROK7CcI3XtERpjEKFqts8o319Kf7A==" }, "graphql-extensions": { "version": "0.15.0", @@ -18337,32 +18336,34 @@ "tslib": "~2.3.0" }, "dependencies": { - "@graphql-tools/merge": { - "version": "8.2.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.0.tgz", - "integrity": "sha512-nfMLYF7zczjnIbChZtqbvozRfuRweMD1Fe9HHd4RXd3Tcsj6E17srW0QJfxUoIIWh4pitj+XwZAwhj1PWBDU7g==", - "requires": { - "@graphql-tools/utils": "^8.4.0", - "tslib": "~2.3.0" - } - }, "@graphql-tools/schema": { - "version": "8.3.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.0.tgz", - "integrity": "sha512-OJD4Q1Xa3sffRiHzy0sskZz9ZWeqaujINfoim4CTk5Y9es1LS+WnKi25wVhmL2SGzzmKuAv7oDn+dpQAlM+Gfw==", + "version": "8.3.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fschema/-/schema-8.3.1.tgz", + "integrity": "sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ==", "requires": { - "@graphql-tools/merge": "^8.2.0", - "@graphql-tools/utils": "^8.4.0", + "@graphql-tools/merge": "^8.2.1", + "@graphql-tools/utils": "^8.5.1", "tslib": "~2.3.0", "value-or-promise": "1.0.11" - } - }, - "@graphql-tools/utils": { - "version": "8.5.0", - "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.0.tgz", - "integrity": "sha512-jMwLm6YdN+Vbqntg5GHqDvGLpLa/xPSpRs/c40d0rBuel77wo7AaQ8jHeBSpp9y+7kp7HrGSWff1u7yJ7F8ppw==", - "requires": { - "tslib": "~2.3.0" + }, + "dependencies": { + "@graphql-tools/merge": { + "version": "8.2.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2fmerge/-/merge-8.2.1.tgz", + "integrity": "sha512-Q240kcUszhXiAYudjuJgNuLgy9CryDP3wp83NOZQezfA6h3ByYKU7xI6DiKrdjyVaGpYN3ppUmdj0uf5GaXzMA==", + "requires": { + "@graphql-tools/utils": "^8.5.1", + "tslib": "~2.3.0" + } + }, + "@graphql-tools/utils": { + "version": "8.5.1", + "resolved": "https://npm.ivanli.cc/@graphql-tools%2futils/-/utils-8.5.1.tgz", + "integrity": "sha512-V/OQVpj+Z05qW9ZdlJWSKzREYlgGEq+juV+pUy3JO9jI+sZo/W3oncuW9+1awwp/RkL0aZ9RgjL+XYOgCsmOLw==", + "requires": { + "tslib": "~2.3.0" + } + } } }, "value-or-promise": { @@ -19711,9 +19712,9 @@ } }, "libphonenumber-js": { - "version": "1.9.38", - "resolved": "https://npm.ivanli.cc/libphonenumber-js/-/libphonenumber-js-1.9.38.tgz", - "integrity": "sha512-7CCl9NZPYtX4JNXdvV5RnrQqrXp7LsLOTpYSUfEJBiySEnC5hysdwouXAuWgPDB55D/fpKm4RjM2/tUUh8kuoA==" + "version": "1.9.39", + "resolved": "https://npm.ivanli.cc/libphonenumber-js/-/libphonenumber-js-1.9.39.tgz", + "integrity": "sha512-TxYz/Ii7mjkocKGKmFHhsTAvvcxr4AY3yUlZzZ2z7HC4DPRrNlzJ9n32/SMogqsyFOXLMXQPCkCInNRbiVaEPA==" }, "lines-and-columns": { "version": "1.1.6", @@ -22137,9 +22138,9 @@ "dev": true }, "webpack": { - "version": "5.60.0", - "resolved": "https://npm.ivanli.cc/webpack/-/webpack-5.60.0.tgz", - "integrity": "sha512-OL5GDYi2dKxnwJPSOg2tODgzDxAffN0osgWkZaBo/l3ikCxDFP+tuJT3uF7GyBE3SDBpKML/+a8EobyWAQO3DQ==", + "version": "5.61.0", + "resolved": "https://npm.ivanli.cc/webpack/-/webpack-5.61.0.tgz", + "integrity": "sha512-fPdTuaYZ/GMGFm4WrPi2KRCqS1vDp773kj9S0iI5Uc//5cszsFEDgHNaX4Rj1vobUiU1dFIV3mA9k1eHeluFpw==", "dev": true, "peer": true, "requires": { diff --git a/package.json b/package.json index bbc8655..c055dfe 100644 --- a/package.json +++ b/package.json @@ -13,15 +13,17 @@ "start:dev": "DEBUG=fennec:* nest start --watch", "start:debug": "DEBUG=fennec:* nest start --debug --watch", "start:prod": "node dist/main", + "init:dev": "node docker/init-dev.mjs", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./test/jest-e2e.json" + "test:e2e": "jest --config ./test/jest-e2e.json", + "typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js" }, "dependencies": { - "@fennec/configuration": "^0.0.1", + "@fennec/configuration": "^0.0.2", "@nestjs-lib/auth": "^0.2.3", "@nestjs-lib/etcd3": "^0.0.1", "@nestjs/common": "^8.1.1", @@ -68,6 +70,8 @@ "eslint": "^8.0.1", "eslint-config-prettier": "8.3.0", "eslint-plugin-prettier": "^4.0.0", + "execa": "^5.1.1", + "find-free-ports": "^3.0.0", "jest": "^27.3.1", "prettier": "^2.4.1", "supertest": "^6.1.6", diff --git a/src/app.module.ts b/src/app.module.ts index 8e52925..f7d96cd 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -26,7 +26,7 @@ import { TagsModule } from './tags/tags.module'; username: configService.get('db.postgres.username'), password: configService.get('db.postgres.password'), database: configService.get('db.postgres.database'), - synchronize: true, + synchronize: false, autoLoadEntities: true, }), inject: [ConfigService], diff --git a/src/main.ts b/src/main.ts index 60fe2d3..8ee1fe9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,3 +1,4 @@ +import { ServiceRegister } from '@fennec/configuration'; import { ValidationPipe } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { NestFactory } from '@nestjs/core'; @@ -15,9 +16,11 @@ async function bootstrap() { }), ); app.useGlobalFilters(new HttpExceptionFilter()); - await app.listen(configService.get('http.port')); + const server = await app.listen(configService.get('http.port', 0)); + const port = server.address().port; const register = new ServiceRegister({ etcd: { hosts: 'http://rpi:2379' } }); - register.register('fennec/api', `http://localhost:${port}`); - register.register('api.fennec', `http://localhost:${port}`); + register.register('blog/api', `http://localhost:${port}`); + register.register('admin.blog/api', `http://localhost:${port}`); + register.register('api.blog', `http://localhost:${port}`); } bootstrap();