From 40b41fbc20ad35393d097336570a72d1eef16906 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 3 Jun 2020 20:57:25 +0800 Subject: [PATCH 001/347] fix: return appVersion as target_binary_range to compatible with code-push 3.0.1 changes --- routes/indexV1.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/routes/indexV1.js b/routes/indexV1.js index 1720f1a8..498517b4 100644 --- a/routes/indexV1.js +++ b/routes/indexV1.js @@ -37,7 +37,9 @@ router.get('/update_check', (req, res, next) => { description : rs.description, is_available : rs.isAvailable, is_disabled : rs.isDisabled, - target_binary_range: rs.targetBinaryRange, + // Note: need to use appVersion here to get it compatible with client side change... + // https://github.com/microsoft/code-push/commit/7d2ffff395cc54db98aefba7c67889f509e8c249#diff-a937c637a47cbd31cbb52c89bef7d197R138 + target_binary_range: rs.appVersion, label: rs.label, package_hash: rs.packageHash, package_size: rs.packageSize, From 36954f5c2636bdd866c9c911116a9251338633ef Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 12 Jan 2021 16:19:01 +0800 Subject: [PATCH 002/347] chore: update package name and LICENSE --- LICENSE | 6 ++++-- package.json | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/LICENSE b/LICENSE index d92b04e8..8510ee18 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,8 @@ (The MIT License) -Copyright (c) 2016-present tablee +Copyright (c) 2020-present shihuimiao + +Copyright (c) 2016-2019 tablee Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -19,4 +21,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/package.json b/package.json index 1e3fc19a..a985c1bf 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { - "name": "code-push-server", + "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", "version": "0.5.4", "license": "MIT", "repository": { "type": "git", - "url": "git://github.com/lisong/code-push-server.git" + "url": "https://github.com/shm-open/code-push-server.git" }, "keywords": [ "code-push", From b2979e0bb67d5af17e2e5b59507ff3b3411b6994 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 3 Jun 2020 20:57:25 +0800 Subject: [PATCH 003/347] fix: return appVersion as target_binary_range to compatible with code-push 3.0.1 changes --- routes/indexV1.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/routes/indexV1.js b/routes/indexV1.js index 1720f1a8..498517b4 100644 --- a/routes/indexV1.js +++ b/routes/indexV1.js @@ -37,7 +37,9 @@ router.get('/update_check', (req, res, next) => { description : rs.description, is_available : rs.isAvailable, is_disabled : rs.isDisabled, - target_binary_range: rs.targetBinaryRange, + // Note: need to use appVersion here to get it compatible with client side change... + // https://github.com/microsoft/code-push/commit/7d2ffff395cc54db98aefba7c67889f509e8c249#diff-a937c637a47cbd31cbb52c89bef7d197R138 + target_binary_range: rs.appVersion, label: rs.label, package_hash: rs.packageHash, package_size: rs.packageSize, From 1ff58298fcd8053cca32591ce511b5e8ebadd849 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 12 Jan 2021 17:05:05 +0800 Subject: [PATCH 004/347] 1.0.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 79668d14..489ab5ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "code-push-server", - "version": "0.5.4", + "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index a985c1bf..87c46c65 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "0.5.4", + "version": "1.0.0", "license": "MIT", "repository": { "type": "git", From 7ce9b4591d17ae31b5ff2f2b99a20771bf222c9b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 29 Jan 2021 03:18:18 +0000 Subject: [PATCH 005/347] Add renovate.json --- renovate.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..f45d8f11 --- /dev/null +++ b/renovate.json @@ -0,0 +1,5 @@ +{ + "extends": [ + "config:base" + ] +} From 1822c0f99adee270a15f343275316a5de725a0f3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 29 Jan 2021 06:34:18 +0000 Subject: [PATCH 006/347] fix(deps): pin dependencies --- package-lock.json | 2 +- package.json | 86 +++++++++++++++++++++++------------------------ 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/package-lock.json b/package-lock.json index 489ab5ad..6e071e76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "code-push-server", + "name": "@shm-open/code-push-server", "version": "1.0.0", "lockfileVersion": 1, "requires": true, diff --git a/package.json b/package.json index 87c46c65..fa8e74d4 100644 --- a/package.json +++ b/package.json @@ -38,51 +38,51 @@ "coverage": "make coverage" }, "dependencies": { - "aliyun-oss-upload-stream": "^1.3.0", - "aliyun-sdk": "^1.11.10", - "aws-sdk": "^2.7.0", - "bcryptjs": "^2.3.0", - "bluebird": "^3.4.1", - "body-parser": "^1.15.2", - "cookie-parser": "^1.4.3", - "cos-nodejs-sdk-v5": "^2.4.10", - "debug": "^3.1.0", - "diff-match-patch": "^1.0.1", - "express": "^4.14.0", - "extract-zip": "^1.6.0", - "formidable": "^1.2.1", - "fs-extra": "^7.0.0", - "helmet": "^3.1.0", - "i18n": "^0.8.3", - "jschardet": "^1.6.0", - "jsonwebtoken": "^8.2.0", - "lodash": "^4.17.5", - "log4js": "^3.0.5", - "markdown-it": "^8.0.1", - "moment": "^2.14.1", - "morgan": "^1.7.0", - "mysql2": "^1.3.5", - "nodemailer": "^4.0.1", - "pug": "^2.0.1", - "qiniu": "^7.1.3", - "upyun": "^3.3.9", - "rand-token": "^0.4.0", - "recursive-readdir": "^2.1.1", - "redis": "^2.6.2", - "request": "^2.72.0", - "sequelize": "^4.37.1", - "serve-favicon": "^2.4.0", - "slash": "^2.0.0", - "validator": "^10.6.0", - "yargs": "^12.0.1", - "yazl": "^2.3.0" + "aliyun-oss-upload-stream": "1.3.0", + "aliyun-sdk": "1.11.10", + "aws-sdk": "2.211.0", + "bcryptjs": "2.4.3", + "bluebird": "3.5.1", + "body-parser": "1.18.2", + "cookie-parser": "1.4.3", + "cos-nodejs-sdk-v5": "2.4.10", + "debug": "3.1.0", + "diff-match-patch": "1.0.1", + "express": "4.16.3", + "extract-zip": "1.6.6", + "formidable": "1.2.1", + "fs-extra": "7.0.0", + "helmet": "3.12.0", + "i18n": "0.8.3", + "jschardet": "1.6.0", + "jsonwebtoken": "8.2.0", + "lodash": "4.17.5", + "log4js": "3.0.5", + "markdown-it": "8.4.1", + "moment": "2.21.0", + "morgan": "1.9.0", + "mysql2": "1.5.2", + "nodemailer": "4.6.3", + "pug": "2.0.1", + "qiniu": "7.1.3", + "upyun": "3.3.9", + "rand-token": "0.4.0", + "recursive-readdir": "2.2.2", + "redis": "2.8.0", + "request": "2.85.0", + "sequelize": "4.37.1", + "serve-favicon": "2.4.5", + "slash": "2.0.0", + "validator": "10.6.0", + "yargs": "12.0.1", + "yazl": "2.4.3" }, "devDependencies": { - "istanbul": "^0.4.5", - "mocha": "^3.2.0", - "should": "^11.2.0", - "supertest": "^3.0.0", - "supervisor": "^0.12.0" + "istanbul": "0.4.5", + "mocha": "3.5.3", + "should": "11.2.1", + "supertest": "3.0.0", + "supervisor": "0.12.0" }, "files": [ "bin", From 9a023ce9e429da497a539a38732e45ffe0b79577 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 29 Jan 2021 06:34:27 +0000 Subject: [PATCH 007/347] chore(deps): update mysql docker tag to v5.7.33 --- docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 2b625f8f..3e8532f3 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -34,7 +34,7 @@ services: - db - redis db: - image: mysql:5.7.23 + image: mysql:5.7.33 volumes: - data-mysql:/var/lib/mysql - ./sql/codepush-all.sql:/docker-entrypoint-initdb.d/codepush-all.sql From fd221eced8b4c3ece6288024b0368471b6bde92f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Mar 2021 07:52:37 +0000 Subject: [PATCH 008/347] fix(deps): update dependency bluebird to v3.7.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e071e76..e93c1228 100644 --- a/package-lock.json +++ b/package-lock.json @@ -339,9 +339,9 @@ "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" }, "bluebird": { - "version": "3.5.1", - "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz", - "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=" + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "body-parser": { "version": "1.18.2", diff --git a/package.json b/package.json index fa8e74d4..216926b4 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "aliyun-sdk": "1.11.10", "aws-sdk": "2.211.0", "bcryptjs": "2.4.3", - "bluebird": "3.5.1", + "bluebird": "3.7.2", "body-parser": "1.18.2", "cookie-parser": "1.4.3", "cos-nodejs-sdk-v5": "2.4.10", From 10dbb5948bd802d5ec31571b65b94b60913fab65 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Mar 2021 07:58:31 +0000 Subject: [PATCH 009/347] fix(deps): update dependency fs-extra to v7.0.1 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e071e76..b49cb35e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1173,9 +1173,9 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "fs-extra": { - "version": "7.0.0", - "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.0.tgz", - "integrity": "sha1-jMP0fOB+97NZOhG5+yRffjTAQdY=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -1699,7 +1699,7 @@ }, "jsonfile": { "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { "graceful-fs": "^4.1.6" @@ -3496,8 +3496,8 @@ }, "universalify": { "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz", - "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=" + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unpipe": { "version": "1.0.0", diff --git a/package.json b/package.json index fa8e74d4..041ad456 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "express": "4.16.3", "extract-zip": "1.6.6", "formidable": "1.2.1", - "fs-extra": "7.0.0", + "fs-extra": "7.0.1", "helmet": "3.12.0", "i18n": "0.8.3", "jschardet": "1.6.0", From 81b2635520cc9cc286f1cdb9c7c01d9ddca7aeca Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Mar 2021 08:00:30 +0000 Subject: [PATCH 010/347] fix(deps): update dependency jsonwebtoken to v8.5.1 --- package-lock.json | 72 +++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 33 insertions(+), 41 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e071e76..f4b81d0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -311,11 +311,6 @@ "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.2.3.tgz", "integrity": "sha1-+xNmgjPZYUz1+0vOlam6QJbN+AE=" }, - "base64url": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/base64url/download/base64url-2.0.0.tgz", - "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" - }, "basic-auth": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/basic-auth/download/basic-auth-2.0.0.tgz", @@ -410,7 +405,7 @@ }, "buffer-equal-constant-time": { "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, "bufferview": { @@ -870,11 +865,10 @@ } }, "ecdsa-sig-formatter": { - "version": "1.0.9", - "resolved": "http://registry.npm.taobao.org/ecdsa-sig-formatter/download/ecdsa-sig-formatter-1.0.9.tgz", - "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "requires": { - "base64url": "^2.0.0", "safe-buffer": "^5.0.1" } }, @@ -1706,11 +1700,11 @@ } }, "jsonwebtoken": { - "version": "8.2.0", - "resolved": "http://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-8.2.0.tgz", - "integrity": "sha1-aQ7DqefpXiiENHzj6eudOJqlmLM=", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "requires": { - "jws": "^3.1.4", + "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", @@ -1719,13 +1713,18 @@ "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", - "xtend": "^4.0.1" + "semver": "^5.6.0" }, "dependencies": { "ms": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz", - "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -1750,23 +1749,21 @@ } }, "jwa": { - "version": "1.1.5", - "resolved": "http://registry.npm.taobao.org/jwa/download/jwa-1.1.5.tgz", - "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "requires": { - "base64url": "2.0.0", "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.9", + "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "jws": { - "version": "3.1.4", - "resolved": "http://registry.npm.taobao.org/jws/download/jws-3.1.4.tgz", - "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "requires": { - "base64url": "^2.0.0", - "jwa": "^1.1.4", + "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, @@ -1870,7 +1867,7 @@ }, "lodash.includes": { "version": "4.3.0", - "resolved": "http://registry.npm.taobao.org/lodash.includes/download/lodash.includes-4.3.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" }, "lodash.isarguments": { @@ -1887,27 +1884,27 @@ }, "lodash.isboolean": { "version": "3.0.3", - "resolved": "http://registry.npm.taobao.org/lodash.isboolean/download/lodash.isboolean-3.0.3.tgz", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" }, "lodash.isinteger": { "version": "4.0.4", - "resolved": "http://registry.npm.taobao.org/lodash.isinteger/download/lodash.isinteger-4.0.4.tgz", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" }, "lodash.isnumber": { "version": "3.0.3", - "resolved": "http://registry.npm.taobao.org/lodash.isnumber/download/lodash.isnumber-3.0.3.tgz", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" }, "lodash.isplainobject": { "version": "4.0.6", - "resolved": "http://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, "lodash.isstring": { "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" }, "lodash.keys": { @@ -1923,7 +1920,7 @@ }, "lodash.once": { "version": "4.1.1", - "resolved": "http://registry.npm.taobao.org/lodash.once/download/lodash.once-4.1.1.tgz", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, "lodash.reduce": { @@ -3729,11 +3726,6 @@ "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz", "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" }, - "xtend": { - "version": "4.0.1", - "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, "y18n": { "version": "3.2.1", "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", diff --git a/package.json b/package.json index fa8e74d4..a0b32b76 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "helmet": "3.12.0", "i18n": "0.8.3", "jschardet": "1.6.0", - "jsonwebtoken": "8.2.0", + "jsonwebtoken": "8.5.1", "lodash": "4.17.5", "log4js": "3.0.5", "markdown-it": "8.4.1", From bc337a57a659b56448a1f0200d6d027336d7007b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Mar 2021 08:02:43 +0000 Subject: [PATCH 011/347] fix(deps): update dependency log4js to v3.0.6 --- package-lock.json | 37 +++++++++++++++++++++---------------- package.json | 2 +- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e071e76..2fa8529f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -479,9 +479,9 @@ "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" }, "circular-json": { - "version": "0.5.5", - "resolved": "http://registry.npm.taobao.org/circular-json/download/circular-json-0.5.5.tgz", - "integrity": "sha1-ZBgu81kELTfNjnZ/yd6Hix6UR9M=" + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", + "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==" }, "clean-css": { "version": "3.4.28", @@ -745,7 +745,7 @@ }, "date-format": { "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/date-format/download/date-format-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=" }, "debug": { @@ -1932,9 +1932,9 @@ "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" }, "log4js": { - "version": "3.0.5", - "resolved": "http://registry.npm.taobao.org/log4js/download/log4js-3.0.5.tgz", - "integrity": "sha1-uAFGv+utaLQw1PNWlVbYpu3+8wM=", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", + "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", "requires": { "circular-json": "^0.5.5", "date-format": "^1.2.0", @@ -2925,9 +2925,9 @@ } }, "rfdc": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/rfdc/download/rfdc-1.1.2.tgz", - "integrity": "sha1-5uctdPXcOd6PU49l4Aw2wYAY40k=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.2.0.tgz", + "integrity": "sha512-ijLyszTMmUrXvjSooucVQwimGUk84eRcmCuLV8Xghe3UO85mjUtRAHRyoMM6XtyqbECaXuBWx18La3523sXINA==" }, "right-align": { "version": "0.1.3", @@ -3214,8 +3214,8 @@ }, "streamroller": { "version": "0.7.0", - "resolved": "http://registry.npm.taobao.org/streamroller/download/streamroller-0.7.0.tgz", - "integrity": "sha1-odG3z4PTmvsNYwSaWsv5NJO99ks=", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", "requires": { "date-format": "^1.2.0", "debug": "^3.1.0", @@ -3223,12 +3223,17 @@ "readable-stream": "^2.3.0" }, "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } } } diff --git a/package.json b/package.json index fa8e74d4..23533224 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "jschardet": "1.6.0", "jsonwebtoken": "8.2.0", "lodash": "4.17.5", - "log4js": "3.0.5", + "log4js": "3.0.6", "markdown-it": "8.4.1", "moment": "2.21.0", "morgan": "1.9.0", From eef567f15254ad85d27221322f7f2440452b2f7a Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 17 Aug 2021 15:41:15 +0800 Subject: [PATCH 012/347] docs: update package path and author --- docs/react-native-code-push.md | 78 +++++++++++++++++----------------- package.json | 6 +-- 2 files changed, 39 insertions(+), 45 deletions(-) diff --git a/docs/react-native-code-push.md b/docs/react-native-code-push.md index 0b70bf37..1a81a895 100644 --- a/docs/react-native-code-push.md +++ b/docs/react-native-code-push.md @@ -2,36 +2,36 @@ ## 使用前须知 - - Q: “苹果应用商店和android应用商店允不允许使用热更新?” - A: “都允许。” +- Q: “苹果应用商店和 android 应用商店允不允许使用热更新?” + A: “都允许。” - > 苹果允许使用热更新[Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), 但是规定不能弹框提示用户更新,影响用户体验。 - > Google Play也允许热更新,但必须弹框告知用户更新。在中国的android市场发布时,都必须关闭更新弹框,否则会在审核应用时以“请上传最新版本的二进制应用包”驳回应用。 - - - Q: “react-native 开发环境更新模式是否可以直接用在生产环境下?” - A: “不能。” + > 苹果允许使用热更新[Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), 但是规定不能弹框提示用户更新,影响用户体验。 + > Google Play 也允许热更新,但必须弹框告知用户更新。在中国的 android 市场发布时,都必须关闭更新弹框,否则会在审核应用时以“请上传最新版本的二进制应用包”驳回应用。 - - Q: “code-push使用复杂么?” - A: “不复杂。很多网上的文章说复杂,是因为作者没有仔细理解官方文档,而且认为踩坑了。” +- Q: “react-native 开发环境更新模式是否可以直接用在生产环境下?” + A: “不能。” - - Q: “为什么推荐code-push?” - A: ”非常好。除了满足基本更新功能外,还有统计,hash计算容错和补丁更新功能。微软的项目,大公司技术有保障,而且开源。近几年微软在拥抱开源方面,让大家也是刮目相看。“ +- Q: “code-push 使用复杂么?” + A: “不复杂。很多网上的文章说复杂,是因为作者没有仔细理解官方文档,而且认为踩坑了。” + +- Q: “为什么推荐 code-push?” + A: ”非常好。除了满足基本更新功能外,还有统计,hash 计算容错和补丁更新功能。微软的项目,大公司技术有保障,而且开源。近几年微软在拥抱开源方面,让大家也是刮目相看。“ ## 安装依赖包 -#### 1. [react-native-cli](https://github.com/facebook/react-native) react-native命令行工具,安装后可以在终端使用`react-native`命令 - +#### 1. [react-native-cli](https://github.com/facebook/react-native) react-native 命令行工具,安装后可以在终端使用`react-native`命令 + ```shell $ npm install react-native-cli@latest -g ``` - -#### 2. [code-push-cli](https://github.com/Microsoft/code-push) 连接微软云端,管理发布更新版本命令行工具,安装后可以在终端使用`code-push`命令 - + +#### 2. [@shm-open/code-push-cli](https://github.com/shm-open/code-push-cli) 管理发布更新版本命令行工具,安装后可以在终端使用`code-push`命令 + ```shell -$ npm install code-push-cli@latest -g +$ npm install code-push-cli@latest -g ``` -#### 3. [react-native-code-push](https://github.com/Microsoft/react-native-code-push) 集成到react-native项目,按照以下步骤安装并修改配置既可集成 +#### 3. [react-native-code-push](https://github.com/Microsoft/react-native-code-push) 集成到 react-native 项目,按照以下步骤安装并修改配置既可集成 ```shell $ react-native init CodePushDemo #初始化一个react-native项目 @@ -40,14 +40,14 @@ $ npm install --save react-native-code-push@latest #安装react-native-code-pus $ react-native link react-native-code-push #连接到项目中,提示输入配置可以先行忽略 ``` -#### 4. [code-push-server](https://github.com/lisong/code-push-server) 微软云服务在中国太慢,可以用它搭建自己的服务端。 +#### 4. [@shm-open/code-push-server](https://github.com/shm-open/code-push-server) 微软云服务在中国太慢,可以用它搭建自己的服务端。 -- [docker](https://github.com/lisong/code-push-server/blob/master/docker/README.md) (recommend) -- [manual operation](https://github.com/lisong/code-push-server/blob/master/docs/README.md) +- [docker](https://github.com/lisong/code-push-server/blob/master/docker/README.md) (recommend) +- [manual operation](https://github.com/lisong/code-push-server/blob/master/docs/README.md) ## 创建服务端应用 -基于code-push-server服务 +基于 code-push-server 服务 ```shell $ code-push login http://YOUR_CODE_PUSH_SERVER_IP:3000 #浏览器中登录获取token,用户名:admin, 密码:123456 @@ -55,17 +55,17 @@ $ code-push app add CodePushDemoiOS ios react-native #创建iOS版, 获取Produc $ code-push app add CodePushDemoAndroid android react-native #创建android版,获取获取Production DeploymentKey ``` -## 配置CodePushDemo react-native项目 +## 配置 CodePushDemo react-native 项目 #### iOS 配置 编辑`Info.plist`文件,添加`CodePushDeploymentKey`和`CodePushServerURL` -1. `CodePushDeploymentKey`值设置为CodePushDemo-ios的Production DeploymentKey值。 +1. `CodePushDeploymentKey`值设置为 CodePushDemo-ios 的 Production DeploymentKey 值。 -2. `CodePushServerURL`值设置为code-push-server服务地址 http://YOUR_CODE_PUSH_SERVER_IP:3000/ 不在同一台机器的时候,请将YOUR_CODE_PUSH_SERVER_IP改成外网ip或者域名地址。 +2. `CodePushServerURL`值设置为 code-push-server 服务地址 http://YOUR_CODE_PUSH_SERVER_IP:3000/ 不在同一台机器的时候,请将 YOUR_CODE_PUSH_SERVER_IP 改成外网 ip 或者域名地址。 -3. 将默认版本号1.0改成三位1.0.0 +3. 将默认版本号 1.0 改成三位 1.0.0 ```xml ... @@ -80,11 +80,11 @@ $ code-push app add CodePushDemoAndroid android react-native #创建android版 编辑`MainApplication.java` -1. `YourKey`替换成CodePushDemo-android的Production DeploymentKey值 +1. `YourKey`替换成 CodePushDemo-android 的 Production DeploymentKey 值 -2. `YourCodePushServerUrl`值设置为code-push-server服务地址 http://YOUR_CODE_PUSH_SERVER_IP:3000/ 不在同一台机器的时候,请将YOUR_CODE_PUSH_SERVER_IP改成外网ip或者域名地址。 +2. `YourCodePushServerUrl`值设置为 code-push-server 服务地址 http://YOUR_CODE_PUSH_SERVER_IP:3000/ 不在同一台机器的时候,请将 YOUR_CODE_PUSH_SERVER_IP 改成外网 ip 或者域名地址。 -3. 将默认版本号1.0改成三位1.0.0 +3. 将默认版本号 1.0 改成三位 1.0.0 ```java @Override @@ -95,7 +95,7 @@ protected List getPackages() { "YourKey", MainApplication.this, BuildConfig.DEBUG, - "YourCodePushServerUrl" + "YourCodePushServerUrl" ) ); } @@ -104,30 +104,31 @@ protected List getPackages() { ## 添加更新检查 可以参考[code-push-demo-app](https://github.com/lisong/code-push-demo-app/) -可以在入口componentDidMount添加 +可以在入口 componentDidMount 添加 ```javascript CodePush.sync({ installMode: CodePush.InstallMode.IMMEDIATE, - updateDialog: true + updateDialog: true, }); ``` 不要忘记头部引入 ```javascript -import CodePush from "react-native-code-push" +import CodePush from "react-native-code-push"; ``` -## 运行CodePushDemo react-native项目 +## 运行 CodePushDemo react-native 项目 #### iOS ```shell $ cd /path/to/CodePushDemo -$ open ios/CodePushDemo.xcodeproj +$ open ios/CodePushDemo.xcodeproj ``` -在Xcode中打开菜单 Product > Scheme > Edit Scheme... > Run 选项中Build Configuration修改成Release, 然后运行编译 + +在 Xcode 中打开菜单 Product > Scheme > Edit Scheme... > Run 选项中 Build Configuration 修改成 Release, 然后运行编译 ### android @@ -140,7 +141,7 @@ $ cd app/build/outputs/apk #将打好的包app-release.apk安装到您的手机 ## 发布更新到服务上 -iOS和android要分开发布,所以创建了`CodePushDemo-ios`和`CodePushDemo-android`应用 +iOS 和 android 要分开发布,所以创建了`CodePushDemo-ios`和`CodePushDemo-android`应用 ```shell $ cd /path/to/CodePushDemo @@ -152,7 +153,4 @@ $ code-push release-react CodePushDemo-android android -d Production #android版 [code-push-demo-app](https://github.com/lisong/code-push-demo-app) - ### 更多信息参考[code-push-server](https://github.com/lisong/code-push-server) - - diff --git a/package.json b/package.json index fa8e74d4..a3a41e31 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,7 @@ "code", "push" ], - "author": { - "name": "Tab Lee", - "email": "lisong2010@gmail.com", - "url": "https://github.com/lisong/" - }, + "author": "shihuimiao", "bin": { "code-push-server": "./bin/www", "code-push-server-db": "./bin/db" From 6ab24d336ce37e4a1522e21cf027096c3467a7a1 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 18 Aug 2021 16:41:59 +0800 Subject: [PATCH 013/347] fix(deps): update mysql2 and setup github action ci --- .github/workflows/nodejs.yml | 40 +++++ .travis.yml | 31 ---- Makefile | 2 - appveyor.yml | 26 --- config/config.test.js | 38 ++-- config/config.testwin.js | 60 ------- package-lock.json | 332 ++++++++++++++--------------------- package.json | 5 +- 8 files changed, 191 insertions(+), 343 deletions(-) create mode 100644 .github/workflows/nodejs.yml delete mode 100644 .travis.yml delete mode 100644 appveyor.yml delete mode 100644 config/config.testwin.js diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml new file mode 100644 index 00000000..aa4930e1 --- /dev/null +++ b/.github/workflows/nodejs.yml @@ -0,0 +1,40 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Node.js CI + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [14.x] + + services: + redis: + image: redis + ports: + - 6379:6379 + mysql: + image: mysql + env: + MYSQL_ROOT_PASSWORD: password + ports: + - 3306:3306 + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + - run: npm ci + - run: npm run build --if-present + - run: npm test diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3a0d6580..00000000 --- a/.travis.yml +++ /dev/null @@ -1,31 +0,0 @@ -language: node_js -env: - - CXX=g++-4.8 -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 - -services: - - redis-server - - mysql - -node_js: - - "8.10.0" - - "7.5" - - "7" - - "6.9.5" - - "6.1" - - "6" - -cache: - directories: - - node_modules -before_install: - # Update Node.js modules - - "test ! -d node_modules || npm prune" - - "test ! -d node_modules || npm rebuild" -script: "npm run-script coverage" -after_script: "npm install coveralls@2.10.0 && cat ./coverage/lcov.info | coveralls" diff --git a/Makefile b/Makefile index 7e59757b..86b47a2a 100644 --- a/Makefile +++ b/Makefile @@ -16,8 +16,6 @@ test-integration: coverage: @echo "\n\nRunning coverage report..." rm -rf coverage - # @NODE_ENV=test CONFIG_FILE=${ROOT}/config/config.test.js ./node_modules/istanbul/lib/cli.js cover --report lcovonly --dir coverage/core ./node_modules/.bin/_mocha \ - # test/unit -- -R spec --recursive --timeout 15000 @NODE_ENV=test CONFIG_FILE=${ROOT}/config/config.test.js mocha test/api/init @NODE_ENV=test PORT=3000 HOST=127.0.0.1 CONFIG_FILE=${ROOT}/config/config.test.js node bin/www & @NODE_ENV=test CONFIG_FILE=${ROOT}/config/config.test.js ./node_modules/istanbul/lib/cli.js cover --report lcovonly --dir coverage/api ./node_modules/.bin/_mocha \ diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 977b5a1e..00000000 --- a/appveyor.yml +++ /dev/null @@ -1,26 +0,0 @@ -init: - - git config --global core.autocrlf input - -environment: - matrix: - - nodejs_version: "8.10.0" - -services: - - mysql -install: - - ps: Install-Product node $env:nodejs_version - - npm install npm@next - - cmd: nuget install redis-64 -excludeversion - - cmd: redis-64\tools\redis-server.exe --service-install - - cmd: redis-64\tools\redis-server.exe --service-start - # - if exist node_modules node_modules\.bin\npm prune - # - if exist node_modules node_modules\.bin\npm rebuild - - node_modules\.bin\npm install -test_script: - - node --version - - node_modules\.bin\npm --version - - set NODE_ENV=test - - set CONFIG_FILE=config/config.testwin.js - - node_modules\.bin\npm run test-win -build: off -version: "{build}" diff --git a/config/config.test.js b/config/config.test.js index 22990cff..bb604976 100644 --- a/config/config.test.js +++ b/config/config.test.js @@ -1,10 +1,10 @@ -var os = require('os'); +var os = require("os"); var config = {}; config.test = { db: { username: "root", - password: null, + password: "password", database: "codepush_test", host: "127.0.0.1", port: 3306, @@ -15,10 +15,10 @@ config.test = { local: { storageDir: os.tmpdir(), downloadUrl: "http://127.0.0.1:3000/download", - public: '/download' + public: "/download", }, jwt: { - tokenSecret: 'INSERT_RANDOM_TOKEN_KEY' + tokenSecret: "INSERT_RANDOM_TOKEN_KEY", }, common: { tryLoginTimes: 10, @@ -34,26 +34,26 @@ config.test = { host: "127.0.0.1", port: 6379, retry_strategy: function (options) { - if (options.error.code === 'ECONNREFUSED') { - return new Error('The server refused the connection'); + if (options.error.code === "ECONNREFUSED") { + return new Error("The server refused the connection"); } if (options.total_retry_time > 1000 * 60 * 60) { - return new Error('Retry time exhausted'); + return new Error("Retry time exhausted"); } if (options.times_connected > 10) { - return undefined; + return undefined; } return Math.max(options.attempt * 100, 3000); - } - } - } -} + }, + }, + }, +}; config.test.log4js = { - appenders: {console: { type: 'console'}}, - categories : { - "default": { appenders: ['console'], level:'error'}, - "startup": { appenders: ['console'], level:'info'}, - "http": { appenders: ['console'], level:'info'} - } -} + appenders: { console: { type: "console" } }, + categories: { + default: { appenders: ["console"], level: "error" }, + startup: { appenders: ["console"], level: "info" }, + http: { appenders: ["console"], level: "info" }, + }, +}; module.exports = config; diff --git a/config/config.testwin.js b/config/config.testwin.js deleted file mode 100644 index 2f5fa96d..00000000 --- a/config/config.testwin.js +++ /dev/null @@ -1,60 +0,0 @@ -var os = require('os'); - -var config = {}; -config.test = { - db: { - username: "root", - password: "Password12!", - database: "codepush_test", - host: "127.0.0.1", - port: 3306, - dialect: "mysql", - logging: false, - operatorsAliases: false, - }, - local: { - storageDir: os.tmpdir(), - downloadUrl: "http://127.0.0.1:3000/download", - public: '/download' - }, - jwt: { - tokenSecret: 'INSERT_RANDOM_TOKEN_KEY' - }, - common: { - tryLoginTimes: 10, - diffNums: 3, - dataDir: os.tmpdir(), - storageType: "local", - updateCheckCache: true, - rolloutClientUniqueIdCache: false, - }, - smtpConfig: false, - redis: { - default: { - host: "127.0.0.1", - port: 6379, - retry_strategy: function (options) { - if (options.error.code === 'ECONNREFUSED') { - return new Error('The server refused the connection'); - } - if (options.total_retry_time > 1000 * 60 * 60) { - return new Error('Retry time exhausted'); - } - if (options.times_connected > 10) { - return undefined; - } - // reconnect after - return Math.max(options.attempt * 100, 3000); - } - } - } -} -config.test.log4js = { - appenders: {console: { type: 'console'}}, - categories : { - "default": { appenders: ['console'], level:'error'}, - "startup": { appenders: ['console'], level:'info'}, - "http": { appenders: ['console'], level:'info'} - } -} -module.exports = config; diff --git a/package-lock.json b/package-lock.json index 6e071e76..ec6f5537 100644 --- a/package-lock.json +++ b/package-lock.json @@ -141,11 +141,6 @@ "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, - "ansicolors": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/ansicolors/download/ansicolors-0.2.1.tgz", - "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=" - }, "any-promise": { "version": "1.3.0", "resolved": "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz", @@ -442,15 +437,6 @@ "resolved": "http://registry.npm.taobao.org/camelize/download/camelize-1.0.0.tgz", "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, - "cardinal": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/cardinal/download/cardinal-1.0.0.tgz", - "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=", - "requires": { - "ansicolors": "~0.2.1", - "redeyed": "~1.0.0" - } - }, "caseless": { "version": "0.12.0", "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", @@ -499,14 +485,6 @@ "requires": { "graceful-readlink": ">= 1.0.0" } - }, - "source-map": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } } } }, @@ -557,6 +535,15 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, "component-emitter": { "version": "1.2.1", "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", @@ -781,9 +768,9 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "denque": { - "version": "1.2.3", - "resolved": "http://registry.npm.taobao.org/denque/download/denque-1.2.3.tgz", - "integrity": "sha1-mMUMjdjN+uMYzFhZzI7j2g+bDMI=" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", + "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" }, "depd": { "version": "1.1.2", @@ -909,6 +896,43 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "escodegen": { + "version": "1.8.1", + "resolved": "http://registry.npm.taobao.org/escodegen/download/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, "esutils": { "version": "2.0.2", "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", @@ -1148,13 +1172,6 @@ "destroy": "^1.0.4", "mime": "^1.3.4", "pause-stream": "~0.0.11" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", - "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" - } } }, "forwarded": { @@ -1194,9 +1211,12 @@ "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" }, "generate-function": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/generate-function/download/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "requires": { + "is-property": "^1.0.2" + } }, "generic-pool": { "version": "3.4.2", @@ -1259,17 +1279,6 @@ "optimist": "^0.6.1", "source-map": "^0.4.4", "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } } }, "har-schema": { @@ -1456,6 +1465,11 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "inflection": { + "version": "1.12.0", + "resolved": "http://registry.npm.taobao.org/inflection/download/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" + }, "inflight": { "version": "1.0.6", "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", @@ -1524,6 +1538,11 @@ "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, "is-regex": { "version": "1.0.4", "resolved": "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz", @@ -1585,31 +1604,6 @@ "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", "dev": true }, - "escodegen": { - "version": "1.8.1", - "resolved": "http://registry.npm.taobao.org/escodegen/download/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, "resolve": { "version": "1.1.7", "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz", @@ -1617,23 +1611,11 @@ "dev": true }, "source-map": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.2.0.tgz", + "version": "http://registry.npm.taobao.org/source-map/download/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, "requires": { "amdefine": ">=0.0.4" } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, @@ -2070,6 +2052,11 @@ "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "mime": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + }, "mime-db": { "version": "1.33.0", "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.33.0.tgz", @@ -2111,8 +2098,8 @@ }, "mocha": { "version": "3.5.3", - "resolved": "http://registry.npm.taobao.org/mocha/download/mocha-3.5.3.tgz", - "integrity": "sha1-HgSA/jbS2lhY0etqzDhBiybqog0=", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", + "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", "dev": true, "requires": { "browser-stdout": "1.3.0", @@ -2129,15 +2116,6 @@ "supports-color": "3.1.2" }, "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, "debug": { "version": "2.6.8", "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.8.tgz", @@ -2169,15 +2147,6 @@ "requires": { "minimist": "0.0.8" } - }, - "supports-color": { - "version": "3.1.2", - "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, @@ -2227,72 +2196,54 @@ "integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA=" }, "mysql2": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/mysql2/download/mysql2-1.5.2.tgz", - "integrity": "sha1-5OBzg5uxCXJmmyQOx3Bh1/9Vz1k=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.0.tgz", + "integrity": "sha512-0t5Ivps5Tdy5YHk5NdKwQhe/4Qyn2pload+S+UooDBvsqngtzujG1BaTWBihQLfeKO3t3122/GtusBtmHEHqww==", "requires": { - "cardinal": "1.0.0", - "denque": "^1.1.1", - "generate-function": "^2.0.0", - "iconv-lite": "^0.4.18", + "denque": "^1.4.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.2", "long": "^4.0.0", - "lru-cache": "^4.1.1", - "named-placeholders": "1.1.1", - "object-assign": "^4.1.1", - "readable-stream": "2.3.2", - "safe-buffer": "^5.0.1", - "seq-queue": "0.0.5", - "sqlstring": "^2.2.0" + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" }, "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, "long": { "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/long/download/long-4.0.0.tgz", - "integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg=" + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "lru-cache": { - "version": "4.1.2", - "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.2.tgz", - "integrity": "sha1-RSNLLm4vKzPaElYkxGZJKaAiTD8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^4.0.0" } }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "readable-stream": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.2.tgz", - "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.0", - "string_decoder": "~1.0.0", - "util-deprecate": "~1.0.1" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, "named-placeholders": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/named-placeholders/download/named-placeholders-1.1.1.tgz", - "integrity": "sha1-O3oNJiA910s6nfTJz7gnsvuQfmQ=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", "requires": { - "lru-cache": "2.5.0" - }, - "dependencies": { - "lru-cache": { - "version": "2.5.0", - "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-2.5.0.tgz", - "integrity": "sha1-2COIrpyWC+y+oMc7uet5tsbOmus=" - } + "lru-cache": "^4.1.3" } }, "negotiator": { @@ -2808,21 +2759,6 @@ "minimatch": "3.0.4" } }, - "redeyed": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/redeyed/download/redeyed-1.0.1.tgz", - "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=", - "requires": { - "esprima": "~3.0.0" - }, - "dependencies": { - "esprima": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-3.0.0.tgz", - "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k=" - } - } - }, "redis": { "version": "2.8.0", "resolved": "http://registry.npm.taobao.org/redis/download/redis-2.8.0.tgz", @@ -2950,6 +2886,11 @@ "graceful-fs": "*" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "sax": { "version": "0.6.1", "resolved": "http://registry.npm.taobao.org/sax/download/sax-0.6.1.tgz", @@ -3034,19 +2975,6 @@ "wkx": "^0.4.1" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", - "requires": { - "ms": "2.0.0" - } - }, - "inflection": { - "version": "1.12.0", - "resolved": "http://registry.npm.taobao.org/inflection/download/inflection-1.12.0.tgz", - "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" - }, "uuid": { "version": "3.2.1", "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.2.1.tgz", @@ -3182,15 +3110,23 @@ "hoek": "4.x.x" } }, + "source-map": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } + }, "sprintf-js": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.1.tgz", "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=" }, "sqlstring": { - "version": "2.3.1", - "resolved": "http://registry.npm.taobao.org/sqlstring/download/sqlstring-2.3.1.tgz", - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", + "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==" }, "sshpk": { "version": "1.14.1", @@ -3285,23 +3221,6 @@ "mime": "^1.4.1", "qs": "^6.5.1", "readable-stream": "^2.0.5" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", - "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", - "dev": true - } } }, "supertest": { @@ -3320,6 +3239,15 @@ "integrity": "sha1-3n5jNwFbKRhRwQ81OMSn8EkX7ME=", "dev": true }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, "taskgroup": { "version": "4.3.1", "resolved": "http://registry.npm.taobao.org/taskgroup/download/taskgroup-4.3.1.tgz", diff --git a/package.json b/package.json index a3a41e31..aa39b8f1 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "init": "node ./bin/db init", "upgrade": "node ./bin/db upgrade", "test": "make test", - "test-win": "mocha test/api/init test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index --recursive --timeout 15000", "coverage": "make coverage" }, "dependencies": { @@ -57,11 +56,10 @@ "markdown-it": "8.4.1", "moment": "2.21.0", "morgan": "1.9.0", - "mysql2": "1.5.2", + "mysql2": "2.3.0", "nodemailer": "4.6.3", "pug": "2.0.1", "qiniu": "7.1.3", - "upyun": "3.3.9", "rand-token": "0.4.0", "recursive-readdir": "2.2.2", "redis": "2.8.0", @@ -69,6 +67,7 @@ "sequelize": "4.37.1", "serve-favicon": "2.4.5", "slash": "2.0.0", + "upyun": "3.3.9", "validator": "10.6.0", "yargs": "12.0.1", "yazl": "2.4.3" From ac082c9b14a28138b38e095b03a7f5bd7c9cc867 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 18 Aug 2021 11:03:32 +0000 Subject: [PATCH 014/347] chore(deps): update dependency supertest to v3.4.2 --- package-lock.json | 32 ++++++++++++++++---------------- package.json | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec6f5537..0ea94751 100644 --- a/package-lock.json +++ b/package-lock.json @@ -545,9 +545,9 @@ } }, "component-emitter": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "concat-map": { @@ -624,9 +624,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "cookiejar": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/cookiejar/download/cookiejar-2.1.1.tgz", - "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", "dev": true }, "core-js": { @@ -3206,9 +3206,9 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "superagent": { - "version": "3.8.2", - "resolved": "http://registry.npm.taobao.org/superagent/download/superagent-3.8.2.tgz", - "integrity": "sha1-5KEbnQR/fT7+s7vlNtnsACHRZAM=", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", "dev": true, "requires": { "component-emitter": "^1.2.0", @@ -3216,21 +3216,21 @@ "debug": "^3.1.0", "extend": "^3.0.0", "form-data": "^2.3.1", - "formidable": "^1.1.1", + "formidable": "^1.2.0", "methods": "^1.1.1", "mime": "^1.4.1", "qs": "^6.5.1", - "readable-stream": "^2.0.5" + "readable-stream": "^2.3.5" } }, "supertest": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/supertest/download/supertest-3.0.0.tgz", - "integrity": "sha1-jUu2j9GDDuBwM7HFpamkAhyWUpY=", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.4.2.tgz", + "integrity": "sha512-WZWbwceHUo2P36RoEIdXvmqfs47idNNZjCuJOqDz6rvtkk8ym56aU5oglORCpPeXGxT7l9rkJ41+O1lffQXYSA==", "dev": true, "requires": { - "methods": "~1.1.2", - "superagent": "^3.0.0" + "methods": "^1.1.2", + "superagent": "^3.8.3" } }, "supervisor": { diff --git a/package.json b/package.json index aa39b8f1..57da6c20 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "istanbul": "0.4.5", "mocha": "3.5.3", "should": "11.2.1", - "supertest": "3.0.0", + "supertest": "3.4.2", "supervisor": "0.12.0" }, "files": [ From 9a65b0faf51761178c16c46772ab80a92ee8c068 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 18 Aug 2021 11:04:36 +0000 Subject: [PATCH 015/347] fix(deps): update dependency cos-nodejs-sdk-v5 to v2.10.0 --- package-lock.json | 415 +++++++++++++++++++++++++++++++++++----------- package.json | 2 +- 2 files changed, 321 insertions(+), 96 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec6f5537..1731c6d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -85,6 +85,37 @@ "json-schema-traverse": "^0.3.0" } }, + "ajv-formats": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-1.6.1.tgz", + "integrity": "sha512-4CjkH20If1lhR5CGtqkrVg3bbOtFEG80X9v6jDOIUhbzzbB+UzPBGy8GQhUNVZ0yvMHdMpawCOcy5ydGMsagGQ==", + "requires": { + "ajv": "^7.0.0" + }, + "dependencies": { + "ajv": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", + "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, "align-text": { "version": "0.1.4", "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", @@ -200,6 +231,11 @@ "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "atomically": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", + "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" + }, "aws-sdk": { "version": "2.211.0", "resolved": "http://registry.npm.taobao.org/aws-sdk/download/aws-sdk-2.211.0.tgz", @@ -565,17 +601,66 @@ "typedarray": "^0.0.6" } }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "conf": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/conf/-/conf-9.0.2.tgz", + "integrity": "sha512-rLSiilO85qHgaTBIIHQpsv8z+NnVfZq3cKuYNCXN1AOqPzced0GWZEe/A517VldRLyQYXUMyV+vszavE2jSAqw==", + "requires": { + "ajv": "^7.0.3", + "ajv-formats": "^1.5.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.0", + "json-schema-typed": "^7.0.3", + "make-dir": "^3.1.0", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.4" + }, + "dependencies": { + "ajv": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", + "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "constantinople": { @@ -640,29 +725,149 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cos-nodejs-sdk-v5": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.4.10.tgz", - "integrity": "sha512-espPlCyyOc4vBKKI6Mwb5ZKzjYDgd0GOK4H0msiryupc3wlQCfPqJM+PubVlUEssqK58wIiV9Bq4Bo/ts2irjg==", - "requires": { - "configstore": "^3.1.2", - "qcloudapi-sdk": "^0.2.0", - "request": "^2.81.0", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.10.0.tgz", + "integrity": "sha512-FA/lrydYCQSXzo8An4vITOsADxO995Km0YY+2lcKxH161cP1ztPRXp9uTwP3y0Bv85rzmif6By1rlTduu318TQ==", + "requires": { + "@types/node": "^14.14.20", + "conf": "^9.0.0", + "mime-types": "^2.1.24", + "request": "^2.88.2", "xml2js": "^0.4.19" }, "dependencies": { + "@types/node": { + "version": "14.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", + "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "requires": { "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "xmlbuilder": "~11.0.0" } }, "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" } } }, @@ -704,11 +909,6 @@ } } }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" - }, "csextends": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/csextends/download/csextends-1.1.1.tgz", @@ -735,6 +935,21 @@ "resolved": "http://registry.npm.taobao.org/date-format/download/date-format-1.2.0.tgz", "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=" }, + "debounce-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", + "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", + "requires": { + "mimic-fn": "^3.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" + } + } + }, "debug": { "version": "3.1.0", "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", @@ -817,18 +1032,13 @@ "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=" }, "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "requires": { - "is-obj": "^1.0.0" + "is-obj": "^2.0.0" } }, - "dot-qs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dot-qs/-/dot-qs-0.2.0.tgz", - "integrity": "sha1-02UX/iS3zaYfznpQJqACSvr1pDk=" - }, "dottie": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/dottie/download/dottie-2.0.0.tgz", @@ -885,6 +1095,11 @@ "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.1.tgz", "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, "escape-html": { "version": "1.0.3", "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", @@ -1460,11 +1675,6 @@ "resolved": "http://registry.npm.taobao.org/ignorepatterns/download/ignorepatterns-1.1.0.tgz", "integrity": "sha1-rI9DbyI5td+2bV8NOpBKh6xnzF4=" }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, "inflection": { "version": "1.12.0", "resolved": "http://registry.npm.taobao.org/inflection/download/inflection-1.12.0.tgz", @@ -1529,9 +1739,9 @@ } }, "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, "is-promise": { "version": "2.1.0", @@ -1668,6 +1878,11 @@ "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, + "json-schema-typed": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", + "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", @@ -1945,11 +2160,18 @@ } }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { - "pify": "^3.0.0" + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "make-plural": { @@ -2331,6 +2553,21 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + } + } + }, "optimist": { "version": "0.6.1", "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", @@ -2474,10 +2711,13 @@ "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "requires": { + "find-up": "^3.0.0" + } }, "platform": { "version": "1.3.5", @@ -2549,6 +2789,11 @@ "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, "pug": { "version": "2.0.1", "resolved": "http://registry.npm.taobao.org/pug/download/pug-2.0.1.tgz", @@ -2668,23 +2913,6 @@ "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, - "qcloudapi-sdk": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/qcloudapi-sdk/-/qcloudapi-sdk-0.2.0.tgz", - "integrity": "sha512-Hy6a+95zDheaeMbA/N/7AEuAoOhwjR1POPI9xCwfsPc3b24ZzyH1M4PKgO9sq7Rq62+14ZTessHMdXJ+6NaeQg==", - "requires": { - "dot-qs": "^0.2.0", - "object-assign": "^3.0.0", - "request": ">= 2.33.0" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" - } - } - }, "qiniu": { "version": "7.1.3", "resolved": "http://registry.npm.taobao.org/qiniu/download/qiniu-7.1.3.tgz", @@ -2828,6 +3056,11 @@ "resolved": "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, "require-main-filename": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz", @@ -3414,14 +3647,6 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "^1.0.0" - } - }, "universalify": { "version": "0.1.2", "resolved": "http://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz", @@ -3446,6 +3671,21 @@ "mime-types": "^2.1.15" } }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, "url": { "version": "0.10.3", "resolved": "http://registry.npm.taobao.org/url/download/url-0.10.3.tgz", @@ -3608,26 +3848,11 @@ "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, "x-xss-protection": { "version": "1.1.0", "resolved": "http://registry.npm.taobao.org/x-xss-protection/download/x-xss-protection-1.1.0.tgz", "integrity": "sha1-TxiYwzLesefyvhKA77PixT1pwac=" }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" - }, "xml2js": { "version": "0.4.4", "resolved": "http://registry.npm.taobao.org/xml2js/download/xml2js-0.4.4.tgz", diff --git a/package.json b/package.json index aa39b8f1..935acb63 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "bluebird": "3.5.1", "body-parser": "1.18.2", "cookie-parser": "1.4.3", - "cos-nodejs-sdk-v5": "2.4.10", + "cos-nodejs-sdk-v5": "2.10.0", "debug": "3.1.0", "diff-match-patch": "1.0.1", "express": "4.16.3", From 1f4c7c11cf31f85b84c6209851fb96981d81129c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 18 Aug 2021 11:05:27 +0000 Subject: [PATCH 016/347] fix(deps): update dependency express to v4.17.1 --- package-lock.json | 341 +++++++++++++++++++++++++++++++++++----------- package.json | 2 +- 2 files changed, 262 insertions(+), 81 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec6f5537..bdab8b92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,12 +33,27 @@ "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=" }, "accepts": { - "version": "1.3.5", - "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "dependencies": { + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + } } }, "acorn": { @@ -163,7 +178,7 @@ }, "array-flatten": { "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "asap": { @@ -590,9 +605,19 @@ } }, "content-disposition": { - "version": "0.5.2", - "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } }, "content-security-policy-builder": { "version": "2.0.0", @@ -887,7 +912,7 @@ }, "escape-html": { "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { @@ -968,54 +993,154 @@ "integrity": "sha1-UnNWeN4YUwiQ2Ne5XwrGNkCVgJQ=" }, "express": { - "version": "4.16.3", - "resolved": "http://registry.npm.taobao.org/express/download/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "requires": { - "accepts": "~1.3.5", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "~1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.3", - "qs": "6.5.1", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, "debug": { "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "setprototypeof": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", - "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } } } }, @@ -1105,26 +1230,36 @@ } }, "finalhandler": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.1.tgz", - "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" }, "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, @@ -1175,9 +1310,9 @@ } }, "forwarded": { - "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "frameguard": { "version": "3.0.0", @@ -1490,9 +1625,9 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "ipaddr.js": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "is-bluebird": { "version": "1.0.2", @@ -2018,7 +2153,7 @@ }, "merge-descriptors": { "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "messageformat": { @@ -2247,9 +2382,9 @@ } }, "negotiator": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "nocache": { "version": "2.0.0", @@ -2453,7 +2588,7 @@ }, "path-to-regexp": { "version": "0.1.7", - "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "pause-stream": { @@ -2536,12 +2671,12 @@ } }, "proxy-addr": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.3.tgz", - "integrity": "sha1-NV8mJQWmIWRrMTCnKOtkfiIFU0E=", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.6.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" } }, "pseudomap": { @@ -2722,9 +2857,9 @@ "integrity": "sha1-GlZbatEtkt1LMMTE5ZReiqJKWzs=" }, "range-parser": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { "version": "2.3.2", @@ -2912,9 +3047,9 @@ "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=" }, "send": { - "version": "0.16.2", - "resolved": "http://registry.npm.taobao.org/send/download/send-0.16.2.tgz", - "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -2923,26 +3058,60 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, - "mime": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz", - "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=" + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, @@ -3000,14 +3169,21 @@ } }, "serve-static": { - "version": "1.13.2", - "resolved": "http://registry.npm.taobao.org/serve-static/download/serve-static-1.13.2.tgz", - "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "dependencies": { + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + } } }, "set-blocking": { @@ -3283,6 +3459,11 @@ "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "token-stream": { "version": "0.0.1", "resolved": "http://registry.npm.taobao.org/token-stream/download/token-stream-0.0.1.tgz", @@ -3497,7 +3678,7 @@ }, "utils-merge": { "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { @@ -3512,7 +3693,7 @@ }, "vary": { "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "verror": { diff --git a/package.json b/package.json index aa39b8f1..b94b38f5 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "cos-nodejs-sdk-v5": "2.4.10", "debug": "3.1.0", "diff-match-patch": "1.0.1", - "express": "4.16.3", + "express": "4.17.1", "extract-zip": "1.6.6", "formidable": "1.2.1", "fs-extra": "7.0.0", From e45052d29a8c8d1f6758c59a26b2410630d6579c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 18 Aug 2021 12:52:19 +0000 Subject: [PATCH 017/347] fix(deps): update dependency diff-match-patch to v1.0.5 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index edfb5162..d9c53d9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1029,9 +1029,9 @@ "dev": true }, "diff-match-patch": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.1.tgz", - "integrity": "sha512-A0QEhr4PxGUMEtKxd6X+JLnOTFd3BfIPSDpsc4dMvj+CbSaErDwTpoTo/nFJDMSrjxLW4BiNq+FbNisAAHhWeQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" }, "digest-header": { "version": "0.0.1", diff --git a/package.json b/package.json index fcb46890..e1dfddc6 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "cookie-parser": "1.4.3", "cos-nodejs-sdk-v5": "2.10.0", "debug": "3.1.0", - "diff-match-patch": "1.0.1", + "diff-match-patch": "1.0.5", "express": "4.17.1", "extract-zip": "1.6.6", "formidable": "1.2.1", From fa2a40ab33c6ec6e34ec33c4f0b5f1be0fc8b9eb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 18 Aug 2021 19:11:58 +0000 Subject: [PATCH 018/347] fix(deps): update dependency aws-sdk to v2.971.0 --- package-lock.json | 68 ++++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/package-lock.json b/package-lock.json index edfb5162..204370fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -252,42 +252,44 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.211.0", - "resolved": "http://registry.npm.taobao.org/aws-sdk/download/aws-sdk-2.211.0.tgz", - "integrity": "sha1-kCt1Jedv+fpyzQOLc7ikfIxnGmI=", + "version": "2.971.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.971.0.tgz", + "integrity": "sha512-7mPN7HnPILMNA8YMEMCZp/bi3o4blPoQ1TbBWaowGUt8RhkxgdAAqMy2vAkhElT5xWjROZS+1NgG3khzBlb0xw==", "requires": { - "buffer": "4.9.1", - "events": "^1.1.1", + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", "jmespath": "0.15.0", "querystring": "0.2.0", "sax": "1.2.1", "url": "0.10.3", - "uuid": "3.1.0", - "xml2js": "0.4.17", - "xmlbuilder": "4.2.1" + "uuid": "3.3.2", + "xml2js": "0.4.19" }, "dependencies": { "sax": { "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, "xml2js": { - "version": "0.4.17", - "resolved": "http://registry.npm.taobao.org/xml2js/download/xml2js-0.4.17.tgz", - "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "requires": { "sax": ">=0.6.0", - "xmlbuilder": "^4.1.0" + "xmlbuilder": "~9.0.1" } }, "xmlbuilder": { - "version": "4.2.1", - "resolved": "http://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-4.2.1.tgz", - "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", - "requires": { - "lodash": "^4.0.0" - } + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" } } }, @@ -353,9 +355,9 @@ "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" }, "base64-js": { - "version": "1.2.3", - "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.2.3.tgz", - "integrity": "sha1-+xNmgjPZYUz1+0vOlam6QJbN+AE=" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "base64url": { "version": "2.0.0", @@ -440,9 +442,9 @@ "dev": true }, "buffer": { - "version": "4.9.1", - "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -1185,7 +1187,7 @@ }, "events": { "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/events/download/events-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "execa": { @@ -1787,9 +1789,9 @@ "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=" }, "ieee754": { - "version": "1.1.10", - "resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.10.tgz", - "integrity": "sha1-cZpvewJoMeZL24OLDeG7ACm79xY=" + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "ienoopen": { "version": "1.0.0", @@ -1966,7 +1968,7 @@ }, "jmespath": { "version": "0.15.0", - "resolved": "http://registry.npm.taobao.org/jmespath/download/jmespath-0.15.0.tgz", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" }, "js-stringify": { @@ -3045,7 +3047,7 @@ }, "punycode": { "version": "1.3.2", - "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, "qiniu": { @@ -3076,7 +3078,7 @@ }, "querystring": { "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "rand-token": { @@ -3869,7 +3871,7 @@ }, "url": { "version": "0.10.3", - "resolved": "http://registry.npm.taobao.org/url/download/url-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", "requires": { "punycode": "1.3.2", diff --git a/package.json b/package.json index fcb46890..8667e110 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.11.10", - "aws-sdk": "2.211.0", + "aws-sdk": "2.971.0", "bcryptjs": "2.4.3", "bluebird": "3.5.1", "body-parser": "1.18.2", From db281a3f003ff78ed4ddfc5952c6aedcd9d8abbd Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 11:53:22 +0800 Subject: [PATCH 019/347] chore: add release script --- package-lock.json | 1755 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 + 2 files changed, 1755 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index edfb5162..dadbe5c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,38 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true + }, "@types/babel-types": { "version": "7.0.1", "resolved": "http://registry.npm.taobao.org/@types/babel-types/download/@types/babel-types-7.0.1.tgz", @@ -22,11 +54,33 @@ "resolved": "http://registry.npm.taobao.org/@types/geojson/download/@types/geojson-1.0.6.tgz", "integrity": "sha1-PgKXJyjGkkjCrwjWCkjLuGgP/98=" }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, "@types/node": { "version": "9.4.7", "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-9.4.7.tgz", "integrity": "sha1-V9gc2YcZ3yyd4Rjy1fOxEg3NcnU=" }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "abbrev": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", @@ -76,6 +130,12 @@ } } }, + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "dev": true + }, "address": { "version": "1.0.3", "resolved": "http://registry.npm.taobao.org/address/download/address-1.0.3.tgz", @@ -187,6 +247,15 @@ "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "any-promise": { "version": "1.3.0", "resolved": "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz", @@ -212,6 +281,18 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, "asap": { "version": "2.0.6", "resolved": "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", @@ -459,6 +540,12 @@ "resolved": "http://registry.npm.taobao.org/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "bufferview": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/bufferview/download/bufferview-1.0.1.tgz", @@ -483,6 +570,25 @@ "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz", "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, "camelize": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/camelize/download/camelize-1.0.0.tgz", @@ -502,6 +608,34 @@ "lazy-cache": "^1.0.3" } }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "character-parser": { "version": "2.2.0", "resolved": "http://registry.npm.taobao.org/character-parser/download/character-parser-2.2.0.tgz", @@ -573,6 +707,21 @@ "resolved": "http://registry.npm.taobao.org/coffee-script/download/coffee-script-1.12.7.tgz", "integrity": "sha1-wF2uDLeVkdBbMHCoQzqYyaiczFM=" }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "colour": { "version": "0.7.1", "resolved": "http://registry.npm.taobao.org/colour/download/colour-0.7.1.tgz", @@ -595,6 +744,27 @@ "graceful-readlink": ">= 1.0.0" } }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + } + } + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -714,6 +884,312 @@ "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" }, + "conventional-changelog": { + "version": "3.1.24", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.24.tgz", + "integrity": "sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-atom": "^2.0.8", + "conventional-changelog-codemirror": "^2.0.8", + "conventional-changelog-conventionalcommits": "^4.5.0", + "conventional-changelog-core": "^4.2.1", + "conventional-changelog-ember": "^2.0.9", + "conventional-changelog-eslint": "^3.0.9", + "conventional-changelog-express": "^2.0.6", + "conventional-changelog-jquery": "^3.0.11", + "conventional-changelog-jshint": "^2.0.9", + "conventional-changelog-preset-loader": "^2.3.4" + } + }, + "conventional-changelog-angular": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", + "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-atom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", + "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-codemirror": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", + "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-config-spec": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", + "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", + "dev": true + }, + "conventional-changelog-conventionalcommits": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.5.0.tgz", + "integrity": "sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + } + } + }, + "conventional-changelog-core": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.3.tgz", + "integrity": "sha512-MwnZjIoMRL3jtPH5GywVNqetGILC7g6RQFvdb8LRU/fA/338JbeWAku3PZ8yQ+mtVRViiISqJlb0sOz0htBZig==", + "dev": true, + "requires": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + } + } + }, + "conventional-changelog-ember": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", + "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-eslint": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", + "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-express": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", + "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jquery": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", + "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jshint": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", + "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", + "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", + "dev": true, + "requires": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-js": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.1.tgz", + "integrity": "sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g==", + "dev": true, + "optional": true + } + } + }, + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", + "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0", + "trim-off-newlines": "^1.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + } + } + }, + "conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "dependencies": { + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "cookie": { "version": "0.3.1", "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", @@ -942,6 +1418,12 @@ "coffee-script": "^1.12.5" } }, + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, "dashdash": { "version": "1.14.1", "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", @@ -960,6 +1442,12 @@ "resolved": "http://registry.npm.taobao.org/date-format/download/date-format-1.2.0.tgz", "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=" }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, "debounce-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", @@ -988,6 +1476,24 @@ "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, "deep-is": { "version": "0.1.3", "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", @@ -1022,6 +1528,18 @@ "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, "diff": { "version": "3.2.0", "resolved": "http://registry.npm.taobao.org/diff/download/diff-3.2.0.tgz", @@ -1064,6 +1582,16 @@ "is-obj": "^2.0.0" } }, + "dotgitignore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", + "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "minimatch": "^3.0.4" + } + }, "dottie": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/dottie/download/dottie-2.0.0.tgz", @@ -1110,6 +1638,12 @@ "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "encodeurl": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", @@ -1125,6 +1659,21 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1444,6 +1993,15 @@ "pend": "~1.2.0" } }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -1539,6 +2097,15 @@ "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, "fs-extra": { "version": "7.0.0", "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.0.tgz", @@ -1578,8 +2145,215 @@ "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz", "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=" }, - "get-stream": { - "version": "3.0.0", + "get-pkg-repo": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.1.2.tgz", + "integrity": "sha512-/FjamZL9cBYllEbReZkxF2IMh80d8TJoC4e3bmLNif8ibHw95aj0N/tzqK0kZz9eU/3w3dL6lF4fnnX/sDdW3A==", + "dev": true, + "requires": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "meow": "^7.0.0", + "through2": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "meow": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", + "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + } + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "get-stream": { + "version": "3.0.0", "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, @@ -1591,6 +2365,64 @@ "assert-plus": "^1.0.0" } }, + "git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + } + } + }, + "git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, + "requires": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + } + }, + "git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "requires": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, + "requires": { + "ini": "^1.3.2" + } + }, "glob": { "version": "5.0.15", "resolved": "http://registry.npm.taobao.org/glob/download/glob-5.0.15.tgz", @@ -1645,6 +2477,12 @@ "har-schema": "^2.0.0" } }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, "has": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.1.tgz", @@ -1722,6 +2560,32 @@ "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-4.2.1.tgz", "integrity": "sha1-ljRQKqEsRF3Vp8VzS1cruHOKrLs=" }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "hpkp": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/hpkp/download/hpkp-2.0.0.tgz", @@ -1810,6 +2674,12 @@ "resolved": "http://registry.npm.taobao.org/ignorepatterns/download/ignorepatterns-1.1.0.tgz", "integrity": "sha1-rI9DbyI5td+2bV8NOpBKh6xnzF4=" }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflection": { "version": "1.12.0", "resolved": "http://registry.npm.taobao.org/inflection/download/inflection-1.12.0.tgz", @@ -1829,6 +2699,12 @@ "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "invert-kv": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz", @@ -1839,6 +2715,12 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, "is-bluebird": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/is-bluebird/download/is-bluebird-1.0.2.tgz", @@ -1849,6 +2731,26 @@ "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" }, + "is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + }, + "dependencies": { + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + } + } + }, "is-expression": { "version": "3.0.0", "resolved": "http://registry.npm.taobao.org/is-expression/download/is-expression-3.0.0.tgz", @@ -1878,6 +2780,12 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-promise": { "version": "2.1.0", "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", @@ -1901,6 +2809,15 @@ "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", @@ -1974,6 +2891,12 @@ "resolved": "http://registry.npm.taobao.org/js-stringify/download/js-stringify-1.0.2.tgz", "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "js-yaml": { "version": "3.11.0", "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.11.0.tgz", @@ -2003,6 +2926,18 @@ "resolved": "http://registry.npm.taobao.org/jschardet/download/jschardet-1.6.0.tgz", "integrity": "sha1-x9GnHtz/KDnbL57DD8XV69PBpng=" }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema": { "version": "0.2.3", "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", @@ -2037,6 +2972,12 @@ "graceful-fs": "^4.1.6" } }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, "jsonwebtoken": { "version": "8.2.0", "resolved": "http://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-8.2.0.tgz", @@ -2133,6 +3074,12 @@ "type-check": "~0.3.2" } }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, "linkify-it": { "version": "2.0.3", "resolved": "http://registry.npm.taobao.org/linkify-it/download/linkify-it-2.0.3.tgz", @@ -2141,6 +3088,36 @@ "uc.micro": "^1.0.1" } }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "locate-path": { "version": "3.0.0", "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", @@ -2227,6 +3204,12 @@ "resolved": "http://registry.npm.taobao.org/lodash.isinteger/download/lodash.isinteger-4.0.4.tgz", "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, "lodash.isnumber": { "version": "3.0.3", "resolved": "http://registry.npm.taobao.org/lodash.isnumber/download/lodash.isnumber-3.0.3.tgz", @@ -2325,6 +3308,12 @@ } } }, + "map-obj": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", + "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "dev": true + }, "markdown-it": { "version": "8.4.1", "resolved": "http://registry.npm.taobao.org/markdown-it/download/markdown-it-8.4.1.tgz", @@ -2373,6 +3362,149 @@ "mimic-fn": "^1.0.0" } }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -2432,6 +3564,12 @@ "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz", "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=" }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", @@ -2445,6 +3583,25 @@ "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, "mkdirp": { "version": "0.5.0", "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.0.tgz", @@ -2507,6 +3664,12 @@ } } }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, "moment": { "version": "2.21.0", "resolved": "http://registry.npm.taobao.org/moment/download/moment-2.21.0.tgz", @@ -2608,6 +3771,12 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "nocache": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/nocache/download/nocache-2.0.0.tgz", @@ -2644,6 +3813,44 @@ "abbrev": "1" } }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", @@ -2652,6 +3859,12 @@ "path-key": "^2.0.0" } }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, "number-is-nan": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", @@ -2798,6 +4011,18 @@ "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-2.0.0.tgz", "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=" }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "parseurl": { "version": "1.3.2", "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", @@ -2828,6 +4053,23 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "pause-stream": { "version": "0.0.11", "resolved": "http://registry.npm.taobao.org/pause-stream/download/pause-stream-0.0.11.tgz", @@ -2846,6 +4088,12 @@ "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, "pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -3048,6 +4296,12 @@ "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, "qiniu": { "version": "7.1.3", "resolved": "http://registry.npm.taobao.org/qiniu/download/qiniu-7.1.3.tgz", @@ -3079,6 +4333,12 @@ "resolved": "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, "rand-token": { "version": "0.4.0", "resolved": "http://registry.npm.taobao.org/rand-token/download/rand-token-0.4.0.tgz", @@ -3100,6 +4360,108 @@ "unpipe": "1.0.0" } }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, "readable-stream": { "version": "2.3.5", "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.5.tgz", @@ -3122,6 +4484,16 @@ "minimatch": "3.0.4" } }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "redis": { "version": "2.8.0", "resolved": "http://registry.npm.taobao.org/redis/download/redis-2.8.0.tgz", @@ -3527,6 +4899,84 @@ "amdefine": ">=0.0.4" } }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "sprintf-js": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.1.tgz", @@ -3552,6 +5002,209 @@ "tweetnacl": "~0.14.0" } }, + "standard-version": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.3.1.tgz", + "integrity": "sha512-5qMxXw/FxLouC5nANyx/5RY1kiorJx9BppUso8gN07MG64q2uLRmrPb4KfXp3Ql4s/gxjZwZ89e0FwxeLubGww==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "conventional-changelog": "3.1.24", + "conventional-changelog-config-spec": "2.1.0", + "conventional-changelog-conventionalcommits": "4.5.0", + "conventional-recommended-bump": "6.1.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "dotgitignore": "^2.1.0", + "figures": "^3.1.0", + "find-up": "^5.0.0", + "fs-access": "^1.0.1", + "git-semver-tags": "^4.0.0", + "semver": "^7.1.1", + "stringify-package": "^1.0.1", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, "statuses": { "version": "1.4.0", "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz", @@ -3596,6 +5249,12 @@ "safe-buffer": "~5.1.0" } }, + "stringify-package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", + "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", + "dev": true + }, "stringstream": { "version": "0.0.5", "resolved": "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz", @@ -3609,11 +5268,26 @@ "ansi-regex": "^2.0.0" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, "strip-eof": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, "superagent": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", @@ -3682,11 +5356,54 @@ "terraformer": "~1.0.5" } }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "to-fast-properties": { "version": "1.0.3", "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz", @@ -3722,6 +5439,18 @@ } } }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", @@ -3745,6 +5474,12 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, "type-is": { "version": "1.6.16", "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz", @@ -3926,6 +5661,16 @@ "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.1.0.tgz", "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=" }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "validator": { "version": "10.6.0", "resolved": "http://registry.npm.taobao.org/validator/download/validator-10.6.0.tgz", @@ -4189,6 +5934,12 @@ "requires": { "buffer-crc32": "~0.2.3" } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index fcb46890..57525fba 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "start": "node ./bin/www", "init": "node ./bin/db init", "upgrade": "node ./bin/db upgrade", + "release": "npm test && standard-version && git push --follow-tags origin master && npm publish", "test": "make test", "coverage": "make coverage" }, @@ -76,6 +77,7 @@ "istanbul": "0.4.5", "mocha": "3.5.3", "should": "11.2.1", + "standard-version": "9.3.1", "supertest": "3.4.2", "supervisor": "0.12.0" }, From 7c505196725dce18d1630023c25ac02fee8d4618 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 11:54:07 +0800 Subject: [PATCH 020/347] chore(release): 1.0.1 --- CHANGELOG.md | 15 +++++++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6903211..eec08c12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +### [1.0.1](https://github.com/shm-open/code-push-server/compare/v1.0.0...v1.0.1) (2021-08-19) + + +### Bug Fixes + +* **deps:** pin dependencies ([1822c0f](https://github.com/shm-open/code-push-server/commit/1822c0f99adee270a15f343275316a5de725a0f3)) +* **deps:** update dependency cos-nodejs-sdk-v5 to v2.10.0 ([9a65b0f](https://github.com/shm-open/code-push-server/commit/9a65b0faf51761178c16c46772ab80a92ee8c068)) +* **deps:** update dependency express to v4.17.1 ([1f4c7c1](https://github.com/shm-open/code-push-server/commit/1f4c7c11cf31f85b84c6209851fb96981d81129c)) +* **deps:** update mysql2 and setup github action ci ([6ab24d3](https://github.com/shm-open/code-push-server/commit/6ab24d336ce37e4a1522e21cf027096c3467a7a1)) +* return appVersion as target_binary_range to compatible with code-push 3.0.1 changes ([40b41fb](https://github.com/shm-open/code-push-server/commit/40b41fbc20ad35393d097336570a72d1eef16906)) + # Changelog for code-push-server ## 0.5.x diff --git a/package-lock.json b/package-lock.json index dadbe5c8..fcd000c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 57525fba..32273237 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "1.0.0", + "version": "1.0.1", "license": "MIT", "repository": { "type": "git", From 936a22068fe33e755077ae606f768ef2ab64fbb7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 05:13:47 +0000 Subject: [PATCH 021/347] fix(deps): update dependency pug to v2.0.4 --- package-lock.json | 274 +++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 153 insertions(+), 123 deletions(-) diff --git a/package-lock.json b/package-lock.json index fcd000c7..9a886eae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,14 +37,14 @@ "dev": true }, "@types/babel-types": { - "version": "7.0.1", - "resolved": "http://registry.npm.taobao.org/@types/babel-types/download/@types/babel-types-7.0.1.tgz", - "integrity": "sha1-FAXlOWloxDAplLAWHOQFtyuHQlc=" + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.10.tgz", + "integrity": "sha512-g7zrcqL4MiRu3jZzdZZYk0g0KcKk2fddXazSdP1PacEpmjihRsNGU50aaEKnPFuKzfN7WkRktUiCXvs4zU9XXQ==" }, "@types/babylon": { - "version": "6.16.2", - "resolved": "http://registry.npm.taobao.org/@types/babylon/download/@types/babylon-6.16.2.tgz", - "integrity": "sha1-BizmO2k9mvHCRvWu35KLycMFicg=", + "version": "6.16.6", + "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.6.tgz", + "integrity": "sha512-G4yqdVlhr6YhzLXFKy5F7HtRBU8Y23+iWy7UKthMq/OSQnL1hbsoeXESQ2LY8zEDlknipDG3nRGhUC9tkwvy/w==", "requires": { "@types/babel-types": "*" } @@ -112,12 +112,12 @@ }, "acorn": { "version": "3.3.0", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" }, "acorn-globals": { "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", "requires": { "acorn": "^4.0.4" @@ -125,7 +125,7 @@ "dependencies": { "acorn": { "version": "4.0.13", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" } } @@ -295,7 +295,7 @@ }, "asap": { "version": "2.0.6", - "resolved": "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "ascli": { @@ -400,7 +400,7 @@ }, "babel-runtime": { "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { "core-js": "^2.4.0", @@ -409,7 +409,7 @@ }, "babel-types": { "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "requires": { "babel-runtime": "^6.26.0", @@ -420,8 +420,8 @@ }, "babylon": { "version": "6.18.0", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz", - "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=" + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "balanced-match": { "version": "1.0.0", @@ -565,6 +565,15 @@ "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "camelcase": { "version": "2.1.1", "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz", @@ -638,7 +647,7 @@ }, "character-parser": { "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/character-parser/download/character-parser-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", "requires": { "is-regex": "^1.0.3" @@ -655,21 +664,17 @@ "integrity": "sha1-ZBgu81kELTfNjnZ/yd6Hix6UR9M=" }, "clean-css": { - "version": "3.4.28", - "resolved": "http://registry.npm.taobao.org/clean-css/download/clean-css-3.4.28.tgz", - "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "requires": { - "commander": "2.8.x", - "source-map": "0.4.x" + "source-map": "~0.6.0" }, "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": ">= 1.0.0" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -850,8 +855,8 @@ }, "constantinople": { "version": "3.1.2", - "resolved": "http://registry.npm.taobao.org/constantinople/download/constantinople-3.1.2.tgz", - "integrity": "sha1-1F7XJPV9PRBQABen06iJwTga5kc=", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", + "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", "requires": { "@types/babel-types": "^7.0.0", "@types/babylon": "^6.16.2", @@ -1216,9 +1221,9 @@ "dev": true }, "core-js": { - "version": "2.5.3", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" }, "core-util-is": { "version": "1.0.2", @@ -1566,7 +1571,7 @@ }, "doctypes": { "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/doctypes/download/doctypes-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, "dont-sniff-mimetype": { @@ -2145,6 +2150,16 @@ "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz", "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=" }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-pkg-repo": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.1.2.tgz", @@ -2443,7 +2458,8 @@ "graceful-readlink": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true }, "growl": { "version": "1.9.2", @@ -2484,11 +2500,11 @@ "dev": true }, "has": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "function-bind": "^1.0.2" + "function-bind": "^1.1.1" } }, "has-flag": { @@ -2497,6 +2513,19 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, "hawk": { "version": "6.0.2", "resolved": "http://registry.npm.taobao.org/hawk/download/hawk-6.0.2.tgz", @@ -2735,7 +2764,6 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", - "dev": true, "requires": { "has": "^1.0.3" }, @@ -2744,7 +2772,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -2753,7 +2780,7 @@ }, "is-expression": { "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/is-expression/download/is-expression-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", "requires": { "acorn": "~4.0.2", @@ -2762,7 +2789,7 @@ "dependencies": { "acorn": { "version": "4.0.13", - "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" } } @@ -2797,11 +2824,12 @@ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" }, "is-regex": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { - "has": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-stream": { @@ -2888,7 +2916,7 @@ }, "js-stringify": { "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/js-stringify/download/js-stringify-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" }, "js-tokens": { @@ -3015,7 +3043,7 @@ }, "jstransformer": { "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/jstransformer/download/jstransformer-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", "requires": { "is-promise": "^2.0.0", @@ -3877,7 +3905,7 @@ }, "object-assign": { "version": "4.1.1", - "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "on-finished": { @@ -4044,9 +4072,9 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", @@ -4125,8 +4153,8 @@ }, "promise": { "version": "7.3.1", - "resolved": "http://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz", - "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { "asap": "~2.0.3" } @@ -4178,118 +4206,118 @@ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "pug": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/pug/download/pug-2.0.1.tgz", - "integrity": "sha1-J8FRYStT1ymr6OgoWqxryJNFtdA=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz", + "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==", "requires": { - "pug-code-gen": "^2.0.1", - "pug-filters": "^3.0.1", - "pug-lexer": "^4.0.0", - "pug-linker": "^3.0.5", - "pug-load": "^2.0.11", - "pug-parser": "^5.0.0", - "pug-runtime": "^2.0.4", - "pug-strip-comments": "^1.0.3" + "pug-code-gen": "^2.0.2", + "pug-filters": "^3.1.1", + "pug-lexer": "^4.1.0", + "pug-linker": "^3.0.6", + "pug-load": "^2.0.12", + "pug-parser": "^5.0.1", + "pug-runtime": "^2.0.5", + "pug-strip-comments": "^1.0.4" } }, "pug-attrs": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/pug-attrs/download/pug-attrs-2.0.3.tgz", - "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz", + "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==", "requires": { "constantinople": "^3.0.1", "js-stringify": "^1.0.1", - "pug-runtime": "^2.0.4" + "pug-runtime": "^2.0.5" } }, "pug-code-gen": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/pug-code-gen/download/pug-code-gen-2.0.1.tgz", - "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.3.tgz", + "integrity": "sha512-r9sezXdDuZJfW9J91TN/2LFbiqDhmltTFmGpHTsGdrNGp3p4SxAjjXEfnuK2e4ywYsRIVP0NeLbSAMHUcaX1EA==", "requires": { - "constantinople": "^3.0.1", + "constantinople": "^3.1.2", "doctypes": "^1.1.0", "js-stringify": "^1.0.1", - "pug-attrs": "^2.0.3", - "pug-error": "^1.3.2", - "pug-runtime": "^2.0.4", + "pug-attrs": "^2.0.4", + "pug-error": "^1.3.3", + "pug-runtime": "^2.0.5", "void-elements": "^2.0.1", "with": "^5.0.0" } }, "pug-error": { - "version": "1.3.2", - "resolved": "http://registry.npm.taobao.org/pug-error/download/pug-error-1.3.2.tgz", - "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", + "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==" }, "pug-filters": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/pug-filters/download/pug-filters-3.0.1.tgz", - "integrity": "sha1-Fj73O/ux8VRNAysrQPRRMOtS3Ms=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz", + "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==", "requires": { - "clean-css": "^3.3.0", + "clean-css": "^4.1.11", "constantinople": "^3.0.1", "jstransformer": "1.0.0", - "pug-error": "^1.3.2", - "pug-walk": "^1.1.7", + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8", "resolve": "^1.1.6", "uglify-js": "^2.6.1" } }, "pug-lexer": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/pug-lexer/download/pug-lexer-4.0.0.tgz", - "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", + "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", "requires": { "character-parser": "^2.1.1", "is-expression": "^3.0.0", - "pug-error": "^1.3.2" + "pug-error": "^1.3.3" } }, "pug-linker": { - "version": "3.0.5", - "resolved": "http://registry.npm.taobao.org/pug-linker/download/pug-linker-3.0.5.tgz", - "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz", + "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==", "requires": { - "pug-error": "^1.3.2", - "pug-walk": "^1.1.7" + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8" } }, "pug-load": { - "version": "2.0.11", - "resolved": "http://registry.npm.taobao.org/pug-load/download/pug-load-2.0.11.tgz", - "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz", + "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==", "requires": { "object-assign": "^4.1.0", - "pug-walk": "^1.1.7" + "pug-walk": "^1.1.8" } }, "pug-parser": { - "version": "5.0.0", - "resolved": "http://registry.npm.taobao.org/pug-parser/download/pug-parser-5.0.0.tgz", - "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", + "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", "requires": { - "pug-error": "^1.3.2", + "pug-error": "^1.3.3", "token-stream": "0.0.1" } }, "pug-runtime": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/pug-runtime/download/pug-runtime-2.0.4.tgz", - "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz", + "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==" }, "pug-strip-comments": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/pug-strip-comments/download/pug-strip-comments-1.0.3.tgz", - "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz", + "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==", "requires": { - "pug-error": "^1.3.2" + "pug-error": "^1.3.3" } }, "pug-walk": { - "version": "1.1.7", - "resolved": "http://registry.npm.taobao.org/pug-walk/download/pug-walk-1.1.7.tgz", - "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", + "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" }, "punycode": { "version": "1.3.2", @@ -4521,8 +4549,8 @@ }, "regenerator-runtime": { "version": "0.11.1", - "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz", - "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "repeat-string": { "version": "1.6.1", @@ -4574,11 +4602,12 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "resolve": { - "version": "1.5.0", - "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.5.0.tgz", - "integrity": "sha1-HwmsznlsmnYlefMbLBzEw83fnzY=", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "requires": { - "path-parse": "^1.0.5" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, "retry-as-promised": { @@ -4895,6 +4924,7 @@ "version": "0.4.4", "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, "requires": { "amdefine": ">=0.0.4" } @@ -5406,7 +5436,7 @@ }, "to-fast-properties": { "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, "toidentifier": { @@ -5416,7 +5446,7 @@ }, "token-stream": { "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/token-stream/download/token-stream-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" }, "toposort-class": { @@ -5693,7 +5723,7 @@ }, "void-elements": { "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, "watchr": { @@ -5739,7 +5769,7 @@ }, "with": { "version": "5.1.1", - "resolved": "http://registry.npm.taobao.org/with/download/with-5.1.1.tgz", + "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", "requires": { "acorn": "^3.1.0", diff --git a/package.json b/package.json index 32273237..945ce79e 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "morgan": "1.9.0", "mysql2": "2.3.0", "nodemailer": "4.6.3", - "pug": "2.0.1", + "pug": "2.0.4", "qiniu": "7.1.3", "rand-token": "0.4.0", "recursive-readdir": "2.2.2", From f690f322de2ef4c068a1c2f444957651a90ec3aa Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 05:15:28 +0000 Subject: [PATCH 022/347] fix(deps): update dependency extract-zip to v1.7.0 --- package-lock.json | 59 +++++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index fcd000c7..b492e9f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -543,8 +543,7 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "bufferview": { "version": "1.0.1", @@ -777,10 +776,11 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { + "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" @@ -1944,23 +1944,36 @@ } }, "extract-zip": { - "version": "1.6.6", - "resolved": "http://registry.npm.taobao.org/extract-zip/download/extract-zip-1.6.6.tgz", - "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", "requires": { - "concat-stream": "1.6.0", - "debug": "2.6.9", - "mkdirp": "0.5.0", - "yauzl": "2.4.1" + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" }, "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } } } }, @@ -1986,9 +1999,9 @@ "dev": true }, "fd-slicer": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/fd-slicer/download/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "requires": { "pend": "~1.2.0" } @@ -3606,6 +3619,7 @@ "version": "0.5.0", "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.0.tgz", "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, "requires": { "minimist": "0.0.8" } @@ -4080,7 +4094,7 @@ }, "pend": { "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "performance-now": { @@ -5920,11 +5934,12 @@ } }, "yauzl": { - "version": "2.4.1", - "resolved": "http://registry.npm.taobao.org/yauzl/download/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "requires": { - "fd-slicer": "~1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, "yazl": { diff --git a/package.json b/package.json index 32273237..1a2c0e71 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "debug": "3.1.0", "diff-match-patch": "1.0.1", "express": "4.17.1", - "extract-zip": "1.6.6", + "extract-zip": "1.7.0", "formidable": "1.2.1", "fs-extra": "7.0.0", "helmet": "3.12.0", From a19d6ceb2eccb6ca72287a87ad4d6d20b90ea45b Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 11:49:56 +0800 Subject: [PATCH 023/347] refactor: update docker image build and deploy docs/scripts --- .env | 1 + Dockerfile | 16 ++ Makefile | 29 ++-- config/config.js | 77 +++++----- config/config.test.js | 59 -------- core/services/email-manager.js | 48 +++--- docker-compose.yml | 39 +++++ docker/README.md | 137 ------------------ docker/code-push-server/Dockerfile | 10 -- docker/code-push-server/process.json | 11 -- docker/config.js | 93 ------------ docker/docker-compose.yml | 63 -------- docs/install-server-by-docker.md | 117 +++++++++++++++ docs/{README.md => install-server.md} | 65 ++++----- docs/process.json | 24 --- process.json | 14 ++ .../codepush-all-docker.sql | 4 +- 17 files changed, 297 insertions(+), 510 deletions(-) create mode 100644 .env create mode 100644 Dockerfile delete mode 100644 config/config.test.js create mode 100644 docker-compose.yml delete mode 100644 docker/README.md delete mode 100644 docker/code-push-server/Dockerfile delete mode 100644 docker/code-push-server/process.json delete mode 100644 docker/config.js delete mode 100644 docker/docker-compose.yml create mode 100644 docs/install-server-by-docker.md rename docs/{README.md => install-server.md} (77%) delete mode 100644 docs/process.json create mode 100644 process.json rename docker/sql/codepush-all.sql => sql/codepush-all-docker.sql (98%) diff --git a/.env b/.env new file mode 100644 index 00000000..8f019587 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=code-push-server diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..8139194c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM node:lts-alpine + +RUN npm install -g @shm-open/code-push-server@${VERSION} pm2@latest --no-optional + +RUN mkdir /data/ + +WORKDIR /data/ + +COPY ./config/config.js /data/config.js +COPY ./process.json /data/process.json + +ENV CONFIG_FILE=/data/config.js + + # CMD ["pm2-runtime", "/data/process.json"] + # workaround for issue https://github.com/Unitech/pm2/issues/4950 + CMD ["sh", "-c", "pm2 ps && pm2-runtime /data/process.json"] \ No newline at end of file diff --git a/Makefile b/Makefile index 86b47a2a..136fda55 100644 --- a/Makefile +++ b/Makefile @@ -1,25 +1,36 @@ -ROOT=$(shell pwd) +ROOT := $(shell pwd) +VERSION := $(shell node -p "require('./package.json').version") +.PHONY: test test: test-integration # test-unit: # @echo "\nRunning unit tests..." # @NODE_ENV=test CONFIG_FILE=${ROOT}/config/config.test.js mocha test/unit --recursive +.PHONY: test-integration test-integration: @echo "\nRunning integration tests..." - @NODE_ENV=test CONFIG_FILE=${ROOT}/config/config.test.js mocha test/api/init - @NODE_ENV=test PORT=3000 HOST=127.0.0.1 CONFIG_FILE=${ROOT}/config/config.test.js node bin/www & - @NODE_ENV=test CONFIG_FILE=${ROOT}/config/config.test.js mocha \ + @CONFIG_FILE=${ROOT}/config/config.js mocha test/api/init + @PORT=3000 HOST=127.0.0.1 CONFIG_FILE=${ROOT}/config/config.js node bin/www & + @CONFIG_FILE=${ROOT}/config/config.js mocha \ test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index --recursive --timeout 15000 +.PHONY: coverage coverage: @echo "\n\nRunning coverage report..." rm -rf coverage - @NODE_ENV=test CONFIG_FILE=${ROOT}/config/config.test.js mocha test/api/init - @NODE_ENV=test PORT=3000 HOST=127.0.0.1 CONFIG_FILE=${ROOT}/config/config.test.js node bin/www & - @NODE_ENV=test CONFIG_FILE=${ROOT}/config/config.test.js ./node_modules/istanbul/lib/cli.js cover --report lcovonly --dir coverage/api ./node_modules/.bin/_mocha \ + @CONFIG_FILE=${ROOT}/config/config.js mocha test/api/init + @PORT=3000 HOST=127.0.0.1 CONFIG_FILE=${ROOT}/config/config.js node bin/www & + @CONFIG_FILE=${ROOT}/config/config.js ./node_modules/istanbul/lib/cli.js cover --report lcovonly --dir coverage/api ./node_modules/.bin/_mocha \ test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index -- -R spec --recursive --timeout 15000 - @NODE_ENV=test CONFIG_FILE=${ROOT}/config/config.test.js ./node_modules/istanbul/lib/cli.js report + @CONFIG_FILE=${ROOT}/config/config.js ./node_modules/istanbul/lib/cli.js report -.PHONY: coverage \ No newline at end of file +.PHONY: build-docker +build-docker: + @echo "\nBuilding docker image..." + docker pull node:lts-alpine + docker build -t shmopen/code-push-server:latest . + docker tag shmopen/code-push-server:latest shmopen/code-push-server:${VERSION} + docker push shmopen/code-push-server:${VERSION} + docker push shmopen/code-push-server:latest \ No newline at end of file diff --git a/config/config.js b/config/config.js index 0789b5ee..1da55f6c 100644 --- a/config/config.js +++ b/config/config.js @@ -1,12 +1,12 @@ -var os = require('os'); +var os = require("os"); var config = {}; config.development = { // Config for database, only support mysql. db: { username: process.env.RDS_USERNAME || "root", - password: process.env.RDS_PASSWORD || null, - database: process.env.DATA_BASE || "codepush", + password: process.env.RDS_PASSWORD || "password", + database: process.env.RDS_DATABASE || "codepush", host: process.env.RDS_HOST || "127.0.0.1", port: process.env.RDS_PORT || 3306, dialect: "mysql", @@ -18,7 +18,7 @@ config.development = { accessKey: "", secretKey: "", bucketName: "", - downloadUrl: "" // Binary files download host address. + downloadUrl: "", // Binary files download host address. }, // Config for upyun (https://www.upyun.com/) storage when storageType value is "upyun" upyun: { @@ -39,12 +39,12 @@ config.development = { }, // Config for Aliyun OSS (https://www.aliyun.com/product/oss) when storageType value is "oss". oss: { - accessKeyId: "", - secretAccessKey: "", - endpoint: "", - bucketName: "", - prefix: "", // Key prefix in object key - downloadUrl: "", // binary files download host address. + accessKeyId: process.env.OSS_ACCESS_KEY_ID, + secretAccessKey: process.env.OSS_SECRET_ACCESS_KEY, + endpoint: process.env.OSS_ENDPOINT, + bucketName: process.env.OSS_BUCKET_NAME, + prefix: process.env.OSS_PREFIX, // Key prefix in object key + downloadUrl: process.env.OSS_DOWNLOAD_URL, // binary files download host address. }, // Config for tencentyun COS (https://cloud.tencent.com/product/cos) when storageType value is "oss". tencentcloud: { @@ -57,16 +57,17 @@ config.development = { // Config for local storage when storageType value is "local". local: { // Binary files storage dir, Do not use tmpdir and it's public download dir. - storageDir: process.env.STORAGE_DIR || "/Users/tablee/workspaces/storage", + storageDir: process.env.STORAGE_DIR || os.tmpdir(), // Binary files download host address which Code Push Server listen to. the files storage in storageDir. - downloadUrl: process.env.LOCAL_DOWNLOAD_URL || "http://127.0.0.1:3000/download", + downloadUrl: + process.env.LOCAL_DOWNLOAD_URL || "http://127.0.0.1:3000/download", // public static download spacename. - public: '/download' + public: "/download", }, jwt: { // Recommended: 63 random alpha-numeric characters // Generate using: https://www.grc.com/passwords.htm - tokenSecret: process.env.TOKEN_SECRET ||'INSERT_RANDOM_TOKEN_KEY' + tokenSecret: process.env.TOKEN_SECRET || "INSERT_RANDOM_TOKEN_KEY", }, common: { /* @@ -74,7 +75,7 @@ config.development = { * if value is 0, no limit for login auth, it may not safe for account. when it's a number, it means you can * try that times today. but it need config redis server. */ - tryLoginTimes: 0, + tryLoginTimes: 4, // CodePush Web(https://github.com/lisong/code-push-web) login address. //codePushWebUrl: "http://127.0.0.1:3001/login", // create patch updates's number. default value is 3 @@ -89,48 +90,48 @@ config.development = { rolloutClientUniqueIdCache: false, }, // Config for smtp email,register module need validate user email project source https://github.com/nodemailer/nodemailer - smtpConfig:{ - host: "smtp.aliyun.com", + smtpConfig: { + host: "", port: 465, secure: true, auth: { user: "", - pass: "" - } + pass: "", + }, }, // Config for redis (register module, tryLoginTimes module) redis: { default: { - host: "127.0.0.1", - port: 6379, + host: process.env.REDIS_HOST || "127.0.0.1", + port: process.env.REDIS_PORT || 6379, retry_strategy: function (options) { - if (options.error.code === 'ECONNREFUSED') { + if (options.error.code === "ECONNREFUSED") { // End reconnecting on a specific error and flush all commands with a individual error - return new Error('The server refused the connection'); + return new Error("The server refused the connection"); } if (options.total_retry_time > 1000 * 60 * 60) { - // End reconnecting after a specific timeout and flush all commands with a individual error - return new Error('Retry time exhausted'); + // End reconnecting after a specific timeout and flush all commands with a individual error + return new Error("Retry time exhausted"); } if (options.times_connected > 10) { - // End reconnecting with built in error - return undefined; + // End reconnecting with built in error + return undefined; } // reconnect after return Math.max(options.attempt * 100, 3000); - } - } - } -} + }, + }, + }, +}; config.development.log4js = { - appenders: {console: { type: 'console'}}, - categories : { - "default": { appenders: ['console'], level:'error'}, - "startup": { appenders: ['console'], level:'info'}, - "http": { appenders: ['console'], level:'info'} - } -} + appenders: { console: { type: "console" } }, + categories: { + default: { appenders: ["console"], level: "error" }, + startup: { appenders: ["console"], level: "info" }, + http: { appenders: ["console"], level: "info" }, + }, +}; config.production = Object.assign({}, config.development); module.exports = config; diff --git a/config/config.test.js b/config/config.test.js deleted file mode 100644 index bb604976..00000000 --- a/config/config.test.js +++ /dev/null @@ -1,59 +0,0 @@ -var os = require("os"); - -var config = {}; -config.test = { - db: { - username: "root", - password: "password", - database: "codepush_test", - host: "127.0.0.1", - port: 3306, - dialect: "mysql", - logging: false, - operatorsAliases: false, - }, - local: { - storageDir: os.tmpdir(), - downloadUrl: "http://127.0.0.1:3000/download", - public: "/download", - }, - jwt: { - tokenSecret: "INSERT_RANDOM_TOKEN_KEY", - }, - common: { - tryLoginTimes: 10, - diffNums: 3, - dataDir: os.tmpdir(), - storageType: "local", - updateCheckCache: true, - rolloutClientUniqueIdCache: false, - }, - smtpConfig: false, - redis: { - default: { - host: "127.0.0.1", - port: 6379, - retry_strategy: function (options) { - if (options.error.code === "ECONNREFUSED") { - return new Error("The server refused the connection"); - } - if (options.total_retry_time > 1000 * 60 * 60) { - return new Error("Retry time exhausted"); - } - if (options.times_connected > 10) { - return undefined; - } - return Math.max(options.attempt * 100, 3000); - }, - }, - }, -}; -config.test.log4js = { - appenders: { console: { type: "console" } }, - categories: { - default: { appenders: ["console"], level: "error" }, - startup: { appenders: ["console"], level: "info" }, - http: { appenders: ["console"], level: "info" }, - }, -}; -module.exports = config; diff --git a/core/services/email-manager.js b/core/services/email-manager.js index 2ed3ef67..30aa69f5 100644 --- a/core/services/email-manager.js +++ b/core/services/email-manager.js @@ -1,41 +1,39 @@ -'use strict'; -var Promise = require('bluebird'); -var models = require('../../models'); -var _ = require('lodash'); -var validator = require('validator'); -var security = require('../utils/security'); -var moment = require('moment'); -var nodemailer = require('nodemailer'); -var config = require('../config'); +"use strict"; +var Promise = require("bluebird"); +var models = require("../../models"); +var _ = require("lodash"); +var validator = require("validator"); +var security = require("../utils/security"); +var moment = require("moment"); +var nodemailer = require("nodemailer"); +var config = require("../config"); -var proto = module.exports = function (){ - function EmailManager() { - - } +var proto = (module.exports = function () { + function EmailManager() {} EmailManager.__proto__ = proto; return EmailManager; -}; +}); proto.sendMail = function (options) { return new Promise((resolve, reject) => { - if(!_.get(options, 'to')) { + if (!_.get(options, "to")) { return reject(new AppError.AppError("to是必传参数")); } - var smtpConfig = _.get(config, 'smtpConfig'); - if (!smtpConfig) { + var smtpConfig = _.get(config, "smtpConfig"); + if (!smtpConfig || !smtpConfig.host) { resolve({}); } var transporter = nodemailer.createTransport(smtpConfig); - var sendEmailAddress = _.get(smtpConfig, 'auth.user'); + var sendEmailAddress = _.get(smtpConfig, "auth.user"); var defaultMailOptions = { from: `"CodePush Server" <${sendEmailAddress}>`, // sender address - to: '', // list of receivers 必传参数 - subject: 'CodePush Server', // Subject line - html: '' // html body + to: "", // list of receivers 必传参数 + subject: "CodePush Server", // Subject line + html: "", // html body }; var mailOptions = _.assign(defaultMailOptions, options); - transporter.sendMail(mailOptions, function(error, info){ - if(error){ + transporter.sendMail(mailOptions, function (error, info) { + if (error) { return reject(error); } resolve(info); @@ -46,8 +44,6 @@ proto.sendMail = function (options) { proto.sendRegisterCode = function (email, code) { return proto.sendMail({ to: email, - html: `
您接收的验证码为: ${code} 20分钟内有效
` + html: `
您接收的验证码为: ${code} 20分钟内有效
`, }); }; - - diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..39dfd396 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +version: "3.7" +services: + server: + image: shmopen/code-push-server:latest + volumes: + - data-storage:/data/storage + - data-tmp:/data/tmp + environment: + DOWNLOAD_URL: "http://YOUR_MACHINE_IP:3000/download" + TOKEN_SECRET: "YOUR_JWT_TOKEN_SECRET" + RDS_HOST: "mysql" + RDS_USERNAME: "codepush" + RDS_PASSWORD: "123456" + RDS_DATABASE: "codepush" + STORAGE_DIR: "/data/storage" + DATA_DIR: "/data/tmp" + NODE_ENV: "production" + REDIS_HOST: "redis" + ports: + - "3000:3000" + depends_on: + - mysql + - redis + mysql: + image: mysql:latest + volumes: + - data-mysql:/var/lib/mysql + - ./sql/codepush-all-docker.sql:/docker-entrypoint-initdb.d/codepush-all.sql + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: "On" + redis: + image: redis:latest + volumes: + - data-redis:/data +volumes: + data-storage: + data-tmp: + data-mysql: + data-redis: diff --git a/docker/README.md b/docker/README.md deleted file mode 100644 index d1fb6da1..00000000 --- a/docker/README.md +++ /dev/null @@ -1,137 +0,0 @@ -# docker 部署 code-push-server - ->该文档用于描述docker部署code-push-server,实例包含三个部分 - -- code-push-server部分 - - 更新包默认采用`local`存储(即存储在本地机器上)。使用docker volume存储方式,容器销毁不会导致数据丢失,除非人为删除volume。 - - 内部使用pm2 cluster模式管理进程,默认开启进程数为cpu数,可以根据自己机器配置设置docker-compose.yml文件中deploy参数。 - - docker-compose.yml只提供了应用的一部分参数设置,如需要设置其他配置,可以修改文件config.js。 -- mysql部分 - - 数据使用docker volume存储方式,容器销毁不会导致数据丢失,除非人为删除volume。 - - 应用请勿使用root用户,为了安全可以创建权限相对较小的权限供code-push-server使用,只需要给予`select,update,insert`权限即可。初始化数据库需要使用root或有建表权限用户 -- redis部分 - - `tryLoginTimes` 登录错误次数限制 - - `updateCheckCache` 提升应用性能 - - `rolloutClientUniqueIdCache` 灰度发布 - -## 安装docker - -参考docker官方安装教程 - -- [>>mac点这里](https://docs.docker.com/docker-for-mac/install/) -- [>>windows点这里](https://docs.docker.com/docker-for-windows/install/) -- [>>linux点这里](https://docs.docker.com/install/linux/docker-ce/ubuntu/) - - -`$ docker info` 能成功输出相关信息,则安装成功,才能继续下面步骤 - -## 启动swarm - -```shell -$ sudo docker swarm init -``` - - -## 获取代码 - -```shell -$ git clone https://github.com/lisong/code-push-server.git -$ cd code-push-server/docker -``` - -## 修改配置文件 - -```shell -$ vim docker-compose.yml -``` - -*将`DOWNLOAD_URL`中`YOU_MACHINE_IP`替换成本机外网ip或者域名* - -*将`MYSQL_HOST`中`YOU_MACHINE_IP`替换成本机内网ip* - -*将`REDIS_HOST`中`YOU_MACHINE_IP`替换成本机内网ip* - -## jwt.tokenSecret修改 - -> code-push-server 验证登录验证方式使用的json web token加密方式,该对称加密算法是公开的,所以修改config.js中tokenSecret值很重要。 - -*非常重要!非常重要! 非常重要!* - -> 可以打开连接`https://www.grc.com/passwords.htm`获取 `63 random alpha-numeric characters`类型的随机生成数作为密钥 - -## 部署 - -```shell -$ sudo docker stack deploy -c docker-compose.yml code-push-server -``` - -> 如果网速不佳,需要漫长而耐心的等待。。。去和妹子聊会天吧^_^ - - -## 查看进展 - -```shell -$ sudo docker service ls -$ sudo docker service ps code-push-server_db -$ sudo docker service ps code-push-server_redis -$ sudo docker service ps code-push-server_server -``` - -> 确认`CURRENT STATE` 为 `Running about ...`, 则已经部署完成 - -## 访问接口简单验证 - -`$ curl -I http://YOUR_CODE_PUSH_SERVER_IP:3000/` - -返回`200 OK` - -```http -HTTP/1.1 200 OK -X-DNS-Prefetch-Control: off -X-Frame-Options: SAMEORIGIN -Strict-Transport-Security: max-age=15552000; includeSubDomains -X-Download-Options: noopen -X-Content-Type-Options: nosniff -X-XSS-Protection: 1; mode=block -Content-Type: text/html; charset=utf-8 -Content-Length: 592 -ETag: W/"250-IiCMcM1ZUFSswSYCU0KeFYFEMO8" -Date: Sat, 25 Aug 2018 15:45:46 GMT -Connection: keep-alive -``` - -## 浏览器登录 - -> 默认用户名:admin 密码:123456 记得要修改默认密码哦 -> 如果登录连续输错密码超过一定次数,会限定无法再登录. 需要清空redis缓存 - -```shell -$ redis-cli -p6388 # 进入redis -> flushall -> quit -``` - - -## 查看服务日志 - -```shell -$ sudo docker service logs code-push-server_server -$ sudo docker service logs code-push-server_db -$ sudo docker service logs code-push-server_redis -``` - -## 查看存储 `docker volume ls` - -DRIVER | VOLUME NAME | 描述 ------- | ----- | ------- -local | code-push-server_data-mysql | 数据库存储数据目录 -local | code-push-server_data-storage | 存储打包文件目录 -local | code-push-server_data-tmp | 用于计算更新包差异文件临时目录 -local | code-push-server_data-redis | redis落地数据 - -## 销毁退出应用 - -```bash -$ sudo docker stack rm code-push-server -$ sudo docker swarm leave --force -``` diff --git a/docker/code-push-server/Dockerfile b/docker/code-push-server/Dockerfile deleted file mode 100644 index 004406ba..00000000 --- a/docker/code-push-server/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:8.11.4-alpine - -RUN npm config set registry https://registry.npm.taobao.org/ \ -&& npm i -g code-push-server@0.5.2 pm2@latest --no-optional - -COPY ./process.json /process.json - -EXPOSE 3000 - -CMD ["pm2-docker", "start", "/process.json"] diff --git a/docker/code-push-server/process.json b/docker/code-push-server/process.json deleted file mode 100644 index 493010d3..00000000 --- a/docker/code-push-server/process.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "apps" : [ - { - "name" : "code-push-server", - "max_memory_restart" : "500M", - "script" : "code-push-server", - "instances" : "max", //开启实例数量,max为cpu核数 - "exec_mode" : "cluster", //集群模式,最大提升网站并发 - } - ] -} \ No newline at end of file diff --git a/docker/config.js b/docker/config.js deleted file mode 100644 index f78fc3b6..00000000 --- a/docker/config.js +++ /dev/null @@ -1,93 +0,0 @@ -var config = {}; -config.development = { - // Config for database, only support mysql. - db: { - username: process.env.MYSQL_USERNAME, - password: process.env.MYSQL_PASSWORD, - database: process.env.MYSQL_DATABASE, - host: process.env.MYSQL_HOST, - port: process.env.MYSQL_PORT || 3306, - dialect: "mysql", - logging: false, - operatorsAliases: false, - }, - // Config for local storage when storageType value is "local". - local: { - // Binary files storage dir, Do not use tmpdir and it's public download dir. - storageDir: process.env.STORAGE_DIR, - // Binary files download host address which Code Push Server listen to. the files storage in storageDir. - downloadUrl: process.env.DOWNLOAD_URL, - // public static download spacename. - public: '/download' - }, - jwt: { - // Recommended: 63 random alpha-numeric characters - // Generate using: https://www.grc.com/passwords.htm - tokenSecret: 'INSERT_RANDOM_TOKEN_KEY' - }, - common: { - /* - * tryLoginTimes is control login error times to avoid force attack. - * if value is 0, no limit for login auth, it may not safe for account. when it's a number, it means you can - * try that times today. but it need config redis server. - */ - tryLoginTimes: 4, - // CodePush Web(https://github.com/lisong/code-push-web) login address. - //codePushWebUrl: "http://127.0.0.1:3001/login", - // create patch updates's number. default value is 3 - diffNums: 3, - // data dir for caclulate diff files. it's optimization. - dataDir: process.env.DATA_DIR, - // storageType which is your binary package files store. options value is ("local" | "qiniu" | "s3") - storageType: "local", - // options value is (true | false), when it's true, it will cache updateCheck results in redis. - updateCheckCache: false, - // options value is (true | false), when it's true, it will cache rollout results in redis - rolloutClientUniqueIdCache: false, - }, - // Config for smtp email,register module need validate user email project source https://github.com/nodemailer/nodemailer - smtpConfig:{ - host: "smtp.aliyun.com", - port: 465, - secure: true, - auth: { - user: "", - pass: "" - } - }, - // Config for redis (register module, tryLoginTimes module) - redis: { - default: { - host: process.env.REDIS_HOST, - port: process.env.REDIS_PORT || 6379, - retry_strategy: function (options) { - if (options.error.code === 'ECONNREFUSED') { - // End reconnecting on a specific error and flush all commands with a individual error - return new Error('The server refused the connection'); - } - if (options.total_retry_time > 1000 * 60 * 60) { - // End reconnecting after a specific timeout and flush all commands with a individual error - return new Error('Retry time exhausted'); - } - if (options.times_connected > 10) { - // End reconnecting with built in error - return undefined; - } - // reconnect after - return Math.max(options.attempt * 100, 3000); - } - } - } -} - -config.development.log4js = { - appenders: {console: { type: 'console'}}, - categories : { - "default": { appenders: ['console'], level:'error'}, - "startup": { appenders: ['console'], level:'info'}, - "http": { appenders: ['console'], level:'info'} - } -} - -config.production = Object.assign({}, config.development); -module.exports = config; diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml deleted file mode 100644 index 3e8532f3..00000000 --- a/docker/docker-compose.yml +++ /dev/null @@ -1,63 +0,0 @@ -version: "3.7" -services: - server: - image: tablee/code-push-server:v0.5.2 - volumes: - - data-storage:/data/storage - - data-tmp:/data/tmp - - ./config.js:/config.js - environment: - DOWNLOAD_URL: "http://YOU_MACHINE_IP:3000/download" - MYSQL_HOST: "YOU_MACHINE_IP" - MYSQL_PORT: "3308" - MYSQL_USERNAME: "codepush" - MYSQL_PASSWORD: "123456" - MYSQL_DATABASE: "codepush" - STORAGE_DIR: "/data/storage" - DATA_DIR: "/data/tmp" - NODE_ENV: "production" - CONFIG_FILE: "/config.js" - REDIS_HOST: "YOU_MACHINE_IP" - REDIS_PORT: "6388" - deploy: - resources: - limits: - cpus: "2" - memory: 1000M - restart_policy: - condition: on-failure - ports: - - "3000:3000" - networks: - - servernet - depends_on: - - db - - redis - db: - image: mysql:5.7.33 - volumes: - - data-mysql:/var/lib/mysql - - ./sql/codepush-all.sql:/docker-entrypoint-initdb.d/codepush-all.sql - ports: - - "3308:3306" - environment: - MYSQL_ALLOW_EMPTY_PASSWORD: "On" - networks: - - dbnet - redis: - image: redis:4.0.11-alpine - volumes: - - data-redis:/data - ports: - - "6388:6379" - networks: - - redisnet -networks: - servernet: - dbnet: - redisnet: -volumes: - data-storage: - data-tmp: - data-mysql: - data-redis: diff --git a/docs/install-server-by-docker.md b/docs/install-server-by-docker.md new file mode 100644 index 00000000..6480627b --- /dev/null +++ b/docs/install-server-by-docker.md @@ -0,0 +1,117 @@ +# docker 部署 code-push-server + +> 该文档用于描述 docker 部署 code-push-server,实例包含三个部分 + +- code-push-server 部分 + - 更新包默认采用`local`存储(即存储在本地机器上)。使用 docker volume 存储方式,容器销毁不会导致数据丢失,除非人为删除 volume。 + - 内部使用 pm2 cluster 模式管理进程,默认开启进程数为 cpu 数,可以根据自己机器配置设置 docker-compose.yml 文件中 deploy 参数。 + - docker-compose.yml 只提供了应用的一部分参数设置,如需要设置其他配置,可以修改文件 config.js。 +- mysql 部分 + - 数据使用 docker volume 存储方式,容器销毁不会导致数据丢失,除非人为删除 volume。 + - 应用请勿使用 root 用户,为了安全可以创建权限相对较小的权限供 code-push-server 使用,只需要给予`select,update,insert`权限即可。初始化数据库需要使用 root 或有建表权限用户 +- redis 部分 + - `tryLoginTimes` 登录错误次数限制 + - `updateCheckCache` 提升应用性能 + - `rolloutClientUniqueIdCache` 灰度发布 + +## 安装 docker + +参考 docker 官方安装教程 + +- [>>mac 点这里](https://docs.docker.com/docker-for-mac/install/) +- [>>windows 点这里](https://docs.docker.com/docker-for-windows/install/) +- [>>linux 点这里](https://docs.docker.com/install/linux/docker-ce/ubuntu/) + +`$ docker info` 能成功输出相关信息,则安装成功,才能继续下面步骤 + +## 获取代码 + +```shell +$ git clone https://github.com/shm-open/code-push-server.git +$ cd code-push-server +``` + +## 修改配置文件 + +```shell +$ vim docker-compose.yml +``` + +_将`DOWNLOAD_URL`中`YOUR_MACHINE_IP`替换成本机外网 ip 或者域名_ + +### jwt.tokenSecret 修改 + +> code-push-server 验证登录验证方式使用的 json web token 加密方式,该对称加密算法是公开的,所以修改 config.js 中 tokenSecret 值很重要。 + +_非常重要!非常重要! 非常重要!_ + +> 可以打开连接`https://www.grc.com/passwords.htm`获取 `63 random alpha-numeric characters`类型的随机生成数作为密钥 + +_将`TOKEN_SECRET`中`YOUR_JWT_TOKEN_SECRET`替换成密钥_ + +## 部署 + +```shell +$ docker-compose up -d +``` + +> 如果网速不佳,需要漫长而耐心的等待。。。去和妹子聊会天吧^\_^ + +## 查看进展 + +```shell +$ docker-compose ps +``` + +## 访问接口简单验证 + +`$ curl -I http://YOUR_CODE_PUSH_SERVER_IP:3000/` + +返回`200 OK` + +```http +HTTP/1.1 200 OK +X-DNS-Prefetch-Control: off +X-Frame-Options: SAMEORIGIN +Strict-Transport-Security: max-age=15552000; includeSubDomains +X-Download-Options: noopen +X-Content-Type-Options: nosniff +X-XSS-Protection: 1; mode=block +Content-Type: text/html; charset=utf-8 +Content-Length: 592 +ETag: W/"250-IiCMcM1ZUFSswSYCU0KeFYFEMO8" +Date: Sat, 25 Aug 2018 15:45:46 GMT +Connection: keep-alive +``` + +## 浏览器登录 + +> 默认用户名:admin 密码:123456 记得要修改默认密码哦 +> 如果登录连续输错密码超过一定次数,会限定无法再登录. 需要清空 redis 缓存 + +```shell +$ docker exec -it code-push-server_redis_1 redis-cli # 进入redis +> flushall +> quit +``` + +## 查看服务日志 + +```shell +$ docker-compose logs server +``` + +## 查看存储 `docker volume ls` + +| DRIVER | VOLUME NAME | 描述 | +| ------ | ----------------------------- | ------------------------------ | +| local | code-push-server_data-mysql | 数据库存储数据目录 | +| local | code-push-server_data-storage | 存储打包文件目录 | +| local | code-push-server_data-tmp | 用于计算更新包差异文件临时目录 | +| local | code-push-server_data-redis | redis 落地数据 | + +## 销毁退出应用 + +```bash +$ docker-compose down +``` diff --git a/docs/README.md b/docs/install-server.md similarity index 77% rename from docs/README.md rename to docs/install-server.md index 9419e94d..ed39378c 100644 --- a/docs/README.md +++ b/docs/install-server.md @@ -1,4 +1,3 @@ - ## INSTALL NODE AND NPM [see](https://nodejs.org/en/download/) @@ -13,26 +12,23 @@ $ sudo npm i -g pm2 ## INSTALL MYSQL -- [Linux](https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html) -- [macOS](https://dev.mysql.com/doc/refman/8.0/en/osx-installation.html) -- [Microsoft Windows](https://dev.mysql.com/doc/refman/8.0/en/windows-installation.html) -- [Others](https://dev.mysql.com/doc/refman/8.0/en/installing.html) +- [Linux](https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html) +- [macOS](https://dev.mysql.com/doc/refman/8.0/en/osx-installation.html) +- [Microsoft Windows](https://dev.mysql.com/doc/refman/8.0/en/windows-installation.html) +- [Others](https://dev.mysql.com/doc/refman/8.0/en/installing.html) > notice. mysql8.x default auth caching_sha2_pasword not support in node-mysql2 see [issue](https://github.com/mysqljs/mysql/pull/1962) - - ## GET code-push-server FROM NPM ```shell -$ npm install code-push-server@latest -g +$ npm install @shm-open/code-push-server@latest -g ``` - ## GET code-push-server FROM SOURCE CODE ```shell -$ git clone https://github.com/lisong/code-push-server.git +$ git clone https://github.com/shm-open/code-push-server.git $ cd code-push-server $ npm install ``` @@ -57,11 +53,11 @@ save the file [config.js](https://github.com/lisong/code-push-server/blob/master some config have to change: -- `local`.`storageDir` change to your directory,make sure have read/write permissions. -- `local`.`downloadUrl` replace `127.0.0.1` to your machine ip. -- `common`.`dataDir` change to your directory,make sure have read/write permissions. -- `jwt`.`tokenSecret` get the random string from `https://www.grc.com/passwords.htm`, and replace the value `INSERT_RANDOM_TOKEN_KEY`. -- `db` config: `username`,`password`,`host`,`port` change your own's +- `local`.`storageDir` change to your directory,make sure have read/write permissions. +- `local`.`downloadUrl` replace `127.0.0.1` to your machine ip. +- `common`.`dataDir` change to your directory,make sure have read/write permissions. +- `jwt`.`tokenSecret` get the random string from `https://www.grc.com/passwords.htm`, and replace the value `INSERT_RANDOM_TOKEN_KEY`. +- `db` config: `username`,`password`,`host`,`port` change your own's ## CONFIGURE for pm2 @@ -69,8 +65,8 @@ save the file [process.json](https://github.com/lisong/code-push-server/blob/mas some config have to change: -- `script` if you install code-push-server from npm use `code-push-server`,or use `"your source code dir"/bin/www` -- `CONFIG_FILE` above config.js file path,use absolute path. +- `script` if you install code-push-server from npm use `code-push-server`,or use `"your source code dir"/bin/www` +- `CONFIG_FILE` above config.js file path,use absolute path. ## START SERVICE @@ -90,7 +86,7 @@ $ pm2 restart process.json $ pm2 stop process.json ``` -## CHECK SERVICE IS OK +## CHECK SERVICE IS OK ```shell $ curl -I http://YOUR_CODE_PUSH_SERVER_IP:3000/ @@ -113,19 +109,17 @@ Date: Sat, 25 Aug 2018 15:45:46 GMT Connection: keep-alive ``` - ## Use redis impove concurrent and security > config redis in config.js -- `updateCheckCache` -- `rolloutClientUniqueIdCache` -- `tryLoginTimes` - +- `updateCheckCache` +- `rolloutClientUniqueIdCache` +- `tryLoginTimes` ## UPGRADE -*from npm package* +_from npm package_ ```shell $ npm install -g code-push-server@latest @@ -133,7 +127,7 @@ $ code-push-server-db upgrade --dbhost "your mysql host" --dbport "your mysql po $ pm2 restart code-push-server # restart service ``` -*from source code* +_from source code_ ```shell $ cd /path/to/code-push-server @@ -143,7 +137,6 @@ $ ./bin/db upgrade --dbhost "your mysql host" --dbport "your mysql port" --dbus $ pm2 restart code-push-server # restart service ``` - ## view pm2 logs ```shell @@ -152,20 +145,18 @@ $ pm2 show code-push-server $ tail -f "output file path" ``` +## Support Storage mode -## Support Storage mode - -- local (default) -- qiniu (qiniu) -- s3 (aws) -- oss (aliyun) -- tencentcloud +- local (default) +- qiniu (qiniu) +- s3 (aws) +- oss (aliyun) +- tencentcloud -## Default listen Host/Port 0.0.0.0/3000 +## Default listen Host/Port 0.0.0.0/3000 > you can change it in process.json, env: PORT,HOST - ## [code-push-cli](https://github.com/Microsoft/code-push) > Use code-push-cli manager CodePushServer @@ -181,7 +172,6 @@ $ code-push login http://YOU_SERVICE_IP:3000 #login in browser account:admin pas $ curl -X PATCH -H "Authorization: Bearer mytoken" -H "Accept: application/json" -H "Content-Type:application/json" -d '{"oldPassword":"123456","newPassword":"654321"}' http://YOU_SERVICE_IP:3000/users/password ``` - ## config react-native project > Follow the react-native-code-push docs, addition iOS add a new entry named CodePushServerURL, whose value is the key of ourself CodePushServer URL. Android use the new CodePush constructor in MainApplication point CodePushServerUrl @@ -208,13 +198,12 @@ protected List getPackages() { "YourKey", MainApplication.this, BuildConfig.DEBUG, - "YourCodePushServerUrl" + "YourCodePushServerUrl" ) ); } ``` - ## [cordova-plugin-code-push](https://github.com/Microsoft/cordova-plugin-code-push) for cordova ```shell diff --git a/docs/process.json b/docs/process.json deleted file mode 100644 index 8ef0e3e1..00000000 --- a/docs/process.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "apps" : [ - { - "name" : "code-push-server", - "max_memory_restart" : "300M", - "script" : "/path/to/code-push-server/bin/www", - "instances" : "max", //开启实例数量,max为cpu核数 - "exec_mode" : "cluster", //集群模式,最大提升网站并发 - "env" : { - "NODE_ENV" : "production", - "PORT" : 3000, - "CONFIG_FILE" : "/path/to/production/config.js" - - // Must set add config when STORAGE_TYPE is upyun - // "STORAGE_TYPE" : "upyun", - // "DOWNLOAD_URL" : "", - // "UPYUN_STORAGE_DIR" : "", - // "UPYUN_SERVICE_NAME" : "", - // "UPYUN_OPERATOR_NAME" : "", - // "UPYUN_OPERATOR_PASS" : "" - } - } - ] -} \ No newline at end of file diff --git a/process.json b/process.json new file mode 100644 index 00000000..0f4709f4 --- /dev/null +++ b/process.json @@ -0,0 +1,14 @@ +{ + "apps": [ + { + "name": "code-push-server", + "max_memory_restart": "500M", + "script": "code-push-server", + "instances": "max", //开启实例数量,max为cpu核数 + "exec_mode": "cluster", //集群模式,最大提升网站并发 + "env": { + "NODE_ENV": "production" + } + } + ] +} diff --git a/docker/sql/codepush-all.sql b/sql/codepush-all-docker.sql similarity index 98% rename from docker/sql/codepush-all.sql rename to sql/codepush-all-docker.sql index 7bf4047d..9981a26a 100644 --- a/docker/sql/codepush-all.sql +++ b/sql/codepush-all-docker.sql @@ -1,7 +1,7 @@ CREATE DATABASE IF NOT EXISTS `codepush`; -GRANT SELECT,UPDATE,INSERT ON `codepush`.* TO 'codepush'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; - +CREATE USER IF NOT EXISTS 'codepush'@'%' IDENTIFIED BY '123456'; +GRANT SELECT,UPDATE,INSERT ON `codepush`.* TO 'codepush'@'%'; flush privileges; use `codepush`; From e41d4f1ce6107a26f909bc994651c6ed8a0dccda Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 05:51:50 +0000 Subject: [PATCH 024/347] fix(deps): update dependency moment to v2.29.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index fcd000c7..ee3f92e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3671,9 +3671,9 @@ "dev": true }, "moment": { - "version": "2.21.0", - "resolved": "http://registry.npm.taobao.org/moment/download/moment-2.21.0.tgz", - "integrity": "sha1-KhFLUdKm7J5tg8+AP4OKh42KAjo=" + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "moment-timezone": { "version": "0.5.14", diff --git a/package.json b/package.json index 32273237..eedd6708 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "lodash": "4.17.5", "log4js": "3.0.5", "markdown-it": "8.4.1", - "moment": "2.21.0", + "moment": "2.29.1", "morgan": "1.9.0", "mysql2": "2.3.0", "nodemailer": "4.6.3", From 04492fd546f241f7979466511000df4eae301f48 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 14:38:42 +0800 Subject: [PATCH 025/347] chore: simplify the test script, cleanup unnecessary CONFIG_FILE --- Dockerfile | 3 --- Makefile | 13 +++++-------- package.json | 1 - 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8139194c..9fc101db 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,11 +6,8 @@ RUN mkdir /data/ WORKDIR /data/ -COPY ./config/config.js /data/config.js COPY ./process.json /data/process.json -ENV CONFIG_FILE=/data/config.js - # CMD ["pm2-runtime", "/data/process.json"] # workaround for issue https://github.com/Unitech/pm2/issues/4950 CMD ["sh", "-c", "pm2 ps && pm2-runtime /data/process.json"] \ No newline at end of file diff --git a/Makefile b/Makefile index 136fda55..64a6d356 100644 --- a/Makefile +++ b/Makefile @@ -11,20 +11,17 @@ test: test-integration .PHONY: test-integration test-integration: @echo "\nRunning integration tests..." - @CONFIG_FILE=${ROOT}/config/config.js mocha test/api/init - @PORT=3000 HOST=127.0.0.1 CONFIG_FILE=${ROOT}/config/config.js node bin/www & - @CONFIG_FILE=${ROOT}/config/config.js mocha \ - test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index --recursive --timeout 15000 + @mocha test/api/init + @mocha test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index --recursive --timeout 15000 .PHONY: coverage coverage: @echo "\n\nRunning coverage report..." rm -rf coverage - @CONFIG_FILE=${ROOT}/config/config.js mocha test/api/init - @PORT=3000 HOST=127.0.0.1 CONFIG_FILE=${ROOT}/config/config.js node bin/www & - @CONFIG_FILE=${ROOT}/config/config.js ./node_modules/istanbul/lib/cli.js cover --report lcovonly --dir coverage/api ./node_modules/.bin/_mocha \ + @mocha test/api/init + @./node_modules/istanbul/lib/cli.js cover --report lcovonly --dir coverage/api ./node_modules/.bin/_mocha \ test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index -- -R spec --recursive --timeout 15000 - @CONFIG_FILE=${ROOT}/config/config.js ./node_modules/istanbul/lib/cli.js report + @./node_modules/istanbul/lib/cli.js report .PHONY: build-docker build-docker: diff --git a/package.json b/package.json index 32273237..939c86f2 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,6 @@ "config", "core", "docs", - "docker", "models", "public", "routes", From 90643a1ace65db86678f4f86f44eb59ea937f535 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 06:46:08 +0000 Subject: [PATCH 026/347] fix(deps): update dependency lodash to v4.17.21 --- package-lock.json | 12 +++++++++--- package.json | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f3645e9..a6300ce1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3155,9 +3155,9 @@ } }, "lodash": { - "version": "4.17.5", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.5.tgz", - "integrity": "sha1-maktZcAnLevoyWtgV7yPv6O+1RE=" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash._baseassign": { "version": "3.2.0", @@ -5842,6 +5842,12 @@ "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz", "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, "y18n": { "version": "3.2.1", "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", diff --git a/package.json b/package.json index ce18be98..1981c606 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "i18n": "0.8.3", "jschardet": "1.6.0", "jsonwebtoken": "8.5.1", - "lodash": "4.17.5", + "lodash": "4.17.21", "log4js": "3.0.6", "markdown-it": "8.4.1", "moment": "2.29.1", From 1f2cb60be694e87ef847b23dc4dab56980deef02 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 06:48:09 +0000 Subject: [PATCH 027/347] fix(deps): update dependency aliyun-sdk to v1.12.3 --- package-lock.json | 211 ++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 104 insertions(+), 109 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f3645e9..62157ba7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,6 +36,60 @@ "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, "@types/babel-types": { "version": "7.0.10", "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.10.tgz", @@ -54,6 +108,11 @@ "resolved": "http://registry.npm.taobao.org/@types/geojson/download/@types/geojson-1.0.6.tgz", "integrity": "sha1-PgKXJyjGkkjCrwjWCkjLuGgP/98=" }, + "@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, "@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", @@ -207,15 +266,15 @@ "integrity": "sha1-ODAbGfA0QGhDjrY5d6DNldYEcMA=" }, "aliyun-sdk": { - "version": "1.11.10", - "resolved": "http://registry.npm.taobao.org/aliyun-sdk/download/aliyun-sdk-1.11.10.tgz", - "integrity": "sha1-ZDvH+GDrv08F7mmfoGp05eQR8lA=", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/aliyun-sdk/-/aliyun-sdk-1.12.3.tgz", + "integrity": "sha512-CvSfl8HpLgxYmfQjFEDyGXmLpEfpMzICYtCwYVPJiAln0MAqOLfzakV3+JSgRgQrDCDKPxXwjQqWQhNIFmTebA==", "requires": { "node_memcached": "1.1.3", "pomelo-protobuf": "^0.4.0", - "protobufjs": "^4.1.2", + "protobufjs": ">=5.0.3", "xml2js": "0.4.4", - "xmlbuilder": "^2.4.5" + "xmlbuilder": "^13.0.2" } }, "ambi": { @@ -298,15 +357,6 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "ascli": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/ascli/download/ascli-1.0.1.tgz", - "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", - "requires": { - "colour": "~0.7.1", - "optjs": "~3.2.2" - } - }, "asn1": { "version": "0.2.3", "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz", @@ -543,20 +593,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "bufferview": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/bufferview/download/bufferview-1.0.1.tgz", - "integrity": "sha1-ev10pF+Tf6QiodM4wIu/3HbNcl0=" - }, - "bytebuffer": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/bytebuffer/download/bytebuffer-4.1.0.tgz", - "integrity": "sha1-TFgmngUqseSx9/82T9+zzogpBqo=", - "requires": { - "bufferview": "~1", - "long": "~2 >=2.3.0" - } - }, "bytes": { "version": "3.0.0", "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", @@ -571,11 +607,6 @@ "get-intrinsic": "^1.0.2" } }, - "camelcase": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, "camelcase-keys": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", @@ -675,16 +706,6 @@ } } }, - "cliui": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, "cls-bluebird": { "version": "2.1.0", "resolved": "http://registry.npm.taobao.org/cls-bluebird/download/cls-bluebird-2.1.0.tgz", @@ -724,11 +745,6 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "colour": { - "version": "0.7.1", - "resolved": "http://registry.npm.taobao.org/colour/download/colour-0.7.1.tgz", - "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" - }, "combined-stream": { "version": "1.0.6", "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz", @@ -2438,6 +2454,7 @@ "version": "5.0.15", "resolved": "http://registry.npm.taobao.org/glob/download/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, "requires": { "inflight": "^1.0.4", "inherits": "2", @@ -3286,9 +3303,9 @@ } }, "long": { - "version": "2.4.0", - "resolved": "http://registry.npm.taobao.org/long/download/long-2.4.0.tgz", - "integrity": "sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "longest": { "version": "1.0.1", @@ -3811,7 +3828,7 @@ }, "node_memcached": { "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/node_memcached/download/node_memcached-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/node_memcached/-/node_memcached-1.1.3.tgz", "integrity": "sha1-icFSr4itKIF/ANiRyZBFHV1xLqg=", "requires": { "debug": "^2.1.0" @@ -3819,8 +3836,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } @@ -3975,19 +3992,6 @@ "wordwrap": "~1.0.0" } }, - "optjs": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/optjs/download/optjs-3.2.2.tgz", - "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" - }, - "os-locale": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "^1.0.0" - } - }, "os-name": { "version": "1.0.3", "resolved": "http://registry.npm.taobao.org/os-name/download/os-name-1.0.3.tgz", @@ -4136,7 +4140,7 @@ }, "pomelo-protobuf": { "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/pomelo-protobuf/download/pomelo-protobuf-0.4.0.tgz", + "resolved": "https://registry.npmjs.org/pomelo-protobuf/-/pomelo-protobuf-0.4.0.tgz", "integrity": "sha1-5F6aCkRusYZn4MbhPutT1Hrdvag=" }, "prelude-ls": { @@ -4159,29 +4163,29 @@ } }, "protobufjs": { - "version": "4.1.3", - "resolved": "http://registry.npm.taobao.org/protobufjs/download/protobufjs-4.1.3.tgz", - "integrity": "sha1-jjbRsCJsu2jWR+S0TCoUTzfyd54=", - "requires": { - "ascli": "~1", - "bytebuffer": "~4 >=4.1", - "glob": "^5.0.10", - "yargs": "^3.10.0" + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" }, "dependencies": { - "yargs": { - "version": "3.32.0", - "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } + "@types/node": { + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.2.tgz", + "integrity": "sha512-LSw8TZt12ZudbpHc6EkIyDM3nHVWKYrAvGy6EAJfNfjusbwnThqjqxUKKRwuV3iWYeW/LYMzNgaq3MaLffQ2xA==" } } }, @@ -5766,11 +5770,6 @@ "semver": "^5.0.1" } }, - "window-size": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" - }, "with": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", @@ -5815,7 +5814,7 @@ }, "xml2js": { "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/xml2js/download/xml2js-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", "requires": { "sax": "0.6.x", @@ -5823,25 +5822,21 @@ } }, "xmlbuilder": { - "version": "2.6.5", - "resolved": "http://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-2.6.5.tgz", - "integrity": "sha1-b/etYPty0idk8AehZLd/K/FABSY=", - "requires": { - "lodash": "^3.5.0" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - } - } + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", + "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" }, "xregexp": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz", "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, "y18n": { "version": "3.2.1", "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", diff --git a/package.json b/package.json index ce18be98..33583334 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ }, "dependencies": { "aliyun-oss-upload-stream": "1.3.0", - "aliyun-sdk": "1.11.10", + "aliyun-sdk": "1.12.3", "aws-sdk": "2.971.0", "bcryptjs": "2.4.3", "bluebird": "3.7.2", From 92a5131d2d1f5803b753588a60c943c29c8dfa33 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 06:48:49 +0000 Subject: [PATCH 028/347] fix(deps): update dependency body-parser to v1.19.0 --- package-lock.json | 121 +++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 84 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f3645e9..405dc5a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -468,29 +468,42 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "body-parser": { - "version": "1.18.2", - "resolved": "http://registry.npm.taobao.org/body-parser/download/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", - "iconv-lite": "0.4.19", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "~1.6.15" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" } } }, @@ -558,9 +571,9 @@ } }, "bytes": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, "call-bind": { "version": "1.0.2", @@ -2622,20 +2635,21 @@ "integrity": "sha1-y9bJGKI4X+4d1WgL+ys6GUwBIcw=" }, "http-errors": { - "version": "1.6.2", - "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { - "depd": "1.1.1", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, @@ -4377,14 +4391,24 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "read-pkg": { @@ -4825,9 +4849,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "setprototypeof": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, "shebang-command": { "version": "1.2.0", @@ -5515,12 +5539,27 @@ "dev": true }, "type-is": { - "version": "1.6.16", - "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz", - "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" + }, + "dependencies": { + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + } } }, "typechecker": { @@ -5842,6 +5881,12 @@ "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz", "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, "y18n": { "version": "3.2.1", "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", diff --git a/package.json b/package.json index ce18be98..e8138d52 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "aws-sdk": "2.971.0", "bcryptjs": "2.4.3", "bluebird": "3.7.2", - "body-parser": "1.18.2", + "body-parser": "1.19.0", "cookie-parser": "1.4.3", "cos-nodejs-sdk-v5": "2.10.0", "debug": "3.1.0", From cdbe7e652a3312b7806f8c98d2ceb5de981b46b1 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 14:50:26 +0800 Subject: [PATCH 029/347] chore: update package-lock.json --- package-lock.json | 64 +++++------------------------------------------ 1 file changed, 6 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f3645e9..292496bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2256,12 +2256,6 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -2316,16 +2310,6 @@ "util-deprecate": "~1.0.1" } }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -2762,16 +2746,6 @@ "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", "requires": { "has": "^1.0.3" - }, - "dependencies": { - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - } } }, "is-expression": { @@ -3457,12 +3431,6 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -3514,16 +3482,6 @@ } } }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -4415,22 +4373,6 @@ "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } } } }, @@ -5842,6 +5784,12 @@ "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz", "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, "y18n": { "version": "3.2.1", "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", From dd354dbdc21810868bb94837a6deeca45345ae19 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 06:51:35 +0000 Subject: [PATCH 030/347] fix(deps): update dependency nodemailer to v4.7.0 --- package-lock.json | 12 +++++++++--- package.json | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f3645e9..0c1ad14c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3828,9 +3828,9 @@ } }, "nodemailer": { - "version": "4.6.3", - "resolved": "http://registry.npm.taobao.org/nodemailer/download/nodemailer-4.6.3.tgz", - "integrity": "sha1-w7fpf7cvRtSkdcQGoV7SOkXbzdw=" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", + "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==" }, "nopt": { "version": "3.0.6", @@ -5842,6 +5842,12 @@ "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz", "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, "y18n": { "version": "3.2.1", "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", diff --git a/package.json b/package.json index ce18be98..d2542b84 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "moment": "2.29.1", "morgan": "1.9.0", "mysql2": "2.3.0", - "nodemailer": "4.6.3", + "nodemailer": "4.7.0", "pug": "2.0.4", "qiniu": "7.1.3", "rand-token": "0.4.0", From 4283d9c8f6ac8110808cf8c6b40803d4e10ac4be Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 15:00:27 +0800 Subject: [PATCH 031/347] fix: remove debug from deps --- package-lock.json | 38 -------------------------------------- package.json | 1 - 2 files changed, 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index a80717c5..70b0b103 100644 --- a/package-lock.json +++ b/package-lock.json @@ -948,14 +948,6 @@ "compare-func": "^2.0.0", "lodash": "^4.17.15", "q": "^1.5.1" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } } }, "conventional-changelog-core": { @@ -978,14 +970,6 @@ "read-pkg": "^3.0.0", "read-pkg-up": "^3.0.0", "through2": "^4.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } } }, "conventional-changelog-ember": { @@ -1070,12 +1054,6 @@ "wordwrap": "^1.0.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -1126,14 +1104,6 @@ "split2": "^3.0.0", "through2": "^4.0.0", "trim-off-newlines": "^1.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } } }, "conventional-recommended-bump": { @@ -2371,14 +2341,6 @@ "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } } }, "git-remote-origin-url": { diff --git a/package.json b/package.json index 5018f054..33c00fac 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,6 @@ "body-parser": "1.18.2", "cookie-parser": "1.4.3", "cos-nodejs-sdk-v5": "2.10.0", - "debug": "3.1.0", "diff-match-patch": "1.0.5", "express": "4.17.1", "extract-zip": "1.6.6", From 56f4905a4134dc4631add808f1863936fc63e79d Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 15:03:00 +0800 Subject: [PATCH 032/347] fix: remove unused i18n package --- package-lock.json | 235 +++------------------------------------------- package.json | 1 - 2 files changed, 11 insertions(+), 225 deletions(-) diff --git a/package-lock.json b/package-lock.json index 70b0b103..8a4496c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,7 +84,8 @@ "abbrev": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=" + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true }, "accepts": { "version": "1.3.7", @@ -218,25 +219,6 @@ "xmlbuilder": "^2.4.5" } }, - "ambi": { - "version": "2.5.0", - "resolved": "http://registry.npm.taobao.org/ambi/download/ambi-2.5.0.tgz", - "integrity": "sha1-fI43K+SIkRV+fOoBy2+RQ9H3QiA=", - "requires": { - "editions": "^1.1.1", - "typechecker": "^4.3.0" - }, - "dependencies": { - "typechecker": { - "version": "4.5.0", - "resolved": "http://registry.npm.taobao.org/typechecker/download/typechecker-4.5.0.tgz", - "integrity": "sha1-w4KSAJeBI2S7r0WVsKtliCRBF6Y=", - "requires": { - "editions": "^1.3.4" - } - } - } - }, "amdefine": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", @@ -267,13 +249,6 @@ "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", "requires": { "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - } } }, "array-flatten": { @@ -320,7 +295,8 @@ "async": { "version": "1.5.2", "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true }, "asynckit": { "version": "0.4.0", @@ -704,11 +680,6 @@ "resolved": "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "coffee-script": { - "version": "1.12.7", - "resolved": "http://registry.npm.taobao.org/coffee-script/download/coffee-script-1.12.7.tgz", - "integrity": "sha1-wF2uDLeVkdBbMHCoQzqYyaiczFM=" - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1382,14 +1353,6 @@ } } }, - "csextends": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/csextends/download/csextends-1.1.1.tgz", - "integrity": "sha1-zFPBNJ+vfwrmzfb2xKTZFW08TsE=", - "requires": { - "coffee-script": "^1.12.5" - } - }, "dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -1574,14 +1537,6 @@ "resolved": "http://registry.npm.taobao.org/double-ended-queue/download/double-ended-queue-2.1.0-0.tgz", "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" }, - "eachr": { - "version": "2.0.4", - "resolved": "http://registry.npm.taobao.org/eachr/download/eachr-2.0.4.tgz", - "integrity": "sha1-Rm98qhBwj2EFCeMsgHqv5X/BIr8=", - "requires": { - "typechecker": "^2.0.8" - } - }, "ecc-jsbn": { "version": "0.1.1", "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz", @@ -1599,11 +1554,6 @@ "safe-buffer": "^5.0.1" } }, - "editions": { - "version": "1.3.4", - "resolved": "http://registry.npm.taobao.org/editions/download/editions-1.3.4.tgz", - "integrity": "sha1-NmLLWSNHwxaOuOSYoP9zJx1n9Qs=" - }, "ee-first": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", @@ -1884,36 +1834,6 @@ "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, - "extendr": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/extendr/download/extendr-2.1.0.tgz", - "integrity": "sha1-MBqgu+pWX00tyPVw8qImEahSe1Y=", - "requires": { - "typechecker": "~2.0.1" - }, - "dependencies": { - "typechecker": { - "version": "2.0.8", - "resolved": "http://registry.npm.taobao.org/typechecker/download/typechecker-2.0.8.tgz", - "integrity": "sha1-6D2oS7ZMWEzLNFg4V2xAsDN9uC4=" - } - } - }, - "extract-opts": { - "version": "2.2.0", - "resolved": "http://registry.npm.taobao.org/extract-opts/download/extract-opts-2.2.0.tgz", - "integrity": "sha1-H6KOunNSxttID4hc63GkaBC+bX0=", - "requires": { - "typechecker": "~2.0.1" - }, - "dependencies": { - "typechecker": { - "version": "2.0.8", - "resolved": "http://registry.npm.taobao.org/typechecker/download/typechecker-2.0.8.tgz", - "integrity": "sha1-6D2oS7ZMWEzLNFg4V2xAsDN9uC4=" - } - } - }, "extract-zip": { "version": "1.6.6", "resolved": "http://registry.npm.taobao.org/extract-zip/download/extract-zip-1.6.6.tgz", @@ -2603,19 +2523,6 @@ "ms": "^2.0.0" } }, - "i18n": { - "version": "0.8.3", - "resolved": "http://registry.npm.taobao.org/i18n/download/i18n-0.8.3.tgz", - "integrity": "sha1-LYzxwkciYCwgQdAbpq5eqlE4jw4=", - "requires": { - "debug": "*", - "make-plural": "^3.0.3", - "math-interval-parser": "^1.1.0", - "messageformat": "^0.3.1", - "mustache": "*", - "sprintf-js": ">=1.0.3" - } - }, "iconv-lite": { "version": "0.4.19", "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", @@ -2631,20 +2538,6 @@ "resolved": "http://registry.npm.taobao.org/ienoopen/download/ienoopen-1.0.0.tgz", "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" }, - "ignorefs": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/ignorefs/download/ignorefs-1.2.0.tgz", - "integrity": "sha1-2ln7hYl25KXkNwLM0fKC/byeV1Y=", - "requires": { - "editions": "^1.3.3", - "ignorepatterns": "^1.1.0" - } - }, - "ignorepatterns": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/ignorepatterns/download/ignorepatterns-1.1.0.tgz", - "integrity": "sha1-rI9DbyI5td+2bV8NOpBKh6xnzF4=" - }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -3255,22 +3148,6 @@ } } }, - "make-plural": { - "version": "3.0.6", - "resolved": "http://registry.npm.taobao.org/make-plural/download/make-plural-3.0.6.tgz", - "integrity": "sha1-IDOgO6wpC487uRJY9lud9+iwHKc=", - "requires": { - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "optional": true - } - } - }, "map-obj": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", @@ -3289,14 +3166,6 @@ "uc.micro": "^1.0.5" } }, - "math-interval-parser": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/math-interval-parser/download/math-interval-parser-1.1.0.tgz", - "integrity": "sha1-2+2lsGsySZc8bfYXD94jhvCv2JM=", - "requires": { - "xregexp": "^2.0.0" - } - }, "md5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", @@ -3457,32 +3326,6 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "messageformat": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/messageformat/download/messageformat-0.3.1.tgz", - "integrity": "sha1-5Y//gkXps5cXmeW0PbWLPpQX9aI=", - "requires": { - "async": "~1.5.2", - "glob": "~6.0.4", - "make-plural": "~3.0.3", - "nopt": "~3.0.6", - "watchr": "~2.4.13" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "methods": { "version": "1.1.2", "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", @@ -3657,11 +3500,6 @@ "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "mustache": { - "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/mustache/download/mustache-2.3.0.tgz", - "integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA=" - }, "mysql2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.0.tgz", @@ -3756,6 +3594,7 @@ "version": "3.0.6", "resolved": "http://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, "requires": { "abbrev": "1" } @@ -4550,14 +4389,6 @@ "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, - "safefs": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/safefs/download/safefs-3.2.2.tgz", - "integrity": "sha1-gXDBRE1wOOCMrqBaN0+uL6NJ4Vw=", - "requires": { - "graceful-fs": "*" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -4568,16 +4399,6 @@ "resolved": "http://registry.npm.taobao.org/sax/download/sax-0.6.1.tgz", "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=" }, - "scandirectory": { - "version": "2.5.0", - "resolved": "http://registry.npm.taobao.org/scandirectory/download/scandirectory-2.5.0.tgz", - "integrity": "sha1-bOA/VKCQtmjjy+2/IO354xBZPnI=", - "requires": { - "ignorefs": "^1.0.0", - "safefs": "^3.1.2", - "taskgroup": "^4.0.5" - } - }, "semver": { "version": "5.5.0", "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz", @@ -4911,9 +4732,9 @@ } }, "sprintf-js": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.1.tgz", - "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=" + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sqlstring": { "version": "2.3.2", @@ -5269,15 +5090,6 @@ "has-flag": "^1.0.0" } }, - "taskgroup": { - "version": "4.3.1", - "resolved": "http://registry.npm.taobao.org/taskgroup/download/taskgroup-4.3.1.tgz", - "integrity": "sha1-feGT/r12gnPEV3MElwJNUSwnkVo=", - "requires": { - "ambi": "^2.2.0", - "csextends": "^1.0.3" - } - }, "terraformer": { "version": "1.0.8", "resolved": "http://registry.npm.taobao.org/terraformer/download/terraformer-1.0.8.tgz", @@ -5427,11 +5239,6 @@ "mime-types": "~2.1.18" } }, - "typechecker": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/typechecker/download/typechecker-2.1.0.tgz", - "integrity": "sha1-0cIJOlT/ihn1jP+HfuqlTyJC04M=" - }, "typedarray": { "version": "0.0.6", "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", @@ -5634,21 +5441,6 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, - "watchr": { - "version": "2.4.13", - "resolved": "http://registry.npm.taobao.org/watchr/download/watchr-2.4.13.tgz", - "integrity": "sha1-10hHu01vkPYf4sdPn2hmKqDgdgE=", - "requires": { - "eachr": "^2.0.2", - "extendr": "^2.1.0", - "extract-opts": "^2.2.0", - "ignorefs": "^1.0.0", - "safefs": "^3.1.2", - "scandirectory": "^2.5.0", - "taskgroup": "^4.2.0", - "typechecker": "^2.0.8" - } - }, "which": { "version": "1.3.0", "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", @@ -5742,9 +5534,9 @@ } }, "xregexp": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-4.0.0.tgz", + "integrity": "sha1-5pgYneSd0qGMxWh7BeF8jkOUMCA=" }, "xtend": { "version": "4.0.2", @@ -5835,11 +5627,6 @@ "requires": { "ansi-regex": "^3.0.0" } - }, - "xregexp": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-4.0.0.tgz", - "integrity": "sha1-5pgYneSd0qGMxWh7BeF8jkOUMCA=" } } }, diff --git a/package.json b/package.json index 33c00fac..bca9d94e 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ "formidable": "1.2.1", "fs-extra": "7.0.1", "helmet": "3.12.0", - "i18n": "0.8.3", "jschardet": "1.6.0", "jsonwebtoken": "8.5.1", "lodash": "4.17.21", From 6100c522778fe4ab6b05671e32c4b0aeae29ae1e Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 15:06:56 +0800 Subject: [PATCH 033/347] fix: remove /README.md and remove markdown-it dep --- package-lock.json | 39 +------------ package.json | 1 - routes/index.js | 145 +++++++++++++++++++++------------------------- 3 files changed, 70 insertions(+), 115 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a4496c9..358b58a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -247,6 +247,7 @@ "version": "1.0.10", "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -1570,11 +1571,6 @@ "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "entities": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" - }, "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -2936,14 +2932,6 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "linkify-it": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/linkify-it/download/linkify-it-2.0.3.tgz", - "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", - "requires": { - "uc.micro": "^1.0.1" - } - }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -3154,18 +3142,6 @@ "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", "dev": true }, - "markdown-it": { - "version": "8.4.1", - "resolved": "http://registry.npm.taobao.org/markdown-it/download/markdown-it-8.4.1.tgz", - "integrity": "sha1-IG/lmw5OG3inxzJQr5s0pK0Kr0Q=", - "requires": { - "argparse": "^1.0.7", - "entities": "~1.1.1", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, "md5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", @@ -3176,11 +3152,6 @@ "is-buffer": "~1.1.1" } }, - "mdurl": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, "media-typer": { "version": "0.3.0", "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", @@ -4734,7 +4705,8 @@ "sprintf-js": { "version": "1.0.3", "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "sqlstring": { "version": "2.3.2", @@ -5244,11 +5216,6 @@ "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, - "uc.micro": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.5.tgz", - "integrity": "sha1-DGXxX4FaoItWCmHOi023/8P0U3Y=" - }, "uglify-js": { "version": "2.8.29", "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", diff --git a/package.json b/package.json index bca9d94e..7177d951 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,6 @@ "jsonwebtoken": "8.5.1", "lodash": "4.17.21", "log4js": "3.0.6", - "markdown-it": "8.4.1", "moment": "2.29.1", "morgan": "1.9.0", "mysql2": "2.3.0", diff --git a/routes/index.js b/routes/index.js index d070b551..7ab46e88 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,107 +1,96 @@ -var express = require('express'); +var express = require("express"); var router = express.Router(); -var Promise = require('bluebird'); -var AppError = require('../core/app-error'); -var middleware = require('../core/middleware'); -var ClientManager = require('../core/services/client-manager'); -var _ = require('lodash'); -var log4js = require('log4js'); +var AppError = require("../core/app-error"); +var middleware = require("../core/middleware"); +var ClientManager = require("../core/services/client-manager"); +var _ = require("lodash"); +var log4js = require("log4js"); var log = log4js.getLogger("cps:index"); -router.get('/', (req, res, next) => { - res.render('index', { title: 'CodePushServer' }); +router.get("/", (req, res, next) => { + res.render("index", { title: "CodePushServer" }); }); -router.get('/README.md', (req, res, next) => { - var MarkdownIt = require('markdown-it'); - const path = require('path'); - const fs = require('fs'); - const readFile = Promise.promisify(fs.readFile); - const README = path.join(__dirname, '../README.md'); - readFile(README, { encoding: 'utf8' }) - .then(source => { - var md = new MarkdownIt(); - res.send(md.render(source)); - }) - .catch(e=>{ - if (e instanceof AppError.AppError) { - res.send(e.message); - } else { - next(e); - } - }); +router.get("/tokens", (req, res) => { + res.render("tokens", { title: "获取token" }); }); -router.get('/tokens', (req, res) => { - res.render('tokens', { title: '获取token' }); -}); - -router.get('/updateCheck', (req, res, next) => { +router.get("/updateCheck", (req, res, next) => { var deploymentKey = _.get(req, "query.deploymentKey"); var appVersion = _.get(req, "query.appVersion"); var label = _.get(req, "query.label"); - var packageHash = _.get(req, "query.packageHash") - var clientUniqueId = _.get(req, "query.clientUniqueId") + var packageHash = _.get(req, "query.packageHash"); + var clientUniqueId = _.get(req, "query.clientUniqueId"); var clientManager = new ClientManager(); - log.debug('req.query', req.query); - clientManager.updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) - .then((rs) => { - //灰度检测 - return clientManager.chosenMan(rs.packageId, rs.rollout, clientUniqueId) - .then((data)=>{ - if (!data) { - rs.isAvailable = false; - return rs; + log.debug("req.query", req.query); + clientManager + .updateCheckFromCache( + deploymentKey, + appVersion, + label, + packageHash, + clientUniqueId + ) + .then((rs) => { + //灰度检测 + return clientManager + .chosenMan(rs.packageId, rs.rollout, clientUniqueId) + .then((data) => { + if (!data) { + rs.isAvailable = false; + return rs; + } + return rs; + }); + }) + .then((rs) => { + delete rs.packageId; + delete rs.rollout; + res.send({ updateInfo: rs }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(404).send(e.message); + } else { + next(e); } - return rs; }); - }) - .then((rs) => { - delete rs.packageId; - delete rs.rollout; - res.send({"updateInfo":rs}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(404).send(e.message); - } else { - next(e); - } - }); }); -router.post('/reportStatus/download', (req, res) => { - log.debug('req.body', req.body); +router.post("/reportStatus/download", (req, res) => { + log.debug("req.body", req.body); var clientUniqueId = _.get(req, "body.clientUniqueId"); var label = _.get(req, "body.label"); var deploymentKey = _.get(req, "body.deploymentKey"); var clientManager = new ClientManager(); - clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId) - .catch((err) => { - if (!err instanceof AppError.AppError) { - console.error(err.stack) - } - }); - res.send('OK'); + clientManager + .reportStatusDownload(deploymentKey, label, clientUniqueId) + .catch((err) => { + if (!err instanceof AppError.AppError) { + console.error(err.stack); + } + }); + res.send("OK"); }); -router.post('/reportStatus/deploy', (req, res) => { - log.debug('req.body', req.body); +router.post("/reportStatus/deploy", (req, res) => { + log.debug("req.body", req.body); var clientUniqueId = _.get(req, "body.clientUniqueId"); var label = _.get(req, "body.label"); var deploymentKey = _.get(req, "body.deploymentKey"); var clientManager = new ClientManager(); - clientManager.reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) - .catch((err) => { - if (!err instanceof AppError.AppError) { - console.error(err.stack) - } - }); - res.send('OK'); + clientManager + .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) + .catch((err) => { + if (!err instanceof AppError.AppError) { + console.error(err.stack); + } + }); + res.send("OK"); }); -router.get('/authenticated', middleware.checkToken, (req, res) => { - return res.send({authenticated: true}); -}) +router.get("/authenticated", middleware.checkToken, (req, res) => { + return res.send({ authenticated: true }); +}); module.exports = router; From 7c0dfb4cbf5885964e28e7e3dc2bd5307fe59e3d Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 15:10:35 +0800 Subject: [PATCH 034/347] fix: remove unused morgan dep --- package-lock.json | 35 ----------------------------------- package.json | 1 - 2 files changed, 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index 358b58a4..bd8e5257 100644 --- a/package-lock.json +++ b/package-lock.json @@ -417,14 +417,6 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, - "basic-auth": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/basic-auth/download/basic-auth-2.0.0.tgz", - "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", - "requires": { - "safe-buffer": "5.1.1" - } - }, "bcrypt-pbkdf": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz", @@ -3444,28 +3436,6 @@ "moment": ">= 2.9.0" } }, - "morgan": { - "version": "1.9.0", - "resolved": "http://registry.npm.taobao.org/morgan/download/morgan-1.9.0.tgz", - "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", - "requires": { - "basic-auth": "~2.0.0", - "debug": "2.6.9", - "depd": "~1.1.1", - "on-finished": "~2.3.0", - "on-headers": "~1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "requires": { - "ms": "2.0.0" - } - } - } - }, "ms": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", @@ -3645,11 +3615,6 @@ "ee-first": "1.1.1" } }, - "on-headers": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/on-headers/download/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" - }, "once": { "version": "1.4.0", "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", diff --git a/package.json b/package.json index 7177d951..9dd9df74 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,6 @@ "lodash": "4.17.21", "log4js": "3.0.6", "moment": "2.29.1", - "morgan": "1.9.0", "mysql2": "2.3.0", "nodemailer": "4.7.0", "pug": "2.0.4", From 2a3f946a5a6edcbc6de05b33e46f41a497615ee6 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 15:26:21 +0800 Subject: [PATCH 035/347] fix: cleanup some use of bluebird in favor of native Promise --- bin/db | 219 +++++++++------ core/middleware.js | 155 ++++++----- core/services/account-manager.js | 334 +++++++++++----------- core/services/datacenter-manager.js | 108 +++---- core/services/deployments.js | 243 +++++++++------- core/services/email-manager.js | 5 - core/utils/common.js | 418 ++++++++++++++++------------ core/utils/security.js | 153 +++++----- routes/accessKeys.js | 140 +++++----- routes/indexV1.js | 128 +++++---- test/api/index/index.test.js | 382 +++++++++++++------------ 11 files changed, 1252 insertions(+), 1033 deletions(-) diff --git a/bin/db b/bin/db index 005b8810..b819e440 100755 --- a/bin/db +++ b/bin/db @@ -3,81 +3,96 @@ /** * Module dependencies. */ -var fs = require('fs'); -var path = require('path'); -var _ = require('lodash'); -var mysql = require('mysql2'); +var fs = require("fs"); +var path = require("path"); +var _ = require("lodash"); +var mysql = require("mysql2"); var Promise = require("bluebird"); -var common = require("../core/utils/common"); -var constConfig = require('../core/const'); -var yargs = require('yargs') - .usage('Usage: $0 [options]') - .command('init', '初始化数据库', { - dbpassword: { - alias: 'dbpassword', - type: 'string' - } +var constConfig = require("../core/const"); +var yargs = require("yargs") + .usage("Usage: $0 [options]") + .command("init", "初始化数据库", { + dbpassword: { + alias: "dbpassword", + type: "string", + }, }) - .command('upgrade', '升级数据库', { - dbpassword: { - alias: 'dbpassword', - type: 'string' - } + .command("upgrade", "升级数据库", { + dbpassword: { + alias: "dbpassword", + type: "string", + }, }) - .example('$0 init --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306 --force', '初始化code-push-server数据库') - .example('$0 upgrade --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306', '升级code-push-server数据库') - .default({dbname: 'codepush', dbhost: 'localhost', dbuser: 'root', dbpassword: null}) - .help('h') - .alias('h', 'help'); + .example( + "$0 init --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306 --force", + "初始化code-push-server数据库" + ) + .example( + "$0 upgrade --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306", + "升级code-push-server数据库" + ) + .default({ + dbname: "codepush", + dbhost: "localhost", + dbuser: "root", + dbpassword: null, + }) + .help("h") + .alias("h", "help"); var argv = yargs.argv; var command = argv._[0]; -var dbname = argv.dbname ? argv.dbname : 'codepush'; -var dbhost = argv.dbhost ? argv.dbhost : 'localhost'; -var dbuser = argv.dbuser ? argv.dbuser : 'root'; +var dbname = argv.dbname ? argv.dbname : "codepush"; +var dbhost = argv.dbhost ? argv.dbhost : "localhost"; +var dbuser = argv.dbuser ? argv.dbuser : "root"; var dbport = argv.dbport ? argv.dbport : 3306; var dbpassword = argv.dbpassword; -if (command === 'init') { +if (command === "init") { var connection2; var connection = mysql.createConnection({ host: dbhost, user: dbuser, password: dbpassword, - port: dbport + port: dbport, }); - var createDatabaseSql = argv.force ? `CREATE DATABASE IF NOT EXISTS ${dbname}` : - `CREATE DATABASE ${dbname}`; + var createDatabaseSql = argv.force + ? `CREATE DATABASE IF NOT EXISTS ${dbname}` + : `CREATE DATABASE ${dbname}`; Promise.promisifyAll(connection); connection.connect(); - connection.queryAsync(createDatabaseSql) - .then(function(){ - connection2 = mysql.createConnection({ - host: dbhost, - user: dbuser, - password: dbpassword, - database: dbname, - multipleStatements: true, - port: dbport + connection + .queryAsync(createDatabaseSql) + .then(function () { + connection2 = mysql.createConnection({ + host: dbhost, + user: dbuser, + password: dbpassword, + database: dbname, + multipleStatements: true, + port: dbport, + }); + connection2.connect(); + Promise.promisifyAll(connection2); + return connection2; + }) + .then(function (connection2) { + var sql = fs.readFileSync( + path.resolve(__dirname, "../sql/codepush-all.sql"), + "utf-8" + ); + return connection2.queryAsync(sql); + }) + .then(function () { + console.log("success."); + }) + .catch(function (e) { + console.log(e); + }) + .finally(function () { + if (connection) connection.end(); + if (connection2) connection2.end(); }); - connection2.connect(); - Promise.promisifyAll(connection2); - return connection2; - }) - .then(function(connection2){ - var sql = fs.readFileSync(path.resolve(__dirname, '../sql/codepush-all.sql'), 'utf-8'); - return connection2.queryAsync(sql); - }) - .then(function(){ - console.log('success.'); - }) - .catch(function(e){ - console.log(e); - }) - .finally(function(){ - if(connection) connection.end(); - if(connection2) connection2.end() - }); -} else if (command == 'upgrade'){ +} else if (command == "upgrade") { try { var connection = mysql.createConnection({ host: dbhost, @@ -85,54 +100,86 @@ if (command === 'init') { password: dbpassword, database: dbname, multipleStatements: true, - port: dbport + port: dbport, }); Promise.promisifyAll(connection); - connection.connect() - } catch(e) { - console.error('connect mysql error, check params',e); + connection.connect(); + } catch (e) { + console.error("connect mysql error, check params", e); return; } - return Promise.coroutine(function*(val){ - var version_no = '0.0.1'; - var rs = yield connection.queryAsync('select `version` from `versions` where `type`=1 limit 1'); - version_no = _.get(rs,'0.version', '0.0.1'); + return Promise.coroutine(function* (val) { + var version_no = "0.0.1"; + var rs = yield connection.queryAsync( + "select `version` from `versions` where `type`=1 limit 1" + ); + version_no = _.get(rs, "0.version", "0.0.1"); if (version_no == constConfig.CURRENT_DB_VERSION) { - console.log('Everything up-to-date.'); + console.log("Everything up-to-date."); process.exit(0); } var allSqlFile = [ - {version:'0.2.14', 'path':path.resolve(__dirname, '../sql/codepush-v0.2.14-patch.sql')}, - {version:'0.2.15', 'path':path.resolve(__dirname, '../sql/codepush-v0.2.15-patch.sql')}, - {version:'0.3.0', 'path':path.resolve(__dirname, '../sql/codepush-v0.3.0-patch.sql')}, - {version:'0.4.0', 'path':path.resolve(__dirname, '../sql/codepush-v0.4.0-patch.sql')}, - {version:'0.5.0', 'path':path.resolve(__dirname, '../sql/codepush-v0.5.0-patch.sql')} + { + version: "0.2.14", + path: path.resolve( + __dirname, + "../sql/codepush-v0.2.14-patch.sql" + ), + }, + { + version: "0.2.15", + path: path.resolve( + __dirname, + "../sql/codepush-v0.2.15-patch.sql" + ), + }, + { + version: "0.3.0", + path: path.resolve( + __dirname, + "../sql/codepush-v0.3.0-patch.sql" + ), + }, + { + version: "0.4.0", + path: path.resolve( + __dirname, + "../sql/codepush-v0.4.0-patch.sql" + ), + }, + { + version: "0.5.0", + path: path.resolve( + __dirname, + "../sql/codepush-v0.5.0-patch.sql" + ), + }, ]; for (var i = 0; i < allSqlFile.length; i++) { - if(!_.gt(allSqlFile[i]['version'], version_no)) { + if (!_.gt(allSqlFile[i]["version"], version_no)) { continue; } try { - var sql = fs.readFileSync(allSqlFile[i]['path'], 'utf-8'); - console.log('exec sql file:' + allSqlFile[i]['path']); + var sql = fs.readFileSync(allSqlFile[i]["path"], "utf-8"); + console.log("exec sql file:" + allSqlFile[i]["path"]); yield connection.queryAsync(sql); - console.log('success exec sql file:' + allSqlFile[i]['path']); + console.log("success exec sql file:" + allSqlFile[i]["path"]); } catch (e) { - console.error('error exec sql file:' + allSqlFile[i]['path']); + console.error("error exec sql file:" + allSqlFile[i]["path"]); throw e; } } })() - .then(function(){ - console.log('Upgrade success.'); - }) - .catch(function(e){ - console.error(e); - }) - .finally(function(){ - if(connection) connection.end(); - }); + .then(function () { + console.log("Upgrade success."); + }) + .catch(function (e) { + console.error(e); + }) + .finally(function () { + if (connection) connection.end(); + }); } else { yargs.showHelp(); } diff --git a/core/middleware.js b/core/middleware.js index fc4054f2..848ced0e 100644 --- a/core/middleware.js +++ b/core/middleware.js @@ -1,119 +1,124 @@ -'use strict'; -var _ = require('lodash'); -var Promise = require('bluebird'); -var security = require('../core/utils/security'); -var models = require('../models'); -var moment = require('moment'); -var AppError = require('./app-error') +"use strict"; +var _ = require("lodash"); +var security = require("../core/utils/security"); +var models = require("../models"); +var moment = require("moment"); +var AppError = require("./app-error"); -var middleware = module.exports +var middleware = module.exports; var checkAuthToken = function (authToken) { var objToken = security.parseToken(authToken); return models.Users.findOne({ - where: {identical: objToken.identical} + where: { identical: objToken.identical }, }) - .then((users) => { - if (_.isEmpty(users)) { - throw new AppError.Unauthorized(); - } - var Sequelize = require('sequelize'); - return models.UserTokens.findOne({ - where: {tokens: authToken, uid: users.id, expires_at: { [Sequelize.Op.gt]: moment().format('YYYY-MM-DD HH:mm:ss') }} - }) - .then((tokenInfo) => { - if (_.isEmpty(tokenInfo)){ - throw new AppError.Unauthorized() + .then((users) => { + if (_.isEmpty(users)) { + throw new AppError.Unauthorized(); } - return users; + var Sequelize = require("sequelize"); + return models.UserTokens.findOne({ + where: { + tokens: authToken, + uid: users.id, + expires_at: { + [Sequelize.Op.gt]: moment().format("YYYY-MM-DD HH:mm:ss"), + }, + }, + }).then((tokenInfo) => { + if (_.isEmpty(tokenInfo)) { + throw new AppError.Unauthorized(); + } + return users; + }); }) - }).then((users) => { - return users; - }) -} + .then((users) => { + return users; + }); +}; var checkAccessToken = function (accessToken) { return new Promise((resolve, reject) => { if (_.isEmpty(accessToken)) { return reject(new AppError.Unauthorized()); } - var config = require('../core/config'); - var tokenSecret = _.get(config, 'jwt.tokenSecret'); - var jwt = require('jsonwebtoken'); + var config = require("../core/config"); + var tokenSecret = _.get(config, "jwt.tokenSecret"); + var jwt = require("jsonwebtoken"); try { var authData = jwt.verify(accessToken, tokenSecret); } catch (e) { return reject(new AppError.Unauthorized()); } - var uid = _.get(authData, 'uid', null); - var hash = _.get(authData, 'hash', null); + var uid = _.get(authData, "uid", null); + var hash = _.get(authData, "hash", null); if (parseInt(uid) > 0) { return models.Users.findOne({ - where: {id: uid} - }) - .then((users) => { - if (_.isEmpty(users)) { - throw new AppError.Unauthorized(); - } - if (!_.eq(hash, security.md5(users.get('ack_code')))){ - throw new AppError.Unauthorized(); - } - resolve(users); + where: { id: uid }, }) - .catch((e) => { - reject(e); - }); + .then((users) => { + if (_.isEmpty(users)) { + throw new AppError.Unauthorized(); + } + if (!_.eq(hash, security.md5(users.get("ack_code")))) { + throw new AppError.Unauthorized(); + } + resolve(users); + }) + .catch((e) => { + reject(e); + }); } else { reject(new AppError.Unauthorized()); } }); -} +}; -middleware.checkToken = function(req, res, next) { - var authArr = _.split(req.get('Authorization'), ' '); +middleware.checkToken = function (req, res, next) { + var authArr = _.split(req.get("Authorization"), " "); var authType = 1; var authToken = null; - if (_.eq(authArr[0], 'Bearer')) { + if (_.eq(authArr[0], "Bearer")) { authToken = authArr[1]; //Bearer if (authToken && authToken.length > 64) { authType = 2; } else { authType = 1; } - } else if(_.eq(authArr[0], 'Basic')) { + } else if (_.eq(authArr[0], "Basic")) { authType = 2; - var b = new Buffer(authArr[1], 'base64'); - var user = _.split(b.toString(), ':'); - authToken = _.get(user, '1'); + var b = new Buffer(authArr[1], "base64"); + var user = _.split(b.toString(), ":"); + authToken = _.get(user, "1"); } if (authToken && authType == 1) { checkAuthToken(authToken) - .then((users) => { - req.users = users; - next(); - return users; - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(e.status || 404).send(e.message); - } else { - next(e); - } - }); + .then((users) => { + req.users = users; + next(); + return users; + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(e.status || 404).send(e.message); + } else { + next(e); + } + }); } else if (authToken && authType == 2) { checkAccessToken(authToken) - .then((users) => { - req.users = users; - next(); - return users; - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(e.status || 404).send(e.message); - } else { - next(e); - } - }); + .then((users) => { + req.users = users; + next(); + return users; + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(e.status || 404).send(e.message); + } else { + next(e); + } + }); } else { res.send(new AppError.Unauthorized(`Auth type not supported.`)); } diff --git a/core/services/account-manager.js b/core/services/account-manager.js index 0eae4a9e..e8b6613c 100644 --- a/core/services/account-manager.js +++ b/core/services/account-manager.js @@ -1,45 +1,40 @@ -'use strict'; -var Promise = require('bluebird'); -var models = require('../../models'); -var _ = require('lodash'); -var validator = require('validator'); -var security = require('../utils/security'); -var factory = require('../utils/factory'); -var moment = require('moment'); -var EmailManager = require('./email-manager'); -var config = require('../config'); -var AppError = require('../app-error'); -var log4js = require('log4js'); +"use strict"; +var models = require("../../models"); +var _ = require("lodash"); +var validator = require("validator"); +var security = require("../utils/security"); +var factory = require("../utils/factory"); +var moment = require("moment"); +var EmailManager = require("./email-manager"); +var config = require("../config"); +var AppError = require("../app-error"); +var log4js = require("log4js"); var log = log4js.getLogger("cps:AccountManager"); -var proto = module.exports = function (){ - function AccountManager() { - - } +var proto = (module.exports = function () { + function AccountManager() {} AccountManager.__proto__ = proto; return AccountManager; -}; +}); -proto.collaboratorCan = function(uid, appName) { - return this.getCollaborator(uid, appName) - .then((data) => { +proto.collaboratorCan = function (uid, appName) { + return this.getCollaborator(uid, appName).then((data) => { if (!data) { log.debug(`collaboratorCan App ${appName} not exists.`); throw new AppError.AppError(`App ${appName} not exists.`); } - log.debug('collaboratorCan yes'); + log.debug("collaboratorCan yes"); return data; }); }; -proto.ownerCan = function(uid, appName) { - return this.getCollaborator(uid, appName) - .then((data) => { +proto.ownerCan = function (uid, appName) { + return this.getCollaborator(uid, appName).then((data) => { if (!data) { log.debug(`ownerCan App ${appName} not exists.`); throw new AppError.AppError(`App ${appName} not exists.`); } - if (!_.eq(_.get(data,'roles'), 'Owner') ) { + if (!_.eq(_.get(data, "roles"), "Owner")) { log.debug(`ownerCan Permission Deny, You are not owner!`); throw new AppError.AppError("Permission Deny, You are not owner!"); } @@ -52,8 +47,7 @@ proto.getCollaborator = function (uid, appName) { }; proto.findUserByEmail = function (email) { - return models.Users.findOne({where: {email: email}}) - .then((data) => { + return models.Users.findOne({ where: { email: email } }).then((data) => { if (_.isEmpty(data)) { throw new AppError.AppError(email + " does not exist."); } else { @@ -63,14 +57,16 @@ proto.findUserByEmail = function (email) { }; proto.getAllAccessKeyByUid = function (uid) { - return models.UserTokens.findAll({where: {uid: uid}, order:[['id', 'DESC']]}) - .then((tokens) => { - return _.map(tokens, function(v){ + return models.UserTokens.findAll({ + where: { uid: uid }, + order: [["id", "DESC"]], + }).then((tokens) => { + return _.map(tokens, function (v) { return { - name: '(hidden)', - createdTime: parseInt(moment(v.created_at).format('x')), + name: "(hidden)", + createdTime: parseInt(moment(v.created_at).format("x")), createdBy: v.created_by, - expires: parseInt(moment(v.expires_at).format('x')), + expires: parseInt(moment(v.expires_at).format("x")), friendlyName: v.name, description: v.description, }; @@ -80,84 +76,98 @@ proto.getAllAccessKeyByUid = function (uid) { proto.isExsitAccessKeyName = function (uid, friendlyName) { return models.UserTokens.findOne({ - where: {uid: uid, name: friendlyName} + where: { uid: uid, name: friendlyName }, }); }; -proto.createAccessKey = function (uid, newAccessKey, ttl, friendlyName, createdBy, description) { +proto.createAccessKey = function ( + uid, + newAccessKey, + ttl, + friendlyName, + createdBy, + description +) { return models.UserTokens.create({ uid: uid, name: friendlyName, tokens: newAccessKey, description: description, created_by: createdBy, - expires_at: moment().add(ttl/1000, 'seconds').format('YYYY-MM-DD HH:mm:ss'), - created_at: moment().format('YYYY-MM-DD HH:mm:ss'), + expires_at: moment() + .add(ttl / 1000, "seconds") + .format("YYYY-MM-DD HH:mm:ss"), + created_at: moment().format("YYYY-MM-DD HH:mm:ss"), }); }; -const LOGIN_LIMIT_PRE = 'LOGIN_LIMIT_PRE_'; +const LOGIN_LIMIT_PRE = "LOGIN_LIMIT_PRE_"; proto.login = function (account, password) { if (_.isEmpty(account)) { - return Promise.reject(new AppError.AppError("请您输入邮箱地址")) + return Promise.reject(new AppError.AppError("请您输入邮箱地址")); } if (_.isEmpty(password)) { - return Promise.reject(new AppError.AppError("请您输入密码")) + return Promise.reject(new AppError.AppError("请您输入密码")); } var where = {}; if (validator.isEmail(account)) { - where = {email: account}; - }else { - where = {username: account}; + where = { email: account }; + } else { + where = { username: account }; } - var tryLoginTimes = _.get(config, 'common.tryLoginTimes', 0); - return models.Users.findOne({where: where}) - .then((users) => { - if (_.isEmpty(users)) { - throw new AppError.AppError("您输入的邮箱或密码有误"); - } - return users; - }) - .then((users) => { - if (tryLoginTimes > 0) { - var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; - var client = factory.getRedisClient("default"); - return client.getAsync(loginKey) - .then((loginErrorTimes) => { - if (loginErrorTimes > tryLoginTimes) { - throw new AppError.AppError(`您输入密码错误次数超过限制,帐户已经锁定`); - } - return users; - }) - .finally(() => client.quit()); - } else { + var tryLoginTimes = _.get(config, "common.tryLoginTimes", 0); + return models.Users.findOne({ where: where }) + .then((users) => { + if (_.isEmpty(users)) { + throw new AppError.AppError("您输入的邮箱或密码有误"); + } return users; - } - }) - .then((users) => { - if (!security.passwordVerifySync(password, users.password)) { + }) + .then((users) => { if (tryLoginTimes > 0) { var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; var client = factory.getRedisClient("default"); - client.existsAsync(loginKey) - .then((isExists) => { - if (!isExists) { - var expires = moment().endOf('day').format('X') - moment().format('X'); - return client.setexAsync(loginKey, expires, 0); - } - return isExists; - }) - .then(() => { - return client.incrAsync(loginKey); - }) - .finally(() => client.quit()); + return client + .getAsync(loginKey) + .then((loginErrorTimes) => { + if (loginErrorTimes > tryLoginTimes) { + throw new AppError.AppError( + `您输入密码错误次数超过限制,帐户已经锁定` + ); + } + return users; + }) + .finally(() => client.quit()); + } else { + return users; } - throw new AppError.AppError("您输入的邮箱或密码有误"); - } else { - return users; - } - }); + }) + .then((users) => { + if (!security.passwordVerifySync(password, users.password)) { + if (tryLoginTimes > 0) { + var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; + var client = factory.getRedisClient("default"); + client + .existsAsync(loginKey) + .then((isExists) => { + if (!isExists) { + var expires = + moment().endOf("day").format("X") - moment().format("X"); + return client.setexAsync(loginKey, expires, 0); + } + return isExists; + }) + .then(() => { + return client.incrAsync(loginKey); + }) + .finally(() => client.quit()); + } + throw new AppError.AppError("您输入的邮箱或密码有误"); + } else { + return users; + } + }); }; const REGISTER_CODE = "REGISTER_CODE_"; @@ -168,96 +178,96 @@ proto.sendRegisterCode = function (email) { if (_.isEmpty(email)) { return Promise.reject(new AppError.AppError("请您输入邮箱地址")); } - return models.Users.findOne({where: {email: email}}) - .then((u) => { - if (u) { - throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); - } - }) - .then(() => { - //将token临时存储到redis - var token = security.randToken(40); - var client = factory.getRedisClient("default"); - return client.setexAsync(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) + return models.Users.findOne({ where: { email: email } }) + .then((u) => { + if (u) { + throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); + } + }) .then(() => { - return token; + //将token临时存储到redis + var token = security.randToken(40); + var client = factory.getRedisClient("default"); + return client + .setexAsync(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) + .then(() => { + return token; + }) + .finally(() => client.quit()); }) - .finally(() => client.quit()); - }) - .then((token) => { - //将token发送到用户邮箱 - var emailManager = new EmailManager(); - return emailManager.sendRegisterCode(email, token); - }) + .then((token) => { + //将token发送到用户邮箱 + var emailManager = new EmailManager(); + return emailManager.sendRegisterCode(email, token); + }); }; proto.checkRegisterCode = function (email, token) { - return models.Users.findOne({where: {email: email}}) - .then((u) => { - if (u) { - throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); - } - }) - .then(() => { - var registerKey = `${REGISTER_CODE}${security.md5(email)}`; - var client = factory.getRedisClient("default"); - return client.getAsync(registerKey) - .then((storageToken) => { - if (_.isEmpty(storageToken)) { - throw new AppError.AppError(`验证码已经失效,请您重新获取`); - } - if (!_.eq(token, storageToken)) { - client.ttlAsync(registerKey) - .then((ttl) => { - if (ttl > 0) { - return client.expireAsync(registerKey, ttl - EXPIRED_SPEED); - } - return ttl; - }) - .finally(() => client.quit()); - throw new AppError.AppError(`您输入的验证码不正确,请重新输入`); + return models.Users.findOne({ where: { email: email } }) + .then((u) => { + if (u) { + throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); } - return storageToken; }) - }) -} + .then(() => { + var registerKey = `${REGISTER_CODE}${security.md5(email)}`; + var client = factory.getRedisClient("default"); + return client.getAsync(registerKey).then((storageToken) => { + if (_.isEmpty(storageToken)) { + throw new AppError.AppError(`验证码已经失效,请您重新获取`); + } + if (!_.eq(token, storageToken)) { + client + .ttlAsync(registerKey) + .then((ttl) => { + if (ttl > 0) { + return client.expireAsync(registerKey, ttl - EXPIRED_SPEED); + } + return ttl; + }) + .finally(() => client.quit()); + throw new AppError.AppError(`您输入的验证码不正确,请重新输入`); + } + return storageToken; + }); + }); +}; proto.register = function (email, password) { - return models.Users.findOne({where: {email: email}}) - .then((u) => { - if (u) { - throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); - } - }) - .then(() => { - var identical = security.randToken(9); - return models.Users.create({ - email: email, - password: security.passwordHashSync(password), - identical: identical + return models.Users.findOne({ where: { email: email } }) + .then((u) => { + if (u) { + throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); + } + }) + .then(() => { + var identical = security.randToken(9); + return models.Users.create({ + email: email, + password: security.passwordHashSync(password), + identical: identical, + }); }); - }) -} +}; proto.changePassword = function (uid, oldPassword, newPassword) { if (!_.isString(newPassword) || newPassword.length < 6) { return Promise.reject(new AppError.AppError("请您输入6~20位长度的新密码")); } - return models.Users.findOne({where: {id: uid}}) - .then((u) => { - if (!u) { - throw new AppError.AppError(`未找到用户信息`); - } - return u; - }) - .then((u) => { - var isEq = security.passwordVerifySync(oldPassword, u.get('password')); - if (!isEq) { - throw new AppError.AppError(`您输入的旧密码不正确,请重新输入`); - } - u.set('password', security.passwordHashSync(newPassword)); - u.set('ack_code', security.randToken(5)); - return u.save(); - }); + return models.Users.findOne({ where: { id: uid } }) + .then((u) => { + if (!u) { + throw new AppError.AppError(`未找到用户信息`); + } + return u; + }) + .then((u) => { + var isEq = security.passwordVerifySync(oldPassword, u.get("password")); + if (!isEq) { + throw new AppError.AppError(`您输入的旧密码不正确,请重新输入`); + } + u.set("password", security.passwordHashSync(newPassword)); + u.set("ack_code", security.randToken(5)); + return u.save(); + }); }; - diff --git a/core/services/datacenter-manager.js b/core/services/datacenter-manager.js index c59d29ff..7ea5dfe0 100644 --- a/core/services/datacenter-manager.js +++ b/core/services/datacenter-manager.js @@ -1,33 +1,29 @@ -'use strict'; -var Promise = require('bluebird'); -var models = require('../../models'); -var _ = require('lodash'); -var fs = require('fs'); -var os = require('os'); -var security = require('../utils/security'); -var common = require('../utils/common'); -const MANIFEST_FILE_NAME = 'manifest.json'; -const CONTENTS_NAME = 'contents'; -var AppError = require('../app-error'); -var log4js = require('log4js'); +"use strict"; +var _ = require("lodash"); +var fs = require("fs"); +var os = require("os"); +var security = require("../utils/security"); +var common = require("../utils/common"); +const MANIFEST_FILE_NAME = "manifest.json"; +const CONTENTS_NAME = "contents"; +var AppError = require("../app-error"); +var log4js = require("log4js"); var log = log4js.getLogger("cps:DataCenterManager"); -var path = require('path'); +var path = require("path"); -var proto = module.exports = function (){ - function DataCenterManager() { - - } +var proto = (module.exports = function () { + function DataCenterManager() {} DataCenterManager.__proto__ = proto; return DataCenterManager; -}; +}); proto.getDataDir = function () { - var dataDir = _.get(require('../config'), 'common.dataDir', {}); + var dataDir = _.get(require("../config"), "common.dataDir", {}); if (_.isEmpty(dataDir)) { dataDir = os.tmpdir(); } return dataDir; -} +}; proto.hasPackageStoreSync = function (packageHash) { var dataDir = this.getDataDir(); @@ -35,28 +31,38 @@ proto.hasPackageStoreSync = function (packageHash) { var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); var contentPath = path.join(packageHashPath, CONTENTS_NAME); return fs.existsSync(manifestFile) && fs.existsSync(contentPath); -} +}; proto.getPackageInfo = function (packageHash) { - if (this.hasPackageStoreSync(packageHash)){ + if (this.hasPackageStoreSync(packageHash)) { var dataDir = this.getDataDir(); var packageHashPath = path.join(dataDir, packageHash); var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); var contentPath = path.join(packageHashPath, CONTENTS_NAME); - return this.buildPackageInfo(packageHash, packageHashPath, contentPath, manifestFile); + return this.buildPackageInfo( + packageHash, + packageHashPath, + contentPath, + manifestFile + ); } else { - throw new AppError.AppError('can\'t get PackageInfo'); + throw new AppError.AppError("can't get PackageInfo"); } -} +}; -proto.buildPackageInfo = function (packageHash, packageHashPath, contentPath, manifestFile) { +proto.buildPackageInfo = function ( + packageHash, + packageHashPath, + contentPath, + manifestFile +) { return { packageHash: packageHash, path: packageHashPath, contentPath: contentPath, - manifestFilePath:manifestFile - } -} + manifestFilePath: manifestFile, + }; +}; proto.validateStore = function (providePackageHash) { var dataDir = this.getDataDir(); @@ -67,57 +73,65 @@ proto.validateStore = function (providePackageHash) { log.debug(`validateStore providePackageHash not exist`); return Promise.resolve(false); } - return security.calcAllFileSha256(contentPath) - .then((manifestJson) => { + return security.calcAllFileSha256(contentPath).then((manifestJson) => { var packageHash = security.packageHashSync(manifestJson); log.debug(`validateStore packageHash:`, packageHash); try { var manifestJsonLocal = JSON.parse(fs.readFileSync(manifestFile)); - }catch(e) { + } catch (e) { log.debug(`validateStore manifestFile contents invilad`); return false; } var packageHashLocal = security.packageHashSync(manifestJsonLocal); log.debug(`validateStore packageHashLocal:`, packageHashLocal); - if (_.eq(providePackageHash, packageHash) && _.eq(providePackageHash, packageHashLocal)) { + if ( + _.eq(providePackageHash, packageHash) && + _.eq(providePackageHash, packageHashLocal) + ) { log.debug(`validateStore store files is ok`); return true; } log.debug(`validateStore store files broken`); return false; }); -} +}; proto.storePackage = function (sourceDst, force) { log.debug(`storePackage sourceDst:`, sourceDst); - if (_.isEmpty(force)){ + if (_.isEmpty(force)) { force = false; } var self = this; - return security.calcAllFileSha256(sourceDst) - .then((manifestJson) => { + return security.calcAllFileSha256(sourceDst).then((manifestJson) => { var packageHash = security.packageHashSync(manifestJson); - log.debug('storePackage manifestJson packageHash:', packageHash); + log.debug("storePackage manifestJson packageHash:", packageHash); var dataDir = self.getDataDir(); var packageHashPath = path.join(dataDir, packageHash); var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); var contentPath = path.join(packageHashPath, CONTENTS_NAME); - return self.validateStore(packageHash) - .then((isValidate) => { + return self.validateStore(packageHash).then((isValidate) => { if (!force && isValidate) { - return self.buildPackageInfo(packageHash, packageHashPath, contentPath, manifestFile); + return self.buildPackageInfo( + packageHash, + packageHashPath, + contentPath, + manifestFile + ); } else { log.debug(`storePackage cover from sourceDst:`, sourceDst); - return common.createEmptyFolder(packageHashPath) - .then(() => { - return common.copy(sourceDst, contentPath) - .then(() => { + return common.createEmptyFolder(packageHashPath).then(() => { + return common.copy(sourceDst, contentPath).then(() => { var manifestString = JSON.stringify(manifestJson); fs.writeFileSync(manifestFile, manifestString); - return self.buildPackageInfo(packageHash, packageHashPath, contentPath, manifestFile); + return self.buildPackageInfo( + packageHash, + packageHashPath, + contentPath, + manifestFile + ); }); }); } }); }); -} +}; diff --git a/core/services/deployments.js b/core/services/deployments.js index 6e0b19ea..dd06d956 100644 --- a/core/services/deployments.js +++ b/core/services/deployments.js @@ -1,32 +1,30 @@ -'use strict'; -var Promise = require('bluebird'); -var models = require('../../models'); -var security = require('../../core/utils/security'); -var common = require('../../core/utils/common'); -var PackageManager = require('./package-manager'); -var _ = require('lodash'); -var moment = require('moment'); -var AppError = require('../app-error'); -var log4js = require('log4js'); +"use strict"; +var Promise = require("bluebird"); +var models = require("../../models"); +var security = require("../../core/utils/security"); +var common = require("../../core/utils/common"); +var _ = require("lodash"); +var moment = require("moment"); +var AppError = require("../app-error"); +var log4js = require("log4js"); var log = log4js.getLogger("cps:deployments"); -var proto = module.exports = function (){ - function Deployments() { - - } +var proto = (module.exports = function () { + function Deployments() {} Deployments.__proto__ = proto; return Deployments; -}; +}); -proto.getAllPackageIdsByDeploymentsId = function(deploymentsId) { - return models.Packages.findAll({where: {deployment_id: deploymentsId}}); +proto.getAllPackageIdsByDeploymentsId = function (deploymentsId) { + return models.Packages.findAll({ where: { deployment_id: deploymentsId } }); }; proto.existDeloymentName = function (appId, name) { - return models.Deployments.findOne({where: {appid: appId, name: name}}) - .then((data) => { - if (!_.isEmpty(data)){ - throw new AppError.AppError(name + " name does Exist!") + return models.Deployments.findOne({ + where: { appid: appId, name: name }, + }).then((data) => { + if (!_.isEmpty(data)) { + throw new AppError.AppError(name + " name does Exist!"); } else { return data; } @@ -35,13 +33,11 @@ proto.existDeloymentName = function (appId, name) { proto.addDeloyment = function (name, appId, uid) { var self = this; - return models.Users.findById(uid) - .then((user) => { + return models.Users.findById(uid).then((user) => { if (_.isEmpty(user)) { - throw new AppError.AppError('can\'t find user'); + throw new AppError.AppError("can't find user"); } - return self.existDeloymentName(appId, name) - .then(() => { + return self.existDeloymentName(appId, name).then(() => { var identical = user.identical; var deploymentKey = security.randToken(28) + identical; return models.Deployments.create({ @@ -49,24 +45,24 @@ proto.addDeloyment = function (name, appId, uid) { name: name, deployment_key: deploymentKey, last_deployment_version_id: 0, - label_id: 0 + label_id: 0, }); }); }); }; proto.renameDeloymentByName = function (deploymentName, appId, newName) { - return this.existDeloymentName(appId, newName) - .then(() => { + return this.existDeloymentName(appId, newName).then(() => { return models.Deployments.update( - {name: newName}, - {where: {name: deploymentName,appid: appId}} - ) - .spread((affectedCount, affectedRow) => { + { name: newName }, + { where: { name: deploymentName, appid: appId } } + ).spread((affectedCount, affectedRow) => { if (_.gt(affectedCount, 0)) { - return {name: newName}; + return { name: newName }; } else { - throw new AppError.AppError(`does not find the deployment "${deploymentName}"`); + throw new AppError.AppError( + `does not find the deployment "${deploymentName}"` + ); } }); }); @@ -74,13 +70,14 @@ proto.renameDeloymentByName = function (deploymentName, appId, newName) { proto.deleteDeloymentByName = function (deploymentName, appId) { return models.Deployments.destroy({ - where: {name: deploymentName, appid: appId} - }) - .then((rowNum) => { + where: { name: deploymentName, appid: appId }, + }).then((rowNum) => { if (_.gt(rowNum, 0)) { - return {name: `${deploymentName}`}; + return { name: `${deploymentName}` }; } else { - throw new AppError.AppError(`does not find the deployment "${deploymentName}"`); + throw new AppError.AppError( + `does not find the deployment "${deploymentName}"` + ); } }); }; @@ -88,69 +85,90 @@ proto.deleteDeloymentByName = function (deploymentName, appId) { proto.findDeloymentByName = function (deploymentName, appId) { log.debug(`findDeloymentByName name:${deploymentName},appId: ${appId}`); return models.Deployments.findOne({ - where: {name: deploymentName, appid: appId} + where: { name: deploymentName, appid: appId }, }); }; proto.findPackagesAndOtherInfos = function (packageId) { return models.Packages.findOne({ - where: {id: packageId} - }) - .then((packageInfo) => { + where: { id: packageId }, + }).then((packageInfo) => { if (!packageInfo) { return null; } return Promise.props({ packageInfo: packageInfo, - packageDiffMap: models.PackagesDiff.findAll({where: {package_id: packageId}}) - .then((diffs) => { + packageDiffMap: models.PackagesDiff.findAll({ + where: { package_id: packageId }, + }).then((diffs) => { if (diffs.length > 0) { - return _.reduce(diffs, (result, v) => { - result[_.get(v, 'diff_against_package_hash')] = { - size: _.get(v, 'diff_size'), - url: common.getBlobDownloadUrl(_.get(v, 'diff_blob_url')), - }; - return result; - }, {}); + return _.reduce( + diffs, + (result, v) => { + result[_.get(v, "diff_against_package_hash")] = { + size: _.get(v, "diff_size"), + url: common.getBlobDownloadUrl(_.get(v, "diff_blob_url")), + }; + return result; + }, + {} + ); } return null; }), - userInfo: models.Users.findOne({where: {id: packageInfo.released_by}}), - deploymentsVersions: models.DeploymentsVersions.findById(packageInfo.deployment_version_id) + userInfo: models.Users.findOne({ + where: { id: packageInfo.released_by }, + }), + deploymentsVersions: models.DeploymentsVersions.findById( + packageInfo.deployment_version_id + ), }); }); }; proto.findDeloymentsPackages = function (deploymentsVersionsId) { var self = this; - return models.DeploymentsVersions.findOne({where: {id: deploymentsVersionsId}}) - .then((deploymentsVersionsInfo) => { + return models.DeploymentsVersions.findOne({ + where: { id: deploymentsVersionsId }, + }).then((deploymentsVersionsInfo) => { if (deploymentsVersionsInfo) { - return self.findPackagesAndOtherInfos(deploymentsVersionsInfo.current_package_id); + return self.findPackagesAndOtherInfos( + deploymentsVersionsInfo.current_package_id + ); } return null; }); }; -proto.formatPackage = function(packageVersion) { +proto.formatPackage = function (packageVersion) { if (!packageVersion) { return null; } return { description: _.get(packageVersion, "packageInfo.description"), isDisabled: false, - isMandatory: _.get(packageVersion, "packageInfo.is_mandatory") == 1 ? true : false, + isMandatory: + _.get(packageVersion, "packageInfo.is_mandatory") == 1 ? true : false, rollout: 100, appVersion: _.get(packageVersion, "deploymentsVersions.app_version"), packageHash: _.get(packageVersion, "packageInfo.package_hash"), - blobUrl: common.getBlobDownloadUrl(_.get(packageVersion, "packageInfo.blob_url")), + blobUrl: common.getBlobDownloadUrl( + _.get(packageVersion, "packageInfo.blob_url") + ), size: _.get(packageVersion, "packageInfo.size"), - manifestBlobUrl: common.getBlobDownloadUrl(_.get(packageVersion, "packageInfo.manifest_blob_url")), - diffPackageMap: _.get(packageVersion, 'packageDiffMap'), + manifestBlobUrl: common.getBlobDownloadUrl( + _.get(packageVersion, "packageInfo.manifest_blob_url") + ), + diffPackageMap: _.get(packageVersion, "packageDiffMap"), releaseMethod: _.get(packageVersion, "packageInfo.release_method"), - uploadTime: parseInt(moment(_.get(packageVersion, "packageInfo.updated_at")).format('x')), + uploadTime: parseInt( + moment(_.get(packageVersion, "packageInfo.updated_at")).format("x") + ), originalLabel: _.get(packageVersion, "packageInfo.original_label"), - originalDeployment: _.get(packageVersion, "packageInfo.original_deployment"), + originalDeployment: _.get( + packageVersion, + "packageInfo.original_deployment" + ), label: _.get(packageVersion, "packageInfo.label"), releasedBy: _.get(packageVersion, "userInfo.email"), }; @@ -158,74 +176,95 @@ proto.formatPackage = function(packageVersion) { proto.listDeloyments = function (appId) { var self = this; - return models.Deployments.findAll({where: {appid: appId}}) - .then((deploymentsInfos) => { - if (_.isEmpty(deploymentsInfos)) { - return []; + return models.Deployments.findAll({ where: { appid: appId } }).then( + (deploymentsInfos) => { + if (_.isEmpty(deploymentsInfos)) { + return []; + } + return Promise.map(deploymentsInfos, (v) => { + return self.listDeloyment(v); + }); } - return Promise.map(deploymentsInfos, (v) => { - return self.listDeloyment(v); - }) - }); + ); }; proto.listDeloyment = function (deploymentInfo) { const self = this; return Promise.props({ - createdTime: parseInt(moment(deploymentInfo.created_at).format('x')), + createdTime: parseInt(moment(deploymentInfo.created_at).format("x")), id: `${deploymentInfo.id}`, key: deploymentInfo.deployment_key, name: deploymentInfo.name, - package: self.findDeloymentsPackages([deploymentInfo.last_deployment_version_id]).then(self.formatPackage) + package: self + .findDeloymentsPackages([deploymentInfo.last_deployment_version_id]) + .then(self.formatPackage), }); -} +}; proto.getDeploymentHistory = function (deploymentId) { var self = this; - return models.DeploymentsHistory.findAll({where: {deployment_id: deploymentId}, order: [['id','desc']], limit: 15}) - .then((history) => { - return _.map(history, (v) => { return v.package_id}); + return models.DeploymentsHistory.findAll({ + where: { deployment_id: deploymentId }, + order: [["id", "desc"]], + limit: 15, }) - .then((packageIds) => { - return Promise.map(packageIds, (v) => { - return self.findPackagesAndOtherInfos(v).then(self.formatPackage); + .then((history) => { + return _.map(history, (v) => { + return v.package_id; + }); + }) + .then((packageIds) => { + return Promise.map(packageIds, (v) => { + return self.findPackagesAndOtherInfos(v).then(self.formatPackage); + }); }); - }); }; -proto.deleteDeploymentHistory = function(deploymentId) { +proto.deleteDeploymentHistory = function (deploymentId) { return models.sequelize.transaction((t) => { return Promise.all([ models.Deployments.update( - {last_deployment_version_id:0,label_id:0}, - {where: {id: deploymentId},transaction: t} + { last_deployment_version_id: 0, label_id: 0 }, + { where: { id: deploymentId }, transaction: t } ), - models.DeploymentsHistory.findAll({where: {deployment_id: deploymentId}, order: [['id','desc']], limit: 1000}) - .then((rs) => { + models.DeploymentsHistory.findAll({ + where: { deployment_id: deploymentId }, + order: [["id", "desc"]], + limit: 1000, + }).then((rs) => { return Promise.map(rs, (v) => { - return v.destroy({transaction: t}); + return v.destroy({ transaction: t }); }); }), - models.DeploymentsVersions.findAll({where: {deployment_id: deploymentId}, order: [['id','desc']], limit: 1000}) - .then((rs) => { + models.DeploymentsVersions.findAll({ + where: { deployment_id: deploymentId }, + order: [["id", "desc"]], + limit: 1000, + }).then((rs) => { return Promise.map(rs, (v) => { - return v.destroy({transaction: t}); + return v.destroy({ transaction: t }); }); }), - models.Packages.findAll({where: {deployment_id: deploymentId}, order: [['id','desc']], limit: 1000}) - .then((rs) => { + models.Packages.findAll({ + where: { deployment_id: deploymentId }, + order: [["id", "desc"]], + limit: 1000, + }).then((rs) => { return Promise.map(rs, (v) => { - return v.destroy({transaction: t}) - .then(() => { + return v.destroy({ transaction: t }).then(() => { return Promise.all([ - models.PackagesMetrics.destroy({where: {package_id: v.get('id')},transaction: t}), - models.PackagesDiff.destroy({where: {package_id: v.get('id')},transaction: t}) + models.PackagesMetrics.destroy({ + where: { package_id: v.get("id") }, + transaction: t, + }), + models.PackagesDiff.destroy({ + where: { package_id: v.get("id") }, + transaction: t, + }), ]); }); }); - }) + }), ]); }); -} - - +}; diff --git a/core/services/email-manager.js b/core/services/email-manager.js index 30aa69f5..613b61ba 100644 --- a/core/services/email-manager.js +++ b/core/services/email-manager.js @@ -1,10 +1,5 @@ "use strict"; -var Promise = require("bluebird"); -var models = require("../../models"); var _ = require("lodash"); -var validator = require("validator"); -var security = require("../utils/security"); -var moment = require("moment"); var nodemailer = require("nodemailer"); var config = require("../config"); diff --git a/core/utils/common.js b/core/utils/common.js index 6d221535..aa26398c 100644 --- a/core/utils/common.js +++ b/core/utils/common.js @@ -1,85 +1,116 @@ -'use strict'; -var Promise = require('bluebird'); +"use strict"; var fs = require("fs"); var fsextra = require("fs-extra"); -var extract = require('extract-zip') -var config = require('../config'); -var _ = require('lodash'); -var validator = require('validator'); +var extract = require("extract-zip"); +var config = require("../config"); +var _ = require("lodash"); +var validator = require("validator"); var qiniu = require("qiniu"); -var upyun = require('upyun'); +var upyun = require("upyun"); var common = {}; -var AppError = require('../app-error'); +var AppError = require("../app-error"); var jschardet = require("jschardet"); -var log4js = require('log4js'); -var path = require('path'); +var log4js = require("log4js"); +var path = require("path"); var log = log4js.getLogger("cps:utils:common"); module.exports = common; -common.detectIsTextFile = function(filePath) { - var fd = fs.openSync(filePath, 'r'); +common.detectIsTextFile = function (filePath) { + var fd = fs.openSync(filePath, "r"); var buffer = new Buffer(4096); fs.readSync(fd, buffer, 0, 4096, 0); fs.closeSync(fd); var rs = jschardet.detect(buffer); - log.debug('detectIsTextFile:', filePath, rs); + log.debug("detectIsTextFile:", filePath, rs); if (rs.confidence == 1) { return true; } return false; -} +}; common.parseVersion = function (versionNo) { - var version = '0'; + var version = "0"; var data = null; - if (data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) { + if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { // "1.2.3" - version = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - } else if (data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})$/)) { + version = + data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); + } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})$/))) { // "1.2" - version = data[1] + _.padStart(data[2], 5, '0') + _.padStart('0', 10, '0'); + version = data[1] + _.padStart(data[2], 5, "0") + _.padStart("0", 10, "0"); } return version; }; common.validatorVersion = function (versionNo) { var flag = false; - var min = '0'; - var max = '9999999999999999999'; + var min = "0"; + var max = "9999999999999999999"; var data = null; if (versionNo == "*") { // "*" flag = true; - } else if (data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) { + } else if ( + (data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) + ) { // "1.2.3" flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - max = data[1] + _.padStart(data[2], 5, '0') + _.padStart((parseInt(data[3])+1), 10, '0'); - } else if (data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})(\.\*){0,1}$/)) { + min = data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); + max = + data[1] + + _.padStart(data[2], 5, "0") + + _.padStart(parseInt(data[3]) + 1, 10, "0"); + } else if ( + (data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})(\.\*){0,1}$/)) + ) { // "1.2" "1.2.*" flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart('0', 10, '0'); - max = data[1] + _.padStart((parseInt(data[2])+1), 5, '0') + _.padStart('0', 10, '0'); - } else if (data = versionNo.match(/^\~([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) { + min = data[1] + _.padStart(data[2], 5, "0") + _.padStart("0", 10, "0"); + max = + data[1] + + _.padStart(parseInt(data[2]) + 1, 5, "0") + + _.padStart("0", 10, "0"); + } else if ( + (data = versionNo.match(/^\~([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) + ) { //"~1.2.3" flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - max = data[1] + _.padStart((parseInt(data[2])+1), 5, '0') + _.padStart('0', 10, '0'); - } else if (data = versionNo.match(/^\^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) { + min = data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); + max = + data[1] + + _.padStart(parseInt(data[2]) + 1, 5, "0") + + _.padStart("0", 10, "0"); + } else if ( + (data = versionNo.match(/^\^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) + ) { //"^1.2.3" flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - max = _.toString((parseInt(data[1])+1)) + _.padStart(0, 5, '0') + _.padStart('0', 10, '0'); - } else if (data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?-\s?([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) { + min = data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); + max = + _.toString(parseInt(data[1]) + 1) + + _.padStart(0, 5, "0") + + _.padStart("0", 10, "0"); + } else if ( + (data = versionNo.match( + /^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?-\s?([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/ + )) + ) { // "1.2.3 - 1.2.7" flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - max = data[4] + _.padStart(data[5], 5, '0') + _.padStart((parseInt(data[6])+1), 10, '0'); - } else if (data = versionNo.match(/^>=([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?<([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) { + min = data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); + max = + data[4] + + _.padStart(data[5], 5, "0") + + _.padStart(parseInt(data[6]) + 1, 10, "0"); + } else if ( + (data = versionNo.match( + /^>=([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?<([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/ + )) + ) { // ">=1.2.3 <1.2.7" flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - max = data[4] + _.padStart(data[5], 5, '0') + _.padStart(data[6], 10, '0'); + min = data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); + max = data[4] + _.padStart(data[5], 5, "0") + _.padStart(data[6], 10, "0"); } return [flag, min, max]; }; @@ -88,26 +119,27 @@ common.createFileFromRequest = function (url, filePath) { return new Promise((resolve, reject) => { fs.exists(filePath, function (exists) { if (!exists) { - var request = require('request'); - log.debug(`createFileFromRequest url:${url}`) - request(url).on('error', function (error) { - reject(error); - }) - .on('response', function (response) { - if (response.statusCode == 200) { - let stream = fs.createWriteStream(filePath); - response.pipe(stream); - stream.on('close',function(){ - resolve(null); - }); - stream.on('error', function (error) { - reject(error) - }) - } else { - reject({message:'request fail'}) - } - }); - }else { + var request = require("request"); + log.debug(`createFileFromRequest url:${url}`); + request(url) + .on("error", function (error) { + reject(error); + }) + .on("response", function (response) { + if (response.statusCode == 200) { + let stream = fs.createWriteStream(filePath); + response.pipe(stream); + stream.on("close", function () { + resolve(null); + }); + stream.on("error", function (error) { + reject(error); + }); + } else { + reject({ message: "request fail" }); + } + }); + } else { resolve(null); } }); @@ -115,17 +147,19 @@ common.createFileFromRequest = function (url, filePath) { }; common.copySync = function (sourceDst, targertDst) { - return fsextra.copySync(sourceDst, targertDst, {overwrite: true}); + return fsextra.copySync(sourceDst, targertDst, { overwrite: true }); }; common.copy = function (sourceDst, targertDst) { return new Promise((resolve, reject) => { - fsextra.copy(sourceDst, targertDst, {overwrite: true}, function (err) { + fsextra.copy(sourceDst, targertDst, { overwrite: true }, function (err) { if (err) { log.error(err); reject(err); } else { - log.debug(`copy success sourceDst:${sourceDst} targertDst:${targertDst}`); + log.debug( + `copy success sourceDst:${sourceDst} targertDst:${targertDst}` + ); resolve(); } }); @@ -134,12 +168,14 @@ common.copy = function (sourceDst, targertDst) { common.move = function (sourceDst, targertDst) { return new Promise((resolve, reject) => { - fsextra.move(sourceDst, targertDst, {overwrite: true}, function (err) { + fsextra.move(sourceDst, targertDst, { overwrite: true }, function (err) { if (err) { log.error(err); reject(err); } else { - log.debug(`move success sourceDst:${sourceDst} targertDst:${targertDst}`); + log.debug( + `move success sourceDst:${sourceDst} targertDst:${targertDst}` + ); resolve(); } }); @@ -152,7 +188,7 @@ common.deleteFolder = function (folderPath) { if (err) { log.error(err); reject(err); - }else { + } else { log.debug(`deleteFolder delete ${folderPath} success.`); resolve(null); } @@ -167,8 +203,7 @@ common.deleteFolderSync = function (folderPath) { common.createEmptyFolder = function (folderPath) { return new Promise((resolve, reject) => { log.debug(`createEmptyFolder Create dir ${folderPath}`); - return common.deleteFolder(folderPath) - .then((data) => { + return common.deleteFolder(folderPath).then((data) => { fsextra.mkdirs(folderPath, (err) => { if (err) { log.error(err); @@ -194,12 +229,12 @@ common.unzipFile = function (zipFile, outputPath) { log.debug(`Pass unzipFile file ${zipFile}`); } catch (e) { log.error(e); - return reject(new AppError.AppError(e.message)) + return reject(new AppError.AppError(e.message)); } - extract(zipFile, {dir: outputPath}, function(err){ + extract(zipFile, { dir: outputPath }, function (err) { if (err) { log.error(err); - reject(new AppError.AppError(`it's not a zipFile`)) + reject(new AppError.AppError(`it's not a zipFile`)); } else { log.debug(`unzipFile success`); resolve(outputPath); @@ -210,25 +245,25 @@ common.unzipFile = function (zipFile, outputPath) { common.getUploadTokenQiniu = function (mac, bucket, key) { var options = { - scope: bucket + ":" + key - } + scope: bucket + ":" + key, + }; var putPolicy = new qiniu.rs.PutPolicy(options); return putPolicy.uploadToken(mac); }; common.uploadFileToStorage = function (key, filePath) { - var storageType = _.get(config, 'common.storageType'); - if ( storageType === 'local') { + var storageType = _.get(config, "common.storageType"); + if (storageType === "local") { return common.uploadFileToLocal(key, filePath); - } else if (storageType === 's3') { + } else if (storageType === "s3") { return common.uploadFileToS3(key, filePath); - } else if (storageType === 'oss') { + } else if (storageType === "oss") { return common.uploadFileToOSS(key, filePath); - } else if (storageType === 'qiniu') { + } else if (storageType === "qiniu") { return common.uploadFileToQiniu(key, filePath); - } else if (storageType === 'upyun') { + } else if (storageType === "upyun") { return common.uploadFileToUpyun(key, filePath); - } else if (storageType === 'tencentcloud') { + } else if (storageType === "tencentcloud") { return common.uploadFileToTencentCloud(key, filePath); } throw new AppError.AppError(`${storageType} storageType does not support.`); @@ -236,13 +271,13 @@ common.uploadFileToStorage = function (key, filePath) { common.uploadFileToLocal = function (key, filePath) { return new Promise((resolve, reject) => { - var storageDir = _.get(config, 'local.storageDir'); + var storageDir = _.get(config, "local.storageDir"); if (!storageDir) { - throw new AppError.AppError('please set config local storageDir'); + throw new AppError.AppError("please set config local storageDir"); } if (key.length < 3) { log.error(`generate key is too short, key value:${key}`); - throw new AppError.AppError('generate key is too short.'); + throw new AppError.AppError("generate key is too short."); } try { log.debug(`uploadFileToLocal check directory ${storageDir} fs.R_OK`); @@ -269,7 +304,7 @@ common.uploadFileToLocal = function (key, filePath) { log.debug(`uploadFileToLocal mkdir:${finalDir}`); } try { - fs.accessSync(filePath, fs.R_OK); + fs.accessSync(filePath, fs.R_OK); } catch (e) { log.error(e); throw new AppError.AppError(e.message); @@ -280,7 +315,7 @@ common.uploadFileToLocal = function (key, filePath) { log.error(e); throw e; } - fsextra.copy(filePath, fileName,(err) => { + fsextra.copy(filePath, fileName, (err) => { if (err) { log.error(new AppError.AppError(err.message)); return reject(new AppError.AppError(err.message)); @@ -293,20 +328,21 @@ common.uploadFileToLocal = function (key, filePath) { common.getBlobDownloadUrl = function (blobUrl) { var fileName = blobUrl; - var storageType = _.get(config, 'common.storageType'); + var storageType = _.get(config, "common.storageType"); var downloadUrl = _.get(config, `${storageType}.downloadUrl`); - if ( storageType === 'local') { - fileName = blobUrl.substr(0, 2).toLowerCase() + '/' + blobUrl; + if (storageType === "local") { + fileName = blobUrl.substr(0, 2).toLowerCase() + "/" + blobUrl; } if (!validator.isURL(downloadUrl)) { - var e = new AppError.AppError(`Please config ${storageType}.downloadUrl in config.js`); + var e = new AppError.AppError( + `Please config ${storageType}.downloadUrl in config.js` + ); log.error(e); throw e; } - return `${downloadUrl}/${fileName}` + return `${downloadUrl}/${fileName}`; }; - common.uploadFileToQiniu = function (key, filePath) { return new Promise((resolve, reject) => { var accessKey = _.get(config, "qiniu.accessKey"); @@ -317,11 +353,11 @@ common.uploadFileToQiniu = function (key, filePath) { var bucketManager = new qiniu.rs.BucketManager(mac, conf); bucketManager.stat(bucket, key, (respErr, respBody, respInfo) => { if (respErr) { - log.debug('uploadFileToQiniu file stat:', respErr); + log.debug("uploadFileToQiniu file stat:", respErr); return reject(new AppError.AppError(respErr.message)); } - log.debug('uploadFileToQiniu file stat respBody:', respBody); - log.debug('uploadFileToQiniu file stat respInfo:', respInfo); + log.debug("uploadFileToQiniu file stat respBody:", respBody); + log.debug("uploadFileToQiniu file stat respInfo:", respInfo); if (respInfo.statusCode == 200) { resolve(respBody.hash); } else { @@ -332,22 +368,28 @@ common.uploadFileToQiniu = function (key, filePath) { } var formUploader = new qiniu.form_up.FormUploader(conf); var putExtra = new qiniu.form_up.PutExtra(); - formUploader.putFile(uploadToken, key, filePath, putExtra, (respErr, respBody, respInfo) => { - if(respErr) { - log.error('uploadFileToQiniu putFile:', respErr); - // 上传失败, 处理返回代码 - return reject(new AppError.AppError(JSON.stringify(respErr))); - } else { - log.debug('uploadFileToQiniu putFile respBody:', respBody); - log.debug('uploadFileToQiniu putFile respInfo:', respInfo); - // 上传成功, 处理返回值 - if (respInfo.statusCode == 200) { - return resolve(respBody.hash); + formUploader.putFile( + uploadToken, + key, + filePath, + putExtra, + (respErr, respBody, respInfo) => { + if (respErr) { + log.error("uploadFileToQiniu putFile:", respErr); + // 上传失败, 处理返回代码 + return reject(new AppError.AppError(JSON.stringify(respErr))); } else { - return reject(new AppError.AppError(respBody.error)); + log.debug("uploadFileToQiniu putFile respBody:", respBody); + log.debug("uploadFileToQiniu putFile respInfo:", respInfo); + // 上传成功, 处理返回值 + if (respInfo.statusCode == 200) { + return resolve(respBody.hash); + } else { + return reject(new AppError.AppError(respBody.error)); + } } } - }); + ); } }); }); @@ -360,89 +402,96 @@ common.uploadFileToUpyun = function (key, filePath) { var storageDir = _.get(config, "upyun.storageDir", ""); var service = new upyun.Service(serviceName, operatorName, operatorPass); var client = new upyun.Client(service); - return ( - new Promise((resolve, reject) => { - client.makeDir(storageDir).then(result => { - if(!storageDir) { - reject(new AppError.AppError('Please config the upyun remoteDir!')); + return new Promise((resolve, reject) => { + client + .makeDir(storageDir) + .then((result) => { + if (!storageDir) { + reject(new AppError.AppError("Please config the upyun remoteDir!")); return; } - let remotePath = storageDir + '/' + key; - log.debug('uploadFileToUpyun remotePath:', remotePath); - log.debug('uploadFileToUpyun mkDir result:', result); - client.putFile(remotePath, fs.createReadStream(filePath)).then(data => { - log.debug('uploadFileToUpyun putFile response:', data); - if(data) { - resolve(key) - } else { - log.debug('uploadFileToUpyun putFile failed!', data); - reject(new AppError.AppError('Upload file to upyun failed!')); - } - }).catch(e1 => { - log.debug('uploadFileToUpyun putFile exception e1:', e1); - reject(new AppError.AppError(JSON.stringify(e1))); - }) - }).catch(e => { - log.debug('uploadFileToUpyun putFile exception e:', e); + let remotePath = storageDir + "/" + key; + log.debug("uploadFileToUpyun remotePath:", remotePath); + log.debug("uploadFileToUpyun mkDir result:", result); + client + .putFile(remotePath, fs.createReadStream(filePath)) + .then((data) => { + log.debug("uploadFileToUpyun putFile response:", data); + if (data) { + resolve(key); + } else { + log.debug("uploadFileToUpyun putFile failed!", data); + reject(new AppError.AppError("Upload file to upyun failed!")); + } + }) + .catch((e1) => { + log.debug("uploadFileToUpyun putFile exception e1:", e1); + reject(new AppError.AppError(JSON.stringify(e1))); + }); + }) + .catch((e) => { + log.debug("uploadFileToUpyun putFile exception e:", e); reject(new AppError.AppError(JSON.stringify(e))); }); - }) - ); + }); }; common.uploadFileToS3 = function (key, filePath) { - var AWS = require('aws-sdk'); - return ( - new Promise((resolve, reject) => { - AWS.config.update({ - accessKeyId: _.get(config, 's3.accessKeyId'), - secretAccessKey: _.get(config, 's3.secretAccessKey'), - sessionToken: _.get(config, 's3.sessionToken'), - region: _.get(config, 's3.region') - }); - var s3 = new AWS.S3({ - params: {Bucket: _.get(config, 's3.bucketName')} - }); - fs.readFile(filePath, (err, data) => { - s3.upload({ + var AWS = require("aws-sdk"); + return new Promise((resolve, reject) => { + AWS.config.update({ + accessKeyId: _.get(config, "s3.accessKeyId"), + secretAccessKey: _.get(config, "s3.secretAccessKey"), + sessionToken: _.get(config, "s3.sessionToken"), + region: _.get(config, "s3.region"), + }); + var s3 = new AWS.S3({ + params: { Bucket: _.get(config, "s3.bucketName") }, + }); + fs.readFile(filePath, (err, data) => { + s3.upload( + { Key: key, Body: data, - ACL:'public-read', - }, (err, response) => { - if(err) { + ACL: "public-read", + }, + (err, response) => { + if (err) { reject(new AppError.AppError(JSON.stringify(err))); } else { - resolve(response.ETag) + resolve(response.ETag); } - }) - }); - }) - ); + } + ); + }); + }); }; common.uploadFileToOSS = function (key, filePath) { - var ALY = require('aliyun-sdk'); - var ossStream = require('aliyun-oss-upload-stream')(new ALY.OSS({ - accessKeyId: _.get(config, 'oss.accessKeyId'), - secretAccessKey: _.get(config, 'oss.secretAccessKey'), - endpoint: _.get(config, 'oss.endpoint'), - apiVersion: '2013-10-15', - })); - if (!_.isEmpty(_.get(config, 'oss.prefix', ""))) { - key = `${_.get(config, 'oss.prefix')}/${key}`; + var ALY = require("aliyun-sdk"); + var ossStream = require("aliyun-oss-upload-stream")( + new ALY.OSS({ + accessKeyId: _.get(config, "oss.accessKeyId"), + secretAccessKey: _.get(config, "oss.secretAccessKey"), + endpoint: _.get(config, "oss.endpoint"), + apiVersion: "2013-10-15", + }) + ); + if (!_.isEmpty(_.get(config, "oss.prefix", ""))) { + key = `${_.get(config, "oss.prefix")}/${key}`; } var upload = ossStream.upload({ - Bucket: _.get(config, 'oss.bucketName'), + Bucket: _.get(config, "oss.bucketName"), Key: key, }); return new Promise((resolve, reject) => { - upload.on('error', (error) => { + upload.on("error", (error) => { log.debug("uploadFileToOSS", error); reject(error); }); - upload.on('uploaded', (details) => { + upload.on("uploaded", (details) => { log.debug("uploadFileToOSS", details); resolve(details.ETag); }); @@ -452,33 +501,36 @@ common.uploadFileToOSS = function (key, filePath) { common.uploadFileToTencentCloud = function (key, filePath) { return new Promise((resolve, reject) => { - var COS = require('cos-nodejs-sdk-v5'); + var COS = require("cos-nodejs-sdk-v5"); var cosIn = new COS({ - SecretId: _.get(config, 'tencentcloud.accessKeyId'), - SecretKey: _.get(config, 'tencentcloud.secretAccessKey') + SecretId: _.get(config, "tencentcloud.accessKeyId"), + SecretKey: _.get(config, "tencentcloud.secretAccessKey"), }); - cosIn.sliceUploadFile({ - Bucket: _.get(config, 'tencentcloud.bucketName'), - Region: _.get(config, 'tencentcloud.region'), + cosIn.sliceUploadFile( + { + Bucket: _.get(config, "tencentcloud.bucketName"), + Region: _.get(config, "tencentcloud.region"), Key: key, - FilePath: filePath - }, function (err, data) { - log.debug("uploadFileToTencentCloud", err, data); - if (err) { - reject(new AppError.AppError(JSON.stringify(err))); - }else { - resolve(data.Key); + FilePath: filePath, + }, + function (err, data) { + log.debug("uploadFileToTencentCloud", err, data); + if (err) { + reject(new AppError.AppError(JSON.stringify(err))); + } else { + resolve(data.Key); + } } - }); + ); }); -} +}; common.diffCollectionsSync = function (collection1, collection2) { var diffFiles = []; var collection1Only = []; var newCollection2 = Object.assign({}, collection2); if (collection1 instanceof Object) { - for(var key of Object.keys(collection1)) { + for (var key of Object.keys(collection1)) { if (_.isEmpty(newCollection2[key])) { collection1Only.push(key); } else { @@ -489,5 +541,9 @@ common.diffCollectionsSync = function (collection1, collection2) { } } } - return {diff:diffFiles, collection1Only: collection1Only, collection2Only: Object.keys(newCollection2)} + return { + diff: diffFiles, + collection1Only: collection1Only, + collection2Only: Object.keys(newCollection2), + }; }; diff --git a/core/utils/security.js b/core/utils/security.js index a4054acd..dd8e2f63 100644 --- a/core/utils/security.js +++ b/core/utils/security.js @@ -1,98 +1,97 @@ -'use strict'; -var bcrypt = require('bcryptjs'); -var crypto = require('crypto'); -var fs = require('fs'); -var Promise = require('bluebird'); -var qetag = require('../utils/qetag'); -var _ = require('lodash'); -var log4js = require('log4js'); +"use strict"; +var bcrypt = require("bcryptjs"); +var crypto = require("crypto"); +var fs = require("fs"); +var qetag = require("../utils/qetag"); +var _ = require("lodash"); +var log4js = require("log4js"); var log = log4js.getLogger("cps:utils:security"); -var AppError = require('../app-error'); +var AppError = require("../app-error"); -var randToken = require('rand-token').generator({ - chars: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', - source: crypto.randomBytes +var randToken = require("rand-token").generator({ + chars: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", + source: crypto.randomBytes, }); var security = {}; module.exports = security; security.md5 = function (str) { - var md5sum = crypto.createHash('md5'); + var md5sum = crypto.createHash("md5"); md5sum.update(str); - str = md5sum.digest('hex'); + str = md5sum.digest("hex"); return str; -} +}; -security.passwordHashSync = function(password){ +security.passwordHashSync = function (password) { return bcrypt.hashSync(password, bcrypt.genSaltSync(12)); -} +}; -security.passwordVerifySync = function(password, hash){ - return bcrypt.compareSync(password, hash) -} +security.passwordVerifySync = function (password, hash) { + return bcrypt.compareSync(password, hash); +}; -security.randToken = function(num) { +security.randToken = function (num) { return randToken.generate(num); -} +}; -security.parseToken = function(token) { - return {identical: token.substr(-9,9), token:token.substr(0,28)} -} +security.parseToken = function (token) { + return { identical: token.substr(-9, 9), token: token.substr(0, 28) }; +}; security.fileSha256 = function (file) { return new Promise((resolve, reject) => { var rs = fs.createReadStream(file); - var hash = crypto.createHash('sha256'); - rs.on('data', hash.update.bind(hash)); - rs.on('error', (e) => { + var hash = crypto.createHash("sha256"); + rs.on("data", hash.update.bind(hash)); + rs.on("error", (e) => { reject(e); }); - rs.on('end', () => { - resolve(hash.digest('hex')); + rs.on("end", () => { + resolve(hash.digest("hex")); }); }); -} +}; security.stringSha256Sync = function (contents) { - var sha256 = crypto.createHash('sha256'); + var sha256 = crypto.createHash("sha256"); sha256.update(contents); - return sha256.digest('hex'); -} + return sha256.digest("hex"); +}; security.packageHashSync = function (jsonData) { var sortedArr = security.sortJsonToArr(jsonData); var manifestData = _.filter(sortedArr, (v) => { return !security.isPackageHashIgnored(v.path); }).map((v) => { - return v.path + ':' + v.hash; + return v.path + ":" + v.hash; }); - log.debug('packageHashSync manifestData:', manifestData); + log.debug("packageHashSync manifestData:", manifestData); var manifestString = JSON.stringify(manifestData.sort()); - manifestString = _.replace(manifestString, /\\\//g, '/'); - log.debug('packageHashSync manifestString:', manifestString); + manifestString = _.replace(manifestString, /\\\//g, "/"); + log.debug("packageHashSync manifestString:", manifestString); return security.stringSha256Sync(manifestString); -} +}; //参数为buffer或者readableStream或者文件路径 security.qetag = function (buffer) { - if (typeof buffer === 'string') { + if (typeof buffer === "string") { try { log.debug(`Check upload file ${buffer} fs.R_OK`); fs.accessSync(buffer, fs.R_OK); log.debug(`Pass upload file ${buffer}`); } catch (e) { log.error(e); - return Promise.reject(new AppError.AppError(e.message)) + return Promise.reject(new AppError.AppError(e.message)); } } - log.debug(`generate file identical`) + log.debug(`generate file identical`); return new Promise((resolve, reject) => { - qetag(buffer, (data)=>{ - log.debug('identical:', data); - resolve(data) + qetag(buffer, (data) => { + log.debug("identical:", data); + resolve(data); }); }); -} +}; security.sha256AllFiles = function (files) { return new Promise((resolve, reject) => { @@ -100,8 +99,7 @@ security.sha256AllFiles = function (files) { var length = files.length; var count = 0; files.forEach((file) => { - security.fileSha256(file) - .then((hash) => { + security.fileSha256(file).then((hash) => { results[file] = hash; count++; if (count == length) { @@ -110,12 +108,12 @@ security.sha256AllFiles = function (files) { }); }); }); -} +}; security.uploadPackageType = function (directoryPath) { return new Promise((resolve, reject) => { var recursive = require("recursive-readdir"); - var path = require('path'); + var path = require("path"); var slash = require("slash"); recursive(directoryPath, (err, files) => { if (err) { @@ -126,9 +124,9 @@ security.uploadPackageType = function (directoryPath) { log.debug(`uploadPackageType empty files`); reject(new AppError.AppError("empty files")); } else { - var constName = require('../const'); - const AREGEX=/android\.bundle/ - const AREGEX_IOS=/main\.jsbundle/ + var constName = require("../const"); + const AREGEX = /android\.bundle/; + const AREGEX_IOS = /main\.jsbundle/; var packageType = 0; _.forIn(files, function (value) { if (AREGEX.test(value)) { @@ -146,7 +144,7 @@ security.uploadPackageType = function (directoryPath) { } }); }); -} +}; // some files are ignored in calc hash in client sdk // https://github.com/Microsoft/react-native-code-push/pull/974/files#diff-21b650f88429c071b217d46243875987R15 @@ -155,13 +153,15 @@ security.isHashIgnored = function (relativePath) { return true; } - const IgnoreMacOSX = '__MACOSX/'; - const IgnoreDSStore = '.DS_Store'; + const IgnoreMacOSX = "__MACOSX/"; + const IgnoreDSStore = ".DS_Store"; - return relativePath.startsWith(IgnoreMacOSX) - || relativePath === IgnoreDSStore - || relativePath.endsWith(IgnoreDSStore); -} + return ( + relativePath.startsWith(IgnoreMacOSX) || + relativePath === IgnoreDSStore || + relativePath.endsWith(IgnoreDSStore) + ); +}; security.isPackageHashIgnored = function (relativePath) { if (!relativePath) { @@ -170,17 +170,18 @@ security.isPackageHashIgnored = function (relativePath) { // .codepushrelease contains code sign JWT // it should be ignored in package hash but need to be included in package manifest - const IgnoreCodePushMetadata = '.codepushrelease'; - return relativePath === IgnoreCodePushMetadata - || relativePath.endsWith(IgnoreCodePushMetadata) - || security.isHashIgnored(relativePath); -} - + const IgnoreCodePushMetadata = ".codepushrelease"; + return ( + relativePath === IgnoreCodePushMetadata || + relativePath.endsWith(IgnoreCodePushMetadata) || + security.isHashIgnored(relativePath) + ); +}; security.calcAllFileSha256 = function (directoryPath) { return new Promise((resolve, reject) => { var recursive = require("recursive-readdir"); - var path = require('path'); + var path = require("path"); var slash = require("slash"); recursive(directoryPath, (error, files) => { if (error) { @@ -194,17 +195,19 @@ security.calcAllFileSha256 = function (directoryPath) { }); if (files.length == 0) { - log.debug(`calcAllFileSha256 empty files in directoryPath:`, directoryPath); + log.debug( + `calcAllFileSha256 empty files in directoryPath:`, + directoryPath + ); reject(new AppError.AppError("empty files")); - }else { - security.sha256AllFiles(files) - .then((results) => { + } else { + security.sha256AllFiles(files).then((results) => { var data = {}; _.forIn(results, (value, key) => { var relativePath = path.relative(directoryPath, key); var matchresult = relativePath.match(/(\/|\\).*/); if (matchresult) { - relativePath = path.join('CodePush', matchresult[0]); + relativePath = path.join("CodePush", matchresult[0]); } relativePath = slash(relativePath); data[relativePath] = value; @@ -216,12 +219,12 @@ security.calcAllFileSha256 = function (directoryPath) { } }); }); -} +}; security.sortJsonToArr = function (json) { var rs = []; _.forIn(json, (value, key) => { - rs.push({path:key, hash: value}) + rs.push({ path: key, hash: value }); }); return _.sortBy(rs, (o) => o.path); -} +}; diff --git a/routes/accessKeys.js b/routes/accessKeys.js index b7239b41..34ddd81c 100644 --- a/routes/accessKeys.js +++ b/routes/accessKeys.js @@ -1,84 +1,94 @@ -var express = require('express'); +var express = require("express"); var router = express.Router(); -var _ = require('lodash'); -var Promise = require('bluebird'); -var security = require('../core/utils/security'); -var models = require('../models'); -var middleware = require('../core/middleware'); -var accountManager = require('../core/services/account-manager')(); -var AppError = require('../core/app-error') -var log4js = require('log4js'); +var _ = require("lodash"); +var security = require("../core/utils/security"); +var models = require("../models"); +var middleware = require("../core/middleware"); +var accountManager = require("../core/services/account-manager")(); +var AppError = require("../core/app-error"); +var log4js = require("log4js"); var log = log4js.getLogger("cps:accessKey"); -router.get('/', middleware.checkToken, (req, res, next) => { - log.debug('request get acceesKeys') +router.get("/", middleware.checkToken, (req, res, next) => { + log.debug("request get acceesKeys"); var uid = req.users.id; - accountManager.getAllAccessKeyByUid(uid) - .then((accessKeys) => { - log.debug('acceesKeys:', accessKeys) - res.send({accessKeys: accessKeys}); - }) - .catch((e) => { - next(e); - }); + accountManager + .getAllAccessKeyByUid(uid) + .then((accessKeys) => { + log.debug("acceesKeys:", accessKeys); + res.send({ accessKeys: accessKeys }); + }) + .catch((e) => { + next(e); + }); }); -router.post('/', middleware.checkToken, (req, res, next) => { +router.post("/", middleware.checkToken, (req, res, next) => { var uid = req.users.id; var identical = req.users.identical; var createdBy = _.trim(req.body.createdBy); var friendlyName = _.trim(req.body.friendlyName); var ttl = parseInt(req.body.ttl); var description = _.trim(req.body.description); - log.debug(req.body) + log.debug(req.body); var newAccessKey = security.randToken(28).concat(identical); - return accountManager.isExsitAccessKeyName(uid, friendlyName) - .then((data) => { - if (!_.isEmpty(data)) { - throw new AppError.AppError(`The access key "${friendlyName}" already exists.`); - } - }) - .then(() => { - return accountManager.createAccessKey(uid, newAccessKey, ttl, friendlyName, createdBy, description); - }) - .then((newToken) => { - var moment = require("moment"); - var info = { - name : newToken.tokens, - createdTime : parseInt(moment(newToken.created_at).format('x')), - createdBy : newToken.created_by, - expires : parseInt(moment(newToken.expires_at).format('x')), - description : newToken.description, - friendlyName: newToken.name, - }; - log.debug(info); - res.send({accessKey:info}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - log.debug(e) - res.status(406).send(e.message); - } else { - next(e); - } - }); + return accountManager + .isExsitAccessKeyName(uid, friendlyName) + .then((data) => { + if (!_.isEmpty(data)) { + throw new AppError.AppError( + `The access key "${friendlyName}" already exists.` + ); + } + }) + .then(() => { + return accountManager.createAccessKey( + uid, + newAccessKey, + ttl, + friendlyName, + createdBy, + description + ); + }) + .then((newToken) => { + var moment = require("moment"); + var info = { + name: newToken.tokens, + createdTime: parseInt(moment(newToken.created_at).format("x")), + createdBy: newToken.created_by, + expires: parseInt(moment(newToken.expires_at).format("x")), + description: newToken.description, + friendlyName: newToken.name, + }; + log.debug(info); + res.send({ accessKey: info }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + log.debug(e); + res.status(406).send(e.message); + } else { + next(e); + } + }); }); -router.delete('/:name', middleware.checkToken, (req, res, next) => { +router.delete("/:name", middleware.checkToken, (req, res, next) => { var name = _.trim(decodeURI(req.params.name)); var uid = req.users.id; - return models.UserTokens.destroy({where: {name:name, uid: uid}}) - .then((rowNum) => { - log.debug('delete acceesKey:', name) - res.send({friendlyName:name}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - log.debug(e) - res.status(406).send(e.message); - } else { - next(e); - } - }); + return models.UserTokens.destroy({ where: { name: name, uid: uid } }) + .then((rowNum) => { + log.debug("delete acceesKey:", name); + res.send({ friendlyName: name }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + log.debug(e); + res.status(406).send(e.message); + } else { + next(e); + } + }); }); module.exports = router; diff --git a/routes/indexV1.js b/routes/indexV1.js index 498517b4..bf965e2c 100644 --- a/routes/indexV1.js +++ b/routes/indexV1.js @@ -1,42 +1,48 @@ -var express = require('express'); +var express = require("express"); var router = express.Router(); -var Promise = require('bluebird'); -var AppError = require('../core/app-error'); -var middleware = require('../core/middleware'); -var ClientManager = require('../core/services/client-manager'); -var _ = require('lodash'); -var log4js = require('log4js'); +var AppError = require("../core/app-error"); +var ClientManager = require("../core/services/client-manager"); +var _ = require("lodash"); +var log4js = require("log4js"); var log = log4js.getLogger("cps:indexV1"); -router.get('/update_check', (req, res, next) => { +router.get("/update_check", (req, res, next) => { var deploymentKey = _.get(req, "query.deployment_key"); var appVersion = _.get(req, "query.app_version"); var label = _.get(req, "query.label"); - var packageHash = _.get(req, "query.package_hash") - var isCompanion = _.get(req, "query.is_companion") - var clientUniqueId = _.get(req, "query.client_unique_id") + var packageHash = _.get(req, "query.package_hash"); + var isCompanion = _.get(req, "query.is_companion"); + var clientUniqueId = _.get(req, "query.client_unique_id"); var clientManager = new ClientManager(); - log.debug('req.query', req.query); - clientManager.updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) - .then((rs) => { - //灰度检测 - return clientManager.chosenMan(rs.packageId, rs.rollout, clientUniqueId) - .then((data)=>{ - if (!data) { - rs.isAvailable = false; - return rs; - } - return rs; - }); - }) - .then((rs) => { - delete rs.packageId; - delete rs.rollout; - var update_info = { - download_url : rs.downloadUrl, - description : rs.description, - is_available : rs.isAvailable, - is_disabled : rs.isDisabled, + log.debug("req.query", req.query); + clientManager + .updateCheckFromCache( + deploymentKey, + appVersion, + label, + packageHash, + clientUniqueId + ) + .then((rs) => { + //灰度检测 + return clientManager + .chosenMan(rs.packageId, rs.rollout, clientUniqueId) + .then((data) => { + if (!data) { + rs.isAvailable = false; + return rs; + } + return rs; + }); + }) + .then((rs) => { + delete rs.packageId; + delete rs.rollout; + var update_info = { + download_url: rs.downloadUrl, + description: rs.description, + is_available: rs.isAvailable, + is_disabled: rs.isDisabled, // Note: need to use appVersion here to get it compatible with client side change... // https://github.com/microsoft/code-push/commit/7d2ffff395cc54db98aefba7c67889f509e8c249#diff-a937c637a47cbd31cbb52c89bef7d197R138 target_binary_range: rs.appVersion, @@ -46,46 +52,48 @@ router.get('/update_check', (req, res, next) => { should_run_binary_version: rs.shouldRunBinaryVersion, update_app_version: rs.updateAppVersion, is_mandatory: rs.isMandatory, - }; - res.send({"update_info": update_info}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(404).send(e.message); - } else { - next(e); - } - }); + }; + res.send({ update_info: update_info }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(404).send(e.message); + } else { + next(e); + } + }); }); -router.post('/report_status/download', (req, res) => { - log.debug('req.body', req.body); +router.post("/report_status/download", (req, res) => { + log.debug("req.body", req.body); var clientUniqueId = _.get(req, "body.client_unique_id"); var label = _.get(req, "body.label"); var deploymentKey = _.get(req, "body.deployment_key"); var clientManager = new ClientManager(); - clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId) - .catch((err) => { - if (!err instanceof AppError.AppError) { - console.error(err.stack) - } - }); - res.send('OK'); + clientManager + .reportStatusDownload(deploymentKey, label, clientUniqueId) + .catch((err) => { + if (!err instanceof AppError.AppError) { + console.error(err.stack); + } + }); + res.send("OK"); }); -router.post('/report_status/deploy', (req, res) => { - log.debug('req.body', req.body); +router.post("/report_status/deploy", (req, res) => { + log.debug("req.body", req.body); var clientUniqueId = _.get(req, "body.client_unique_id"); var label = _.get(req, "body.label"); var deploymentKey = _.get(req, "body.deployment_key"); var clientManager = new ClientManager(); - clientManager.reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) - .catch((err) => { - if (!err instanceof AppError.AppError) { - console.error(err.stack) - } - }); - res.send('OK'); + clientManager + .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) + .catch((err) => { + if (!err instanceof AppError.AppError) { + console.error(err.stack); + } + }); + res.send("OK"); }); module.exports = router; diff --git a/test/api/index/index.test.js b/test/api/index/index.test.js index 51f51289..c21bfbab 100644 --- a/test/api/index/index.test.js +++ b/test/api/index/index.test.js @@ -1,216 +1,248 @@ -var app = require('../../../app'); -var request = require('supertest')(app); +var app = require("../../../app"); +var request = require("supertest")(app); var should = require("should"); -var _ = require('lodash'); +var _ = require("lodash"); -describe('api/index/index.test.js', function() { - var account = '522539441@qq.com'; - var password = '123456'; +describe("api/index/index.test.js", function () { + var account = "522539441@qq.com"; + var password = "123456"; var authToken; - var appName = 'Demo-ios'; + var appName = "Demo-ios"; var deploymentKey; var packageHash; var label; - before(function(done){ - request.post('/auth/login') - .send({ - account: account, - password: password - }) - .end(function(err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({status:"OK"}); - authToken = (new Buffer(`auth:${_.get(rs, 'results.tokens')}`)).toString('base64'); - done(); - }); - }); - - describe('list apps all deployments', function(done) { - it('should list apps all deployments successful', function(done) { - request.get(`/apps/${appName}/deployments`) - .set('Authorization', `Basic ${authToken}`) - .send() - .end(function(err, res) { + before(function (done) { + request + .post("/auth/login") + .send({ + account: account, + password: password, + }) + .end(function (err, res) { should.not.exist(err); - res.status.should.equal(200); var rs = JSON.parse(res.text); - rs.should.have.properties('deployments'); - rs.deployments.should.be.an.instanceOf(Array); - rs.deployments.should.matchEach(function(it) { - if (_.get(it, 'name') == 'Production') { - deploymentKey = _.get(it, 'key'); - packageHash = _.get(it, 'package.packageHash'); - label = _.get(it, 'package.label'); - } - return it.should.have.properties(['createdTime', 'id', 'key', 'name', 'package']); - }); + rs.should.containEql({ status: "OK" }); + authToken = new Buffer(`auth:${_.get(rs, "results.tokens")}`).toString( + "base64" + ); done(); }); - }); }); - describe('render index views', function(done) { - it('should render index views successful', function(done) { - request.get(`/`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + describe("list apps all deployments", function (done) { + it("should list apps all deployments successful", function (done) { + request + .get(`/apps/${appName}/deployments`) + .set("Authorization", `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("deployments"); + rs.deployments.should.be.an.instanceOf(Array); + rs.deployments.should.matchEach(function (it) { + if (_.get(it, "name") == "Production") { + deploymentKey = _.get(it, "key"); + packageHash = _.get(it, "package.packageHash"); + label = _.get(it, "package.label"); + } + return it.should.have.properties([ + "createdTime", + "id", + "key", + "name", + "package", + ]); + }); + done(); + }); }); }); - describe('render README.md views', function(done) { - it('should render README.md views successful', function(done) { - request.get(`/README.md`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + describe("render index views", function (done) { + it("should render index views successful", function (done) { + request + .get(`/`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - describe('render tokens views', function(done) { - it('should render tokens views successful', function(done) { - request.get(`/tokens`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + describe("render tokens views", function (done) { + it("should render tokens views successful", function (done) { + request + .get(`/tokens`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - describe('authenticated', function(done) { - it('should authenticated successful', function(done) { - request.get(`/authenticated`) - .set('Authorization', `Basic ${authToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + describe("authenticated", function (done) { + it("should authenticated successful", function (done) { + request + .get(`/authenticated`) + .set("Authorization", `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - describe('updateCheck', function(done) { - it('should not updateCheck successful where deploymentKey is empty', function(done) { - request.get(`/updateCheck?deploymentKey=&appVersion=1.0.0&label=&packageHash=`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(404); - res.text.should.equal(`please input deploymentKey and appVersion`); - done(); - }); + describe("updateCheck", function (done) { + it("should not updateCheck successful where deploymentKey is empty", function (done) { + request + .get(`/updateCheck?deploymentKey=&appVersion=1.0.0&label=&packageHash=`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(404); + res.text.should.equal(`please input deploymentKey and appVersion`); + done(); + }); }); - it('should not updateCheck successful where deploymentKey does not exist', function(done) { - request.get(`/updateCheck?deploymentKey=123&appVersion=1.0.0&label=&packageHash=`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(404); - res.text.should.equal(`Not found deployment, check deployment key is right.`); - done(); - }); + it("should not updateCheck successful where deploymentKey does not exist", function (done) { + request + .get( + `/updateCheck?deploymentKey=123&appVersion=1.0.0&label=&packageHash=` + ) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(404); + res.text.should.equal( + `Not found deployment, check deployment key is right.` + ); + done(); + }); }); - it('should updateCheck successful', function(done) { - request.get(`/updateCheck?deploymentKey=${deploymentKey}&appVersion=1.0.0&label=&packageHash=`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('updateInfo'); - rs.updateInfo.should.have.properties([ - 'downloadURL','description','isAvailable','isMandatory','appVersion', - 'packageHash','label','packageSize','updateAppVersion','shouldRunBinaryVersion' - ]); - rs.updateInfo.isAvailable.should.be.true; - done(); - }); + it("should updateCheck successful", function (done) { + request + .get( + `/updateCheck?deploymentKey=${deploymentKey}&appVersion=1.0.0&label=&packageHash=` + ) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("updateInfo"); + rs.updateInfo.should.have.properties([ + "downloadURL", + "description", + "isAvailable", + "isMandatory", + "appVersion", + "packageHash", + "label", + "packageSize", + "updateAppVersion", + "shouldRunBinaryVersion", + ]); + rs.updateInfo.isAvailable.should.be.true; + done(); + }); }); - it('should updateCheck successful when packageHash is newer', function(done) { - request.get(`/updateCheck?deploymentKey=${deploymentKey}&appVersion=1.0.0&label=&packageHash=${packageHash}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('updateInfo'); - rs.updateInfo.should.have.properties([ - 'downloadURL','description','isAvailable','isMandatory','appVersion', - 'packageHash','label','packageSize','updateAppVersion','shouldRunBinaryVersion' - ]); - rs.updateInfo.isAvailable.should.be.false; - done(); - }); + it("should updateCheck successful when packageHash is newer", function (done) { + request + .get( + `/updateCheck?deploymentKey=${deploymentKey}&appVersion=1.0.0&label=&packageHash=${packageHash}` + ) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("updateInfo"); + rs.updateInfo.should.have.properties([ + "downloadURL", + "description", + "isAvailable", + "isMandatory", + "appVersion", + "packageHash", + "label", + "packageSize", + "updateAppVersion", + "shouldRunBinaryVersion", + ]); + rs.updateInfo.isAvailable.should.be.false; + done(); + }); }); }); - describe('reportStatus download', function(done) { - it('should reportStatus download successful', function(done) { - request.post(`/reportStatus/download`) - .send({ - clientUniqueId: Math.random(), - label: label, - deploymentKey:deploymentKey - }) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`OK`); - setTimeout(function(){ - done(); - }, 1000) - }); + describe("reportStatus download", function (done) { + it("should reportStatus download successful", function (done) { + request + .post(`/reportStatus/download`) + .send({ + clientUniqueId: Math.random(), + label: label, + deploymentKey: deploymentKey, + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`OK`); + setTimeout(function () { + done(); + }, 1000); + }); }); }); - describe('reportStatus deploy', function(done) { - it('should reportStatus deploy successful', function(done) { - request.post(`/reportStatus/deploy`) - .send({ - clientUniqueId: Math.random(), - label: label, - deploymentKey: deploymentKey, - status: 'DeploymentSucceeded' - }) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`OK`); - setTimeout(function(){ - done(); - }, 1000) - }); + describe("reportStatus deploy", function (done) { + it("should reportStatus deploy successful", function (done) { + request + .post(`/reportStatus/deploy`) + .send({ + clientUniqueId: Math.random(), + label: label, + deploymentKey: deploymentKey, + status: "DeploymentSucceeded", + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`OK`); + setTimeout(function () { + done(); + }, 1000); + }); }); - it('should reportStatus deploy successful', function(done) { - request.post(`/reportStatus/deploy`) - .send({ - clientUniqueId: Math.random(), - label: label, - deploymentKey: deploymentKey, - status: 'DeploymentFailed' - }) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`OK`); - setTimeout(function(){ - done(); - }, 1000) - }); + it("should reportStatus deploy successful", function (done) { + request + .post(`/reportStatus/deploy`) + .send({ + clientUniqueId: Math.random(), + label: label, + deploymentKey: deploymentKey, + status: "DeploymentFailed", + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`OK`); + setTimeout(function () { + done(); + }, 1000); + }); }); }); }); From 25fff4d74e08f22d32e077450cbd58199cf76d8a Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 15:41:53 +0800 Subject: [PATCH 036/347] fix(deps): update yargs to v17 --- bin/db | 7 +- package-lock.json | 565 +++++++++------------------------------------- package.json | 2 +- 3 files changed, 110 insertions(+), 464 deletions(-) diff --git a/bin/db b/bin/db index b819e440..6e3b3a5a 100755 --- a/bin/db +++ b/bin/db @@ -9,7 +9,8 @@ var _ = require("lodash"); var mysql = require("mysql2"); var Promise = require("bluebird"); var constConfig = require("../core/const"); -var yargs = require("yargs") +var yargs = require("yargs"); +var argv = yargs .usage("Usage: $0 [options]") .command("init", "初始化数据库", { dbpassword: { @@ -38,8 +39,8 @@ var yargs = require("yargs") dbpassword: null, }) .help("h") - .alias("h", "help"); -var argv = yargs.argv; + .alias("h", "help") + .parseSync(); var command = argv._[0]; var dbname = argv.dbname ? argv.dbname : "codepush"; var dbhost = argv.dbhost ? argv.dbhost : "localhost"; diff --git a/package-lock.json b/package-lock.json index dd02b52b..7781e765 100644 --- a/package-lock.json +++ b/package-lock.json @@ -284,9 +284,9 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, "ansi-regex": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { "version": "3.2.1", @@ -588,6 +588,12 @@ "get-intrinsic": "^1.0.2" } }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "camelcase-keys": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", @@ -597,14 +603,6 @@ "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } }, "camelize": { @@ -687,6 +685,16 @@ } } }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "cls-bluebird": { "version": "2.1.0", "resolved": "http://registry.npm.taobao.org/cls-bluebird/download/cls-bluebird-2.1.0.tgz", @@ -701,11 +709,6 @@ "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, - "code-point-at": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1342,16 +1345,6 @@ "resolved": "http://registry.npm.taobao.org/crc32/download/crc32-0.2.2.tgz", "integrity": "sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo=" }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "crypt": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", @@ -1411,13 +1404,6 @@ "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", "requires": { "mimic-fn": "^3.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" - } } }, "debug": { @@ -1584,8 +1570,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -1609,8 +1594,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -1675,20 +1659,6 @@ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, - "execa": { - "version": "0.7.0", - "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, "expect-ct": { "version": "0.1.0", "resolved": "http://registry.npm.taobao.org/expect-ct/download/expect-ct-0.1.0.tgz", @@ -1731,28 +1701,6 @@ "vary": "~1.1.2" }, "dependencies": { - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, "cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", @@ -1766,21 +1714,8 @@ "ms": "2.0.0" } }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -1792,8 +1727,7 @@ "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "requires": { "mime-db": "1.49.0" @@ -1809,40 +1743,15 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } } } }, @@ -2062,9 +1971,9 @@ "integrity": "sha1-kv9xllINZwg5pnMICSoSqt8valk=" }, "get-caller-file": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz", - "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=" + "version": "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": { "version": "1.1.1", @@ -2088,12 +1997,6 @@ "through2": "^2.0.0" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -2267,11 +2170,6 @@ } } }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, "getpass": { "version": "0.1.7", "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", @@ -2585,6 +2483,7 @@ "version": "1.0.6", "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2601,11 +2500,6 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "invert-kv": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -2652,12 +2546,9 @@ } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-obj": { "version": "2.0.0", @@ -2689,11 +2580,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, "is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", @@ -2716,7 +2602,8 @@ "isexe": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isstream": { "version": "0.1.2", @@ -2944,14 +2831,6 @@ "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, - "lcid": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } - }, "levn": { "version": "0.3.0", "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", @@ -3193,14 +3072,6 @@ "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "mem": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, "meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -3319,12 +3190,6 @@ "dev": true } } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true } } }, @@ -3357,9 +3222,9 @@ } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz", - "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" }, "min-indent": { "version": "1.0.1", @@ -3378,7 +3243,8 @@ "minimist": { "version": "0.0.8", "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, "minimist-options": { "version": "4.1.0", @@ -3509,11 +3375,6 @@ "safer-buffer": ">= 2.1.2 < 3.0.0" } }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -3623,25 +3484,12 @@ } } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, "null-check": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "oauth-sign": { "version": "0.8.2", "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz", @@ -3664,6 +3512,7 @@ "version": "1.4.0", "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -3739,11 +3588,6 @@ } } }, - "p-finally": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, "p-limit": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-2.0.0.tgz", @@ -3790,12 +3634,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-parse": { "version": "1.0.7", @@ -4316,11 +4156,6 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -4417,21 +4252,8 @@ } } }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ms": { @@ -4439,11 +4261,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -4522,29 +4339,11 @@ } } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, - "shebang-command": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, "shimmer": { "version": "1.2.0", "resolved": "http://registry.npm.taobao.org/shimmer/download/shimmer-1.2.0.tgz", @@ -4604,11 +4403,6 @@ "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", "dev": true }, - "signal-exit": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, "slash": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", @@ -4758,37 +4552,17 @@ "yargs": "^16.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -4796,8 +4570,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "find-up": { "version": "5.0.0", @@ -4809,18 +4582,6 @@ "path-exists": "^4.0.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4872,43 +4633,6 @@ "lru-cache": "^6.0.0" } }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -4929,12 +4653,6 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true } } }, @@ -4970,13 +4688,13 @@ } }, "string-width": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "string_decoder": { @@ -4999,11 +4717,11 @@ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.0" } }, "strip-bom": { @@ -5012,11 +4730,6 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -5268,11 +4981,6 @@ "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, - "window-size": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" - }, "wordwrap": { "version": "0.0.2", "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", @@ -5434,15 +5142,11 @@ "version": "1.3.0", "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, "requires": { "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "win-release": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/win-release/download/win-release-1.1.1.tgz", @@ -5451,6 +5155,11 @@ "semver": "^5.0.1" } }, + "window-size": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, "with": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", @@ -5475,18 +5184,43 @@ "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } } }, "wrappy": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "x-xss-protection": { "version": "1.1.0", @@ -5507,23 +5241,6 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" }, - "xregexp": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-4.0.0.tgz", - "integrity": "sha1-5pgYneSd0qGMxWh7BeF8jkOUMCA=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -5531,9 +5248,9 @@ "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "2.1.2", @@ -5541,95 +5258,23 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { - "version": "12.0.1", - "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-12.0.1.tgz", - "integrity": "sha1-ZDLlYSO7Tnw1YhFUAemDdAYCYcI=", + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "cliui": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz", - "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "decamelize": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-2.0.0.tgz", - "integrity": "sha1-ZW17vICUxMeI6lPFhAkIycfQY8c=", - "requires": { - "xregexp": "4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "os-locale": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz", - "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "10.1.0", - "resolved": "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz", - "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=", - "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - } - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, "yauzl": { "version": "2.10.0", diff --git a/package.json b/package.json index b6d22797..252f389e 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "slash": "2.0.0", "upyun": "3.3.9", "validator": "10.6.0", - "yargs": "12.0.1", + "yargs": "17.1.1", "yazl": "2.4.3" }, "devDependencies": { From f4fa15c9500f946173a4aadeb716d6c4888f4c12 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 07:43:18 +0000 Subject: [PATCH 037/347] fix(deps): update dependency cookie-parser to v1.4.5 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7781e765..c14fe29c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1159,16 +1159,16 @@ } }, "cookie": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, "cookie-parser": { - "version": "1.4.3", - "resolved": "http://registry.npm.taobao.org/cookie-parser/download/cookie-parser-1.4.3.tgz", - "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz", + "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==", "requires": { - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6" } }, diff --git a/package.json b/package.json index 252f389e..1850219f 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "bcryptjs": "2.4.3", "bluebird": "3.7.2", "body-parser": "1.19.0", - "cookie-parser": "1.4.3", + "cookie-parser": "1.4.5", "cos-nodejs-sdk-v5": "2.10.0", "diff-match-patch": "1.0.5", "express": "4.17.1", From eb90aada2de67759177926438b6262eb23ec9475 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 07:43:57 +0000 Subject: [PATCH 038/347] fix(deps): update dependency formidable to v1.2.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7781e765..77248b3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1898,9 +1898,9 @@ } }, "formidable": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/formidable/download/formidable-1.2.1.tgz", - "integrity": "sha1-cPt8oCkO5v+WEJBBX0s989IIJlk=" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", + "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" }, "formstream": { "version": "1.1.0", diff --git a/package.json b/package.json index 252f389e..6f6756eb 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "diff-match-patch": "1.0.5", "express": "4.17.1", "extract-zip": "1.7.0", - "formidable": "1.2.1", + "formidable": "1.2.2", "fs-extra": "7.0.1", "helmet": "3.12.0", "jschardet": "1.6.0", From 1371a7086c469911bc97562891abd92a2d140f99 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 07:44:38 +0000 Subject: [PATCH 039/347] fix(deps): update dependency helmet to v3.23.3 --- package-lock.json | 152 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 77 insertions(+), 77 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7781e765..bf1e1c20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -534,6 +534,11 @@ "hoek": "4.x.x" } }, + "bowser": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz", + "integrity": "sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", @@ -607,7 +612,7 @@ }, "camelize": { "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/camelize/download/camelize-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caseless": { @@ -873,9 +878,9 @@ } }, "content-security-policy-builder": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/content-security-policy-builder/download/content-security-policy-builder-2.0.0.tgz", - "integrity": "sha1-h0mh1UL8voIjcoHqn3Fs5os5TdI=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz", + "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ==" }, "content-type": { "version": "1.0.4", @@ -1384,7 +1389,7 @@ }, "dasherize": { "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/dasherize/download/dasherize-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, "date-format": { @@ -1502,20 +1507,15 @@ "utility": "0.1.11" } }, - "dns-prefetch-control": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/dns-prefetch-control/download/dns-prefetch-control-0.1.0.tgz", - "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" - }, "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, "dont-sniff-mimetype": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/dont-sniff-mimetype/download/dont-sniff-mimetype-1.0.0.tgz", - "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz", + "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug==" }, "dot-prop": { "version": "6.0.1", @@ -1659,11 +1659,6 @@ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, - "expect-ct": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/expect-ct/download/expect-ct-0.1.0.tgz", - "integrity": "sha1-UnNWeN4YUwiQ2Ne5XwrGNkCVgJQ=" - }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -1823,6 +1818,11 @@ "pend": "~1.2.0" } }, + "feature-policy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", + "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==" + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -1917,11 +1917,6 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, - "frameguard": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/frameguard/download/frameguard-3.0.0.tgz", - "integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=" - }, "fresh": { "version": "0.5.2", "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", @@ -2335,40 +2330,50 @@ "dev": true }, "helmet": { - "version": "3.12.0", - "resolved": "http://registry.npm.taobao.org/helmet/download/helmet-3.12.0.tgz", - "integrity": "sha1-IJjjXPTlHGTC8dOGcLfTgqN32Sw=", - "requires": { - "dns-prefetch-control": "0.1.0", - "dont-sniff-mimetype": "1.0.0", - "expect-ct": "0.1.0", - "frameguard": "3.0.0", - "helmet-csp": "2.7.0", - "hide-powered-by": "1.0.0", + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.23.3.tgz", + "integrity": "sha512-U3MeYdzPJQhtvqAVBPntVgAvNSOJyagwZwyKsFdyRa8TV3pOKVFljalPOCxbw5Wwf2kncGhmP0qHjyazIdNdSA==", + "requires": { + "depd": "2.0.0", + "dont-sniff-mimetype": "1.1.0", + "feature-policy": "0.3.0", + "helmet-crossdomain": "0.4.0", + "helmet-csp": "2.10.0", + "hide-powered-by": "1.1.0", "hpkp": "2.0.0", - "hsts": "2.1.0", - "ienoopen": "1.0.0", - "nocache": "2.0.0", - "referrer-policy": "1.1.0", - "x-xss-protection": "1.1.0" + "hsts": "2.2.0", + "nocache": "2.1.0", + "referrer-policy": "1.2.0", + "x-xss-protection": "1.3.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } } }, + "helmet-crossdomain": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz", + "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" + }, "helmet-csp": { - "version": "2.7.0", - "resolved": "http://registry.npm.taobao.org/helmet-csp/download/helmet-csp-2.7.0.tgz", - "integrity": "sha1-eTQJRhfR/re7LcQ7t9nogw93RxY=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.10.0.tgz", + "integrity": "sha512-Rz953ZNEFk8sT2XvewXkYN0Ho4GEZdjAZy4stjiEQV3eN7GDxg1QKmYggH7otDyIA7uGA6XnUMVSgeJwbR5X+w==", "requires": { + "bowser": "2.9.0", "camelize": "1.0.0", - "content-security-policy-builder": "2.0.0", - "dasherize": "2.0.0", - "lodash.reduce": "4.6.0", - "platform": "1.3.5" + "content-security-policy-builder": "2.1.0", + "dasherize": "2.0.0" } }, "hide-powered-by": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/hide-powered-by/download/hide-powered-by-1.0.0.tgz", - "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz", + "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg==" }, "hmacsha1": { "version": "1.0.0", @@ -2408,13 +2413,23 @@ }, "hpkp": { "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/hpkp/download/hpkp-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=" }, "hsts": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/hsts/download/hsts-2.1.0.tgz", - "integrity": "sha1-y9bJGKI4X+4d1WgL+ys6GUwBIcw=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.2.0.tgz", + "integrity": "sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==", + "requires": { + "depd": "2.0.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } + } }, "http-errors": { "version": "1.7.2", @@ -2463,11 +2478,6 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, - "ienoopen": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/ienoopen/download/ienoopen-1.0.0.tgz", - "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" - }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -3000,11 +3010,6 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/lodash.reduce/download/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, "log4js": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", @@ -3410,9 +3415,9 @@ "dev": true }, "nocache": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/nocache/download/nocache-2.0.0.tgz", - "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", + "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" }, "node_memcached": { "version": "1.1.3", @@ -3696,11 +3701,6 @@ "find-up": "^3.0.0" } }, - "platform": { - "version": "1.3.5", - "resolved": "http://registry.npm.taobao.org/platform/download/platform-1.3.5.tgz", - "integrity": "sha1-+2lYxpbgfikY0u7aDwvJRI1zNEQ=" - }, "pomelo-protobuf": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/pomelo-protobuf/-/pomelo-protobuf-0.4.0.tgz", @@ -4103,9 +4103,9 @@ "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" }, "referrer-policy": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/referrer-policy/download/referrer-policy-1.1.0.tgz", - "integrity": "sha1-NXdOtzW/UPtsB46DM0tHI1AgfXk=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", + "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==" }, "regenerator-runtime": { "version": "0.11.1", @@ -5223,9 +5223,9 @@ "dev": true }, "x-xss-protection": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/x-xss-protection/download/x-xss-protection-1.1.0.tgz", - "integrity": "sha1-TxiYwzLesefyvhKA77PixT1pwac=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", + "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==" }, "xml2js": { "version": "0.4.4", diff --git a/package.json b/package.json index 252f389e..67d2493c 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "extract-zip": "1.7.0", "formidable": "1.2.1", "fs-extra": "7.0.1", - "helmet": "3.12.0", + "helmet": "3.23.3", "jschardet": "1.6.0", "jsonwebtoken": "8.5.1", "lodash": "4.17.21", From 71d2645ed83efe4222a58ff180cc1b37bf530d3d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 07:45:23 +0000 Subject: [PATCH 040/347] fix(deps): update dependency qiniu to v7.4.0 --- package-lock.json | 637 ++++++++++++++++++++++++++++++++++++++++------ package.json | 2 +- 2 files changed, 566 insertions(+), 73 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7781e765..26ada12e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -90,6 +90,11 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, "@types/babel-types": { "version": "7.0.10", "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.10.tgz", @@ -197,16 +202,56 @@ "dev": true }, "address": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/address/download/address-1.0.3.tgz", - "integrity": "sha1-tfUGMfjWzsi9IMljljr7VeBsvOk=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } }, "agentkeepalive": { - "version": "3.3.0", - "resolved": "http://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-3.3.0.tgz", - "integrity": "sha1-bV3lgpr9O+JxIgGjknX9EcZRhXw=", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", "humanize-ms": "^1.2.1" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "ajv": { @@ -299,7 +344,7 @@ }, "any-promise": { "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, "argparse": { @@ -343,6 +388,14 @@ "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "requires": { + "tslib": "^2.0.1" + } + }, "async": { "version": "1.5.2", "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", @@ -481,6 +534,44 @@ "resolved": "http://registry.npm.taobao.org/bcryptjs/download/bcryptjs-2.4.3.tgz", "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" }, + "before": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/before/-/before-0.0.1.tgz", + "integrity": "sha1-0hJw6YdH6QlyU0QehorbMlrnLdo=" + }, + "block-stream2": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", + "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", + "requires": { + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -1183,6 +1274,11 @@ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", "dev": true }, + "copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, "core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", @@ -1342,7 +1438,7 @@ }, "crc32": { "version": "0.2.2", - "resolved": "http://registry.npm.taobao.org/crc32/download/crc32-0.2.2.tgz", + "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz", "integrity": "sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo=" }, "crypt": { @@ -1387,6 +1483,11 @@ "resolved": "http://registry.npm.taobao.org/dasherize/download/dasherize-2.0.0.tgz", "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, + "data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" + }, "date-format": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", @@ -1440,17 +1541,33 @@ "deep-is": { "version": "0.1.3", "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "default-user-agent": { "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/default-user-agent/download/default-user-agent-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", "integrity": "sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY=", "requires": { "os-name": "~1.0.3" } }, + "degenerator": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", + "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", + "requires": { + "ast-types": "^0.13.2", + "escodegen": "^1.8.1", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", @@ -1496,10 +1613,20 @@ }, "digest-header": { "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/digest-header/download/digest-header-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/digest-header/-/digest-header-0.0.1.tgz", "integrity": "sha1-Ecz23uxXZqw3l0TZAcEsuklRS+Y=", "requires": { "utility": "0.1.11" + }, + "dependencies": { + "utility": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/utility/-/utility-0.1.11.tgz", + "integrity": "sha1-/eYM+bTkdRlHoM9dEEzik2ciZxU=", + "requires": { + "address": ">=0.0.1" + } + } } }, "dns-prefetch-control": { @@ -1577,6 +1704,14 @@ "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -1611,7 +1746,6 @@ "version": "1.8.1", "resolved": "http://registry.npm.taobao.org/escodegen/download/escodegen-1.8.1.tgz", "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, "requires": { "esprima": "^2.7.1", "estraverse": "^1.9.1", @@ -1624,7 +1758,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, "optional": true, "requires": { "amdefine": ">=0.0.4" @@ -1635,14 +1768,12 @@ "esprima": { "version": "2.7.3", "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" }, "estraverse": { "version": "1.9.3", "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=" }, "esutils": { "version": "2.0.2", @@ -1760,6 +1891,14 @@ "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, "extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -1812,8 +1951,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fd-slicer": { "version": "1.1.0", @@ -1832,6 +1970,11 @@ "escape-string-regexp": "^1.0.5" } }, + "file-uri-to-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", + "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -1903,13 +2046,20 @@ "integrity": "sha1-cPt8oCkO5v+WEJBBX0s989IIJlk=" }, "formstream": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/formstream/download/formstream-1.1.0.tgz", - "integrity": "sha1-UfOXDyYTbrCtRDBN5M67UCB7RHk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/formstream/-/formstream-1.1.1.tgz", + "integrity": "sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q==", "requires": { "destroy": "^1.0.4", - "mime": "^1.3.4", + "mime": "^2.5.2", "pause-stream": "~0.0.11" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + } } }, "forwarded": { @@ -1952,6 +2102,38 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", @@ -2170,6 +2352,49 @@ } } }, + "get-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", + "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "requires": { + "@tootallnate/once": "1", + "data-uri-to-buffer": "3", + "debug": "4", + "file-uri-to-path": "2", + "fs-extra": "^8.1.0", + "ftp": "^0.3.10" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "getpass": { "version": "0.1.7", "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", @@ -2435,6 +2660,31 @@ } } }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", @@ -2445,18 +2695,45 @@ "sshpk": "^1.7.0" } }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "humanize-ms": { "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", "requires": { "ms": "^2.0.0" } }, "iconv-lite": { - "version": "0.4.19", - "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", - "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=" + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } }, "ieee754": { "version": "1.1.13", @@ -2500,6 +2777,11 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -2545,6 +2827,11 @@ } } }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -2835,7 +3122,6 @@ "version": "0.3.0", "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -3390,6 +3676,16 @@ } } }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "named-placeholders": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", @@ -3409,6 +3705,11 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" + }, "nocache": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/nocache/download/nocache-2.0.0.tgz", @@ -3512,7 +3813,6 @@ "version": "1.4.0", "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -3554,7 +3854,6 @@ "version": "0.8.2", "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -3566,7 +3865,7 @@ }, "os-name": { "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/os-name/download/os-name-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", "integrity": "sha1-GzefZINa98Wn9JizV8uVIVwVnt8=", "requires": { "osx-release": "^1.0.0", @@ -3575,16 +3874,16 @@ }, "osx-release": { "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/osx-release/download/osx-release-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", "integrity": "sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=", "requires": { "minimist": "^1.1.0" }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" } } }, @@ -3609,6 +3908,47 @@ "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-2.0.0.tgz", "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=" }, + "pac-proxy-agent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz", + "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4", + "get-uri": "3", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "5", + "pac-resolver": "^4.1.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "5" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "pac-resolver": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", + "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", + "requires": { + "degenerator": "^2.2.0", + "ip": "^1.1.5", + "netmask": "^2.0.1" + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -3666,7 +4006,7 @@ }, "pause-stream": { "version": "0.0.11", - "resolved": "http://registry.npm.taobao.org/pause-stream/download/pause-stream-0.0.11.tgz", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "requires": { "through": "~2.3" @@ -3709,8 +4049,7 @@ "prelude-ls": { "version": "1.1.2", "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "process-nextick-args": { "version": "2.0.0", @@ -3761,6 +4100,54 @@ "ipaddr.js": "1.9.1" } }, + "proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz", + "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", + "requires": { + "agent-base": "^6.0.0", + "debug": "4", + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "lru-cache": "^5.1.1", + "pac-proxy-agent": "^4.1.0", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^5.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "pseudomap": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", @@ -3885,6 +4272,15 @@ "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", @@ -3897,23 +4293,26 @@ "dev": true }, "qiniu": { - "version": "7.1.3", - "resolved": "http://registry.npm.taobao.org/qiniu/download/qiniu-7.1.3.tgz", - "integrity": "sha1-Zk2FDSvmndSMEldV2O1XTUh/kzI=", - "requires": { - "agentkeepalive": "3.3.0", - "crc32": "0.2.2", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/qiniu/-/qiniu-7.4.0.tgz", + "integrity": "sha512-q4BXwglXY0Z2WS2TvRtQX2BJvgE0GUnASD7bm5m1RWcXfcL+OBMKJdN4kUe3H2PFfHL1B3srtR+FmJatFCOktA==", + "requires": { + "agentkeepalive": "^4.0.2", + "before": "^0.0.1", + "block-stream2": "^2.0.0", + "crc32": "^0.2.2", + "destroy": "^1.0.4", "encodeurl": "^1.0.1", - "formstream": "1.1.0", - "mime": "1.3.6", - "tunnel-agent": "0.6.0", - "urllib": "2.22.0" + "formstream": "^1.1.0", + "mime": "^2.4.4", + "tunnel-agent": "^0.6.0", + "urllib": "^2.34.1" }, "dependencies": { "mime": { - "version": "1.3.6", - "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" } } }, @@ -4408,6 +4807,11 @@ "resolved": "http://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=" }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, "sntp": { "version": "2.1.0", "resolved": "http://registry.npm.taobao.org/sntp/download/sntp-2.1.0.tgz", @@ -4416,6 +4820,40 @@ "hoek": "4.x.x" } }, + "socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "source-map": { "version": "0.4.4", "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", @@ -4657,9 +5095,9 @@ } }, "statuses": { - "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz", - "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "streamroller": { "version": "0.7.0", @@ -4804,6 +5242,22 @@ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "through": { "version": "2.3.8", "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", @@ -4893,6 +5347,11 @@ "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", "dev": true }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, "tunnel-agent": { "version": "0.6.0", "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", @@ -4911,7 +5370,6 @@ "version": "0.3.2", "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -5005,6 +5463,14 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, + "unescape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", + "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", + "requires": { + "extend-shallow": "^2.0.1" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -5054,26 +5520,31 @@ } }, "urllib": { - "version": "2.22.0", - "resolved": "http://registry.npm.taobao.org/urllib/download/urllib-2.22.0.tgz", - "integrity": "sha1-KWXcSuEnpvtpW32yfTGE8X2Cy0I=", + "version": "2.37.3", + "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.37.3.tgz", + "integrity": "sha512-jGfi6qi23KvN3u3WizRxeU/yWVoh0Ml7c4yfmeRKVfGESMXYfNcQCPgeHRC1w1OMstVa9MXyIUYz3OLj+pWAMA==", "requires": { "any-promise": "^1.3.0", "content-type": "^1.0.2", - "debug": "^2.6.0", + "debug": "^2.6.9", "default-user-agent": "^1.0.0", "digest-header": "^0.0.1", "ee-first": "~1.1.1", + "formstream": "^1.1.0", "humanize-ms": "^1.2.0", "iconv-lite": "^0.4.15", + "ip": "^1.1.5", + "proxy-agent": "^4.0.1", + "pump": "^3.0.0", "qs": "^6.4.0", - "statuses": "^1.3.1" + "statuses": "^1.3.1", + "utility": "^1.16.1" }, "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } @@ -5086,11 +5557,30 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utility": { - "version": "0.1.11", - "resolved": "http://registry.npm.taobao.org/utility/download/utility-0.1.11.tgz", - "integrity": "sha1-/eYM+bTkdRlHoM9dEEzik2ciZxU=", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/utility/-/utility-1.17.0.tgz", + "integrity": "sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw==", "requires": { - "address": ">=0.0.1" + "copy-to": "^2.0.1", + "escape-html": "^1.0.3", + "mkdirp": "^0.5.1", + "mz": "^2.7.0", + "unescape": "^1.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + } } }, "utils-merge": { @@ -5149,7 +5639,7 @@ }, "win-release": { "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/win-release/download/win-release-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", "requires": { "semver": "^5.0.1" @@ -5180,8 +5670,7 @@ "wordwrap": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "wrap-ansi": { "version": "7.0.0", @@ -5219,8 +5708,7 @@ "wrappy": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "x-xss-protection": { "version": "1.1.0", @@ -5241,6 +5729,11 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 252f389e..43491f54 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "mysql2": "2.3.0", "nodemailer": "4.7.0", "pug": "2.0.4", - "qiniu": "7.1.3", + "qiniu": "7.4.0", "rand-token": "0.4.0", "recursive-readdir": "2.2.2", "redis": "2.8.0", From 73d23aa0fce1f079cfb2e626274dc4041f4944ad Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 15:49:16 +0800 Subject: [PATCH 041/347] fix(deps): update dependency request to v2.88.2 --- package-lock.json | 188 +++++++++++++++++++--------------------------- package.json | 2 +- 2 files changed, 80 insertions(+), 110 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15614c65..1fd45d5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -255,14 +255,14 @@ } }, "ajv": { - "version": "5.5.2", - "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-formats": { @@ -460,9 +460,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axios": { "version": "0.18.1", @@ -617,14 +617,6 @@ } } }, - "boom": { - "version": "4.3.1", - "resolved": "http://registry.npm.taobao.org/boom/download/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "requires": { - "hoek": "4.x.x" - } - }, "bowser": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz", @@ -800,11 +792,6 @@ "shimmer": "^1.1.0" } }, - "co": { - "version": "4.6.0", - "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1451,24 +1438,6 @@ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" }, - "cryptiles": { - "version": "3.1.2", - "resolved": "http://registry.npm.taobao.org/cryptiles/download/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "requires": { - "boom": "5.x.x" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "http://registry.npm.taobao.org/boom/download/boom-5.2.0.tgz", - "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=", - "requires": { - "hoek": "4.x.x" - } - } - } - }, "dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -1884,7 +1853,8 @@ "extend": { "version": "3.0.1", "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true }, "extend-shallow": { "version": "2.0.1", @@ -1934,9 +1904,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -2496,11 +2466,11 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.0.3", - "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "requires": { - "ajv": "^5.1.0", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, @@ -2537,17 +2507,6 @@ "has-symbols": "^1.0.2" } }, - "hawk": { - "version": "6.0.2", - "resolved": "http://registry.npm.taobao.org/hawk/download/hawk-6.0.2.tgz", - "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=", - "requires": { - "boom": "4.x.x", - "cryptiles": "3.x.x", - "hoek": "4.x.x", - "sntp": "2.x.x" - } - }, "he": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/he/download/he-1.1.1.tgz", @@ -2605,11 +2564,6 @@ "resolved": "https://registry.npmjs.org/hmacsha1/-/hmacsha1-1.0.0.tgz", "integrity": "sha1-wbeuA6TqEWNICQrxT4FIwSk4qRc=" }, - "hoek": { - "version": "4.2.1", - "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-4.2.1.tgz", - "integrity": "sha1-ljRQKqEsRF3Vp8VzS1cruHOKrLs=" - }, "hosted-git-info": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", @@ -3013,9 +2967,9 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-schema-typed": { "version": "7.0.3", @@ -3797,9 +3751,9 @@ "dev": true }, "oauth-sign": { - "version": "0.8.2", - "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", @@ -4517,32 +4471,60 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "request": { - "version": "2.85.0", - "resolved": "http://registry.npm.taobao.org/request/download/request-2.85.0.tgz", - "integrity": "sha1-WgNhWkfGFCCz65m326IE+DYD4fo=", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", + "aws4": "^1.8.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "hawk": "~6.0.2", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "stringstream": "~0.0.5", - "tough-cookie": "~2.3.3", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "uuid": "^3.3.2" + }, + "dependencies": { + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "require-directory": { @@ -4812,14 +4794,6 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, - "sntp": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/sntp/download/sntp-2.1.0.tgz", - "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=", - "requires": { - "hoek": "4.x.x" - } - }, "socks": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", @@ -5149,11 +5123,6 @@ "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", "dev": true }, - "stringstream": { - "version": "0.0.5", - "resolved": "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -5321,17 +5290,18 @@ "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" }, "tough-cookie": { - "version": "2.3.4", - "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.4.tgz", - "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { - "punycode": "^1.4.1" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "dependencies": { "punycode": { - "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" } } }, @@ -5589,9 +5559,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.1.0.tgz", - "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "validate-npm-package-license": { "version": "3.0.4", diff --git a/package.json b/package.json index 4aff3576..1d9a3c11 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "rand-token": "0.4.0", "recursive-readdir": "2.2.2", "redis": "2.8.0", - "request": "2.85.0", + "request": "2.88.2", "sequelize": "4.37.1", "serve-favicon": "2.4.5", "slash": "2.0.0", From 572084e0ce5dc959df908b012c995cb1ec52f56e Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 15:58:24 +0800 Subject: [PATCH 042/347] fix(deps): update log4js to v6 --- package-lock.json | 106 ++++++++++++++++++++++++++++++---------------- package.json | 2 +- 2 files changed, 71 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1fd45d5a..1c922e4a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -753,11 +753,6 @@ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" }, - "circular-json": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", - "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==" - }, "clean-css": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", @@ -1463,9 +1458,9 @@ "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" }, "date-format": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", - "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", + "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==" }, "dateformat": { "version": "3.0.3", @@ -1987,6 +1982,11 @@ "locate-path": "^3.0.0" } }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, "follow-redirects": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", @@ -3251,15 +3251,30 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, "log4js": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", - "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", - "requires": { - "circular-json": "^0.5.5", - "date-format": "^1.2.0", - "debug": "^3.1.0", - "rfdc": "^1.1.2", - "streamroller": "0.7.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", + "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "requires": { + "date-format": "^3.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.1", + "rfdc": "^1.1.4", + "streamroller": "^2.2.4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "long": { @@ -4566,9 +4581,9 @@ } }, "rfdc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.2.0.tgz", - "integrity": "sha512-ijLyszTMmUrXvjSooucVQwimGUk84eRcmCuLV8Xghe3UO85mjUtRAHRyoMM6XtyqbECaXuBWx18La3523sXINA==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "right-align": { "version": "0.1.3", @@ -5074,28 +5089,47 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "streamroller": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", - "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", + "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", "requires": { - "date-format": "^1.2.0", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "readable-stream": "^2.3.0" + "date-format": "^2.1.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0" }, "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { - "minimist": "^1.2.5" + "ms": "2.1.2" } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, diff --git a/package.json b/package.json index 1d9a3c11..aaccc077 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "jschardet": "1.6.0", "jsonwebtoken": "8.5.1", "lodash": "4.17.21", - "log4js": "3.0.6", + "log4js": "6.3.0", "moment": "2.29.1", "mysql2": "2.3.0", "nodemailer": "4.7.0", From c8c82c390ef489983c0f0b2f3d4860244d5054f8 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 16:20:18 +0800 Subject: [PATCH 043/347] fix(deps): update redis to v3.1.2 --- package-lock.json | 38 +++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1c922e4a..89ee78a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1631,11 +1631,6 @@ "resolved": "http://registry.npm.taobao.org/dottie/download/dottie-2.0.0.tgz", "integrity": "sha1-2hkZgci41xPKARXViYzzl8Lw3dA=" }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "http://registry.npm.taobao.org/double-ended-queue/download/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" - }, "ecc-jsbn": { "version": "0.1.1", "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz", @@ -4451,24 +4446,33 @@ } }, "redis": { - "version": "2.8.0", - "resolved": "http://registry.npm.taobao.org/redis/download/redis-2.8.0.tgz", - "integrity": "sha1-ICKI4/WMSfYHnZevehDhMDrhSwI=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz", + "integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==", "requires": { - "double-ended-queue": "^2.1.0-0", - "redis-commands": "^1.2.0", - "redis-parser": "^2.6.0" + "denque": "^1.5.0", + "redis-commands": "^1.7.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0" } }, "redis-commands": { - "version": "1.3.5", - "resolved": "http://registry.npm.taobao.org/redis-commands/download/redis-commands-1.3.5.tgz", - "integrity": "sha1-RJWIlBTx6IYmEYCxRC5ylWAtg6I=" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", + "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" + }, + "redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=" }, "redis-parser": { - "version": "2.6.0", - "resolved": "http://registry.npm.taobao.org/redis-parser/download/redis-parser-2.6.0.tgz", - "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=", + "requires": { + "redis-errors": "^1.0.0" + } }, "referrer-policy": { "version": "1.2.0", diff --git a/package.json b/package.json index aaccc077..b1402bc3 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "qiniu": "7.4.0", "rand-token": "0.4.0", "recursive-readdir": "2.2.2", - "redis": "2.8.0", + "redis": "3.1.2", "request": "2.88.2", "sequelize": "4.37.1", "serve-favicon": "2.4.5", From cbe23fb7e3faee4b4ceba2db119e89458c3fa94c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 08:22:11 +0000 Subject: [PATCH 044/347] fix(deps): update dependency serve-favicon to v2.5.0 --- package-lock.json | 21 ++++++++++++++------- package.json | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 89ee78a0..416c24b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3931,9 +3931,9 @@ } }, "parseurl": { - "version": "1.3.2", - "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "path-exists": { "version": "3.0.0", @@ -4710,15 +4710,22 @@ } }, "serve-favicon": { - "version": "2.4.5", - "resolved": "http://registry.npm.taobao.org/serve-favicon/download/serve-favicon-2.4.5.tgz", - "integrity": "sha1-SdmkaGMVOpJAaRyJPSsOfYXW1DY=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", "requires": { "etag": "~1.8.1", "fresh": "0.5.2", - "ms": "2.0.0", + "ms": "2.1.1", "parseurl": "~1.3.2", "safe-buffer": "5.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } } }, "serve-static": { diff --git a/package.json b/package.json index b1402bc3..fd844d14 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "redis": "3.1.2", "request": "2.88.2", "sequelize": "4.37.1", - "serve-favicon": "2.4.5", + "serve-favicon": "2.5.0", "slash": "2.0.0", "upyun": "3.3.9", "validator": "10.6.0", From 9ece7fb129376088b5844a76b69171843b0f1834 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 16:30:54 +0800 Subject: [PATCH 045/347] fix(deps): update mocha and dev to their latest version --- Makefile | 8 +- package-lock.json | 651 +++++++++++++++++++++++++++++++++++----------- package.json | 4 +- 3 files changed, 511 insertions(+), 152 deletions(-) diff --git a/Makefile b/Makefile index 64a6d356..ab615c44 100644 --- a/Makefile +++ b/Makefile @@ -11,16 +11,16 @@ test: test-integration .PHONY: test-integration test-integration: @echo "\nRunning integration tests..." - @mocha test/api/init - @mocha test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index --recursive --timeout 15000 + @mocha test/api/init --exit + @mocha test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index --exit --recursive --timeout 15000 .PHONY: coverage coverage: @echo "\n\nRunning coverage report..." rm -rf coverage - @mocha test/api/init + @mocha test/api/init --exit @./node_modules/istanbul/lib/cli.js cover --report lcovonly --dir coverage/api ./node_modules/.bin/_mocha \ - test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index -- -R spec --recursive --timeout 15000 + test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index -- -R spec --exit --recursive --timeout 15000 @./node_modules/istanbul/lib/cli.js report .PHONY: build-docker diff --git a/package-lock.json b/package-lock.json index 89ee78a0..4d6f071a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -135,6 +135,12 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -328,6 +334,12 @@ "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -347,6 +359,16 @@ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "argparse": { "version": "1.0.10", "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", @@ -539,6 +561,12 @@ "resolved": "https://registry.npmjs.org/before/-/before-0.0.1.tgz", "integrity": "sha1-0hJw6YdH6QlyU0QehorbMlrnLdo=" }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "block-stream2": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", @@ -631,10 +659,19 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "browser-stdout": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "buffer": { @@ -753,6 +790,22 @@ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "clean-css": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", @@ -810,15 +863,6 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, "compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -1570,9 +1614,9 @@ "dev": true }, "diff": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/diff/download/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "diff-match-patch": { @@ -1935,6 +1979,15 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -1977,6 +2030,12 @@ "locate-path": "^3.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", @@ -2058,10 +2117,17 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, "ftp": { "version": "0.3.10", "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", @@ -2426,21 +2492,24 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, "growl": { - "version": "1.9.2", - "resolved": "http://registry.npm.taobao.org/growl/download/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "handlebars": { @@ -2503,9 +2572,9 @@ } }, "he": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/he/download/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "helmet": { @@ -2752,6 +2821,15 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-bluebird": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/is-bluebird/download/is-bluebird-1.0.2.tgz", @@ -2791,11 +2869,32 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -2840,6 +2939,12 @@ "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", @@ -2976,12 +3081,6 @@ "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, - "json3": { - "version": "3.3.2", - "resolved": "http://registry.npm.taobao.org/json3/download/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -3136,68 +3235,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "http://registry.npm.taobao.org/lodash._baseassign/download/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/lodash._basecopy/download/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basecreate": { - "version": "3.0.3", - "resolved": "http://registry.npm.taobao.org/lodash._basecreate/download/lodash._basecreate-3.0.3.tgz", - "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "http://registry.npm.taobao.org/lodash._getnative/download/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "http://registry.npm.taobao.org/lodash._isiterateecall/download/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash.create": { - "version": "3.1.1", - "resolved": "http://registry.npm.taobao.org/lodash.create/download/lodash.create-3.1.1.tgz", - "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true, - "requires": { - "lodash._baseassign": "^3.0.0", - "lodash._basecreate": "^3.0.0", - "lodash._isiterateecall": "^3.0.0" - } - }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/lodash.isarguments/download/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/lodash.isarray/download/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -3229,22 +3271,72 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "http://registry.npm.taobao.org/lodash.keys/download/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "log4js": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", @@ -3530,56 +3622,183 @@ } }, "mocha": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", - "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.3.tgz", + "integrity": "sha512-hnYFrSefHxYS2XFGtN01x8un0EwNu2bzKvhpRFhgoybIvMaOkkL60IVPmkb5h6XDmUl4IMSB+rT5cIO4/4bJgg==", "dev": true, "requires": { - "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "2.6.8", - "diff": "3.2.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.1", - "growl": "1.9.2", - "he": "1.1.1", - "json3": "3.3.2", - "lodash.create": "3.1.1", - "mkdirp": "0.5.1", - "supports-color": "3.1.2" + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.23", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "debug": { - "version": "2.6.8", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, "glob": { - "version": "7.1.1", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.2", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "minimist": "0.0.8" + "isexe": "^2.0.0" } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -3663,6 +3882,12 @@ "lru-cache": "^4.1.3" } }, + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -3754,6 +3979,12 @@ } } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "null-check": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", @@ -3991,6 +4222,12 @@ "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -4301,6 +4538,15 @@ "resolved": "http://registry.npm.taobao.org/rand-token/download/rand-token-0.4.0.tgz", "integrity": "sha1-GlZbatEtkt1LMMTE5ZReiqJKWzs=" }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -4427,6 +4673,15 @@ "util-deprecate": "~1.0.1" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "recursive-readdir": { "version": "2.2.2", "resolved": "http://registry.npm.taobao.org/recursive-readdir/download/recursive-readdir-2.2.2.tgz", @@ -4709,6 +4964,15 @@ } } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "serve-favicon": { "version": "2.4.5", "resolved": "http://registry.npm.taobao.org/serve-favicon/download/serve-favicon-2.4.5.tgz", @@ -4750,30 +5014,30 @@ "integrity": "sha1-+Wb3VVeJdj502IQRk2haXnhzZmU=" }, "should": { - "version": "11.2.1", - "resolved": "http://registry.npm.taobao.org/should/download/should-11.2.1.tgz", - "integrity": "sha1-kPVRRVUtAc/CAGZuToGKHJZw7aI=", + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", "dev": true, "requires": { - "should-equal": "^1.0.0", - "should-format": "^3.0.2", + "should-equal": "^2.0.0", + "should-format": "^3.0.3", "should-type": "^1.4.0", "should-type-adaptors": "^1.0.1", "should-util": "^1.0.0" } }, "should-equal": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/should-equal/download/should-equal-1.0.1.tgz", - "integrity": "sha1-C26VFvJgGp+wuy3MNpr6HH4gCvc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "dev": true, "requires": { - "should-type": "^1.0.0" + "should-type": "^1.4.0" } }, "should-format": { "version": "3.0.3", - "resolved": "http://registry.npm.taobao.org/should-format/download/should-format-3.0.3.tgz", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", "dev": true, "requires": { @@ -4783,14 +5047,14 @@ }, "should-type": { "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/should-type/download/should-type-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", "dev": true }, "should-type-adaptors": { "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/should-type-adaptors/download/should-type-adaptors-1.1.0.tgz", - "integrity": "sha1-QB5/M7VTMDOUTVzYvytlAneS4no=", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "dev": true, "requires": { "should-type": "^1.3.0", @@ -4798,9 +5062,9 @@ } }, "should-util": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/should-util/download/should-util-1.0.0.tgz", - "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", "dev": true }, "slash": { @@ -5184,6 +5448,12 @@ "min-indent": "^1.0.0" } }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "superagent": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", @@ -5312,6 +5582,15 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -5645,6 +5924,48 @@ "isexe": "^2.0.0" } }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "win-release": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", @@ -5680,6 +6001,12 @@ "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, + "workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -5777,6 +6104,38 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", diff --git a/package.json b/package.json index b1402bc3..61d6cc6c 100644 --- a/package.json +++ b/package.json @@ -71,8 +71,8 @@ }, "devDependencies": { "istanbul": "0.4.5", - "mocha": "3.5.3", - "should": "11.2.1", + "mocha": "9.0.3", + "should": "13.2.3", "standard-version": "9.3.1", "supertest": "3.4.2", "supervisor": "0.12.0" From 41520ca54dc1e7cfd0e791e5e0c74111c9fc10b5 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 16:47:37 +0800 Subject: [PATCH 046/347] fix(deps): update slash to v3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59ddf4d2..6b84c540 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5075,9 +5075,9 @@ "dev": true }, "slash": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", - "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "smart-buffer": { "version": "4.2.0", diff --git a/package.json b/package.json index 0722432e..a1fea2ec 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "request": "2.88.2", "sequelize": "4.37.1", "serve-favicon": "2.5.0", - "slash": "2.0.0", + "slash": "3.0.0", "upyun": "3.3.9", "validator": "10.6.0", "yargs": "17.1.1", From 9b195344d52b8eed5689e8a220f86af507c07f13 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 16:53:11 +0800 Subject: [PATCH 047/347] fix(deps): update supertest to v6 --- package-lock.json | 166 +++++++++++++++++++++++++++++++++++++++------- package.json | 2 +- 2 files changed, 144 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b84c540..2a157757 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1884,12 +1884,6 @@ } } }, - "extend": { - "version": "3.0.1", - "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -1952,6 +1946,12 @@ "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fast-safe-stringify": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", + "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==", + "dev": true + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -4001,6 +4001,12 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, "on-finished": { "version": "2.3.0", "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", @@ -5074,6 +5080,17 @@ "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -5462,31 +5479,134 @@ "dev": true }, "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", + "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", "dev": true, "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.2", + "debug": "^4.1.1", + "fast-safe-stringify": "^2.0.7", + "form-data": "^3.0.0", + "formidable": "^1.2.2", + "methods": "^1.1.2", + "mime": "^2.4.6", + "qs": "^6.9.4", + "readable-stream": "^3.6.0", + "semver": "^7.3.2" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "supertest": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.4.2.tgz", - "integrity": "sha512-WZWbwceHUo2P36RoEIdXvmqfs47idNNZjCuJOqDz6rvtkk8ym56aU5oglORCpPeXGxT7l9rkJ41+O1lffQXYSA==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.1.6.tgz", + "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==", "dev": true, "requires": { "methods": "^1.1.2", - "superagent": "^3.8.3" + "superagent": "^6.1.0" } }, "supervisor": { diff --git a/package.json b/package.json index a1fea2ec..5b0c1bea 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "mocha": "9.0.3", "should": "13.2.3", "standard-version": "9.3.1", - "supertest": "3.4.2", + "supertest": "6.1.6", "supervisor": "0.12.0" }, "files": [ From dd2a141f9009be5e2d0bee89768295956585e07d Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 17:00:14 +0800 Subject: [PATCH 048/347] fix: replace deprecated use of Buffer() --- core/middleware.js | 2 +- core/utils/common.js | 2 +- core/utils/qetag.js | 131 +++-- test/api/accessKeys/accessKeys.test.js | 176 +++--- test/api/account/account.test.js | 78 +-- test/api/apps/apps.test.js | 774 +++++++++++++------------ test/api/apps/release.test.js | 408 +++++++------ test/api/index/index.test.js | 2 +- test/api/users/users.test.js | 453 ++++++++------- 9 files changed, 1109 insertions(+), 917 deletions(-) diff --git a/core/middleware.js b/core/middleware.js index 848ced0e..18131551 100644 --- a/core/middleware.js +++ b/core/middleware.js @@ -87,7 +87,7 @@ middleware.checkToken = function (req, res, next) { } } else if (_.eq(authArr[0], "Basic")) { authType = 2; - var b = new Buffer(authArr[1], "base64"); + var b = Buffer.from(authArr[1], "base64"); var user = _.split(b.toString(), ":"); authToken = _.get(user, "1"); } diff --git a/core/utils/common.js b/core/utils/common.js index aa26398c..119b2694 100644 --- a/core/utils/common.js +++ b/core/utils/common.js @@ -17,7 +17,7 @@ module.exports = common; common.detectIsTextFile = function (filePath) { var fd = fs.openSync(filePath, "r"); - var buffer = new Buffer(4096); + var buffer = Buffer.alloc(4096); fs.readSync(fd, buffer, 0, 4096, 0); fs.closeSync(fd); var rs = jschardet.detect(buffer); diff --git a/core/utils/qetag.js b/core/utils/qetag.js index b846bab5..20de48f5 100644 --- a/core/utils/qetag.js +++ b/core/utils/qetag.js @@ -1,79 +1,78 @@ // 计算文件的eTag,参数为buffer或者readableStream或者文件路径 -function getEtag(buffer,callback){ +function getEtag(buffer, callback) { + // 判断传入的参数是buffer还是stream还是filepath + var mode = "buffer"; - // 判断传入的参数是buffer还是stream还是filepath - var mode = 'buffer'; + if (typeof buffer === "string") { + buffer = require("fs").createReadStream(buffer); + mode = "stream"; + } else if (buffer instanceof require("stream")) { + mode = "stream"; + } - if(typeof buffer === 'string'){ - buffer = require('fs').createReadStream(buffer); - mode='stream'; - }else if(buffer instanceof require('stream')){ - mode='stream'; - } + // sha1算法 + var sha1 = function (content) { + var crypto = require("crypto"); + var sha1 = crypto.createHash("sha1"); + sha1.update(content); + return sha1.digest(); + }; - // sha1算法 - var sha1 = function(content){ - var crypto = require('crypto'); - var sha1 = crypto.createHash('sha1'); - sha1.update(content); - return sha1.digest(); - }; + // 以4M为单位分割 + var blockSize = 4 * 1024 * 1024; + var sha1String = []; + var prefix = 0x16; + var blockCount = 0; - // 以4M为单位分割 - var blockSize = 4*1024*1024; - var sha1String = []; - var prefix = 0x16; - var blockCount = 0; + switch (mode) { + case "buffer": + var bufferSize = buffer.length; + blockCount = Math.ceil(bufferSize / blockSize); - switch(mode){ - case 'buffer': - var bufferSize = buffer.length; - blockCount = Math.ceil(bufferSize / blockSize); + for (var i = 0; i < blockCount; i++) { + sha1String.push(sha1(buffer.slice(i * blockSize, (i + 1) * blockSize))); + } + process.nextTick(function () { + callback(calcEtag()); + }); + break; + case "stream": + var stream = buffer; + stream.on("readable", function () { + var chunk; + while ((chunk = stream.read(blockSize))) { + sha1String.push(sha1(chunk)); + blockCount++; + } + }); + stream.on("end", function () { + callback(calcEtag()); + }); + break; + } - for(var i=0;i 1) { + prefix = 0x96; + sha1Buffer = sha1(sha1Buffer); + } - // 如果大于4M,则对各个块的sha1结果再次sha1 - if(blockCount > 1){ - prefix = 0x96; - sha1Buffer = sha1(sha1Buffer); - } - - sha1Buffer = Buffer.concat( - [new Buffer([prefix]),sha1Buffer], - sha1Buffer.length + 1 - ); - - return sha1Buffer.toString('base64') - .replace(/\//g,'_').replace(/\+/g,'-'); - - } + sha1Buffer = Buffer.concat( + [Buffer.from([prefix]), sha1Buffer], + sha1Buffer.length + 1 + ); + return sha1Buffer + .toString("base64") + .replace(/\//g, "_") + .replace(/\+/g, "-"); + } } module.exports = getEtag; diff --git a/test/api/accessKeys/accessKeys.test.js b/test/api/accessKeys/accessKeys.test.js index 69dc2fd6..91392a73 100644 --- a/test/api/accessKeys/accessKeys.test.js +++ b/test/api/accessKeys/accessKeys.test.js @@ -1,93 +1,121 @@ -var app = require('../../../app'); -var request = require('supertest')(app); +var app = require("../../../app"); +var request = require("supertest")(app); var should = require("should"); -var security = require('../../../core/utils/security'); -var factory = require('../../../core/utils/factory'); -var _ = require('lodash'); +var security = require("../../../core/utils/security"); +var factory = require("../../../core/utils/factory"); +var _ = require("lodash"); -describe('api/accessKeys/accessKeys.test.js', function() { - var account = '522539441@qq.com'; - var password = '123456'; +describe("api/accessKeys/accessKeys.test.js", function () { + var account = "522539441@qq.com"; + var password = "123456"; var authToken; - var friendlyName = 'test'; - var newFriendlyName = 'newtest'; - before(function(done){ - request.post('/auth/login') - .send({ - account: account, - password: password - }) - .end(function(err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({status:"OK"}); - authToken = (new Buffer(`auth:${_.get(rs, 'results.tokens')}`)).toString('base64'); - done(); - }); - }); - - describe('create accessKeys', function(done) { - it('should create accessKeys successful', function(done) { - request.post(`/accessKeys`) - .set('Authorization', `Basic ${authToken}`) - .send({createdBy: 'tablee', friendlyName: friendlyName, ttl: 30*24*60*60}) - .end(function(err, res) { + var friendlyName = "test"; + var newFriendlyName = "newtest"; + before(function (done) { + request + .post("/auth/login") + .send({ + account: account, + password: password, + }) + .end(function (err, res) { should.not.exist(err); - res.status.should.equal(200); var rs = JSON.parse(res.text); - rs.should.have.properties('accessKey'); - rs.accessKey.should.have.properties(['name', 'createdTime', 'createdBy', - 'expires', 'description', 'friendlyName']); + rs.should.containEql({ status: "OK" }); + authToken = Buffer.from(`auth:${_.get(rs, "results.tokens")}`).toString( + "base64" + ); done(); }); + }); + + describe("create accessKeys", function (done) { + it("should create accessKeys successful", function (done) { + request + .post(`/accessKeys`) + .set("Authorization", `Basic ${authToken}`) + .send({ + createdBy: "tablee", + friendlyName: friendlyName, + ttl: 30 * 24 * 60 * 60, + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("accessKey"); + rs.accessKey.should.have.properties([ + "name", + "createdTime", + "createdBy", + "expires", + "description", + "friendlyName", + ]); + done(); + }); }); - it('should not create accessKeys successful when friendlyName exist', function(done) { - request.post(`/accessKeys`) - .set('Authorization', `Basic ${authToken}`) - .send({createdBy: 'tablee', friendlyName: friendlyName, ttl: 30*24*60*60}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`The access key "${friendlyName}" already exists.`); - done(); - }); + it("should not create accessKeys successful when friendlyName exist", function (done) { + request + .post(`/accessKeys`) + .set("Authorization", `Basic ${authToken}`) + .send({ + createdBy: "tablee", + friendlyName: friendlyName, + ttl: 30 * 24 * 60 * 60, + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal( + `The access key "${friendlyName}" already exists.` + ); + done(); + }); }); }); - describe('list accessKeys', function(done) { - it('should list accessKeys successful', function(done) { - request.get(`/accessKeys`) - .set('Authorization', `Basic ${authToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('accessKeys'); - rs.accessKeys.should.be.an.instanceOf(Array); - rs.accessKeys.should.matchEach(function(it) { - return it.should.have.properties(['name', 'createdTime', 'createdBy', - 'expires', 'description', 'friendlyName']); + describe("list accessKeys", function (done) { + it("should list accessKeys successful", function (done) { + request + .get(`/accessKeys`) + .set("Authorization", `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("accessKeys"); + rs.accessKeys.should.be.an.instanceOf(Array); + rs.accessKeys.should.matchEach(function (it) { + return it.should.have.properties([ + "name", + "createdTime", + "createdBy", + "expires", + "description", + "friendlyName", + ]); + }); + done(); }); - done(); - }); }); }); - describe('delete accessKeys', function(done) { - it('should delete accessKeys successful', function(done) { - request.delete(`/accessKeys/${encodeURI(newFriendlyName)}`) - .set('Authorization', `Basic ${authToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('friendlyName'); - done(); - }); + describe("delete accessKeys", function (done) { + it("should delete accessKeys successful", function (done) { + request + .delete(`/accessKeys/${encodeURI(newFriendlyName)}`) + .set("Authorization", `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("friendlyName"); + done(); + }); }); }); - }); diff --git a/test/api/account/account.test.js b/test/api/account/account.test.js index 62e262a3..d52b9fb0 100644 --- a/test/api/account/account.test.js +++ b/test/api/account/account.test.js @@ -1,45 +1,51 @@ -var app = require('../../../app'); -var request = require('supertest')(app); +var app = require("../../../app"); +var request = require("supertest")(app); var should = require("should"); -var security = require('../../../core/utils/security'); -var factory = require('../../../core/utils/factory'); -var _ = require('lodash'); +var security = require("../../../core/utils/security"); +var factory = require("../../../core/utils/factory"); +var _ = require("lodash"); -describe('api/account/account.test.js', function() { - var account = '522539441@qq.com'; - var password = '123456'; +describe("api/account/account.test.js", function () { + var account = "522539441@qq.com"; + var password = "123456"; - describe('user modules', function(done) { + describe("user modules", function (done) { var authToken; - before(function(done){ - request.post('/auth/login') - .send({ - account: account, - password: password - }) - .end(function(err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({status:"OK"}); - authToken = (new Buffer(`auth:${_.get(rs, 'results.tokens')}`)).toString('base64'); - done(); - }); + before(function (done) { + request + .post("/auth/login") + .send({ + account: account, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: "OK" }); + authToken = Buffer.from( + `auth:${_.get(rs, "results.tokens")}` + ).toString("base64"); + done(); + }); }); - it('should get account info successful', function(done) { - request.get(`/account`) - .set('Authorization', `Basic ${authToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('account'); - rs.account.should.have.properties(['email', 'linkedProviders', 'name']); - done(); - }); + it("should get account info successful", function (done) { + request + .get(`/account`) + .set("Authorization", `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("account"); + rs.account.should.have.properties([ + "email", + "linkedProviders", + "name", + ]); + done(); + }); }); - }); - }); diff --git a/test/api/apps/apps.test.js b/test/api/apps/apps.test.js index d393a42f..95bb77fd 100644 --- a/test/api/apps/apps.test.js +++ b/test/api/apps/apps.test.js @@ -1,444 +1,502 @@ -var app = require('../../../app'); -var request = require('supertest')(app); +var app = require("../../../app"); +var request = require("supertest")(app); var should = require("should"); -var security = require('../../../core/utils/security'); -var factory = require('../../../core/utils/factory'); -var _ = require('lodash'); - -describe('api/apps/apps.test.js', function() { - var account = '522539441@qq.com'; - var email = 'lisong2010@gmail.com'; - var emailInvalid = 'lisong2010'; - var password = '123456'; +var security = require("../../../core/utils/security"); +var factory = require("../../../core/utils/factory"); +var _ = require("lodash"); + +describe("api/apps/apps.test.js", function () { + var account = "522539441@qq.com"; + var email = "lisong2010@gmail.com"; + var emailInvalid = "lisong2010"; + var password = "123456"; var authToken; var machineName = `Login-${Math.random()}`; var friendlyName = `Login-${Math.random()}`; - var appName = 'test'; - var newAppName = 'newtest'; + var appName = "test"; + var newAppName = "newtest"; var bearerToken; - var testDeployment = 'test'; - var newTestDeployment = 'newtest'; - - before(function(done){ - request.post('/auth/login') - .send({ - account: account, - password: password - }) - .end(function(err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({status:"OK"}); - authToken = (new Buffer(`auth:${_.get(rs, 'results.tokens')}`)).toString('base64'); - done(); - }); - }); + var testDeployment = "test"; + var newTestDeployment = "newtest"; - describe('create accessKeys', function(done) { - it('should create accessKeys successful', function(done) { - request.post(`/accessKeys`) - .set('Authorization', `Basic ${authToken}`) - .send({createdBy: machineName, friendlyName: friendlyName, ttl: 30*24*60*60}) - .end(function(err, res) { + before(function (done) { + request + .post("/auth/login") + .send({ + account: account, + password: password, + }) + .end(function (err, res) { should.not.exist(err); - res.status.should.equal(200); var rs = JSON.parse(res.text); - rs.should.have.properties('accessKey'); - rs.accessKey.should.have.properties(['name', 'createdTime', 'createdBy', - 'expires', 'description', 'friendlyName']); - bearerToken = _.get(rs, 'accessKey.name'); + rs.should.containEql({ status: "OK" }); + authToken = Buffer.from(`auth:${_.get(rs, "results.tokens")}`).toString( + "base64" + ); done(); }); + }); + + describe("create accessKeys", function (done) { + it("should create accessKeys successful", function (done) { + request + .post(`/accessKeys`) + .set("Authorization", `Basic ${authToken}`) + .send({ + createdBy: machineName, + friendlyName: friendlyName, + ttl: 30 * 24 * 60 * 60, + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("accessKey"); + rs.accessKey.should.have.properties([ + "name", + "createdTime", + "createdBy", + "expires", + "description", + "friendlyName", + ]); + bearerToken = _.get(rs, "accessKey.name"); + done(); + }); }); }); - describe('add apps', function(done) { - it('should not add apps successful when appName is empty', function(done) { - request.post(`/apps`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`Please input name!`); - done(); - }); + describe("add apps", function (done) { + it("should not add apps successful when appName is empty", function (done) { + request + .post(`/apps`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({}) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`Please input name!`); + done(); + }); }); - it('should add apps successful', function(done) { - request.post(`/apps`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({name: appName, os:'iOS', platform:'React-Native'}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('app'); - rs.app.should.have.properties(['name', 'collaborators']); - done(); - }); + it("should add apps successful", function (done) { + request + .post(`/apps`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({ name: appName, os: "iOS", platform: "React-Native" }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("app"); + rs.app.should.have.properties(["name", "collaborators"]); + done(); + }); }); - it('should not add apps successful when appName exists', function(done) { - request.post(`/apps`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({name: appName, os:'iOS', platform:'React-Native'}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`${appName} Exist!`); - done(); - }); + it("should not add apps successful when appName exists", function (done) { + request + .post(`/apps`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({ name: appName, os: "iOS", platform: "React-Native" }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`${appName} Exist!`); + done(); + }); }); }); - describe('list apps', function(done) { - it('should list apps successful', function(done) { - request.get(`/apps`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('apps'); - rs.apps.should.be.an.instanceOf(Array); - rs.apps.should.matchEach(function(it) { - return it.should.have.properties(['collaborators', 'deployments', 'name']); + describe("list apps", function (done) { + it("should list apps successful", function (done) { + request + .get(`/apps`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("apps"); + rs.apps.should.be.an.instanceOf(Array); + rs.apps.should.matchEach(function (it) { + return it.should.have.properties([ + "collaborators", + "deployments", + "name", + ]); + }); + done(); }); - done(); - }); }); }); - describe('list apps all deployments', function(done) { - it('should list apps all deployments successful', function(done) { - request.get(`/apps/${appName}/deployments`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('deployments'); - rs.deployments.should.be.an.instanceOf(Array); - rs.deployments.should.matchEach(function(it) { - return it.should.have.properties(['createdTime', 'id', 'key', 'name', 'package']); + describe("list apps all deployments", function (done) { + it("should list apps all deployments successful", function (done) { + request + .get(`/apps/${appName}/deployments`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("deployments"); + rs.deployments.should.be.an.instanceOf(Array); + rs.deployments.should.matchEach(function (it) { + return it.should.have.properties([ + "createdTime", + "id", + "key", + "name", + "package", + ]); + }); + done(); }); - done(); - }); }); }); - describe(`create deployments ${testDeployment}`, function(done) { - it('should create deployments successful', function(done) { - request.post(`/apps/${appName}/deployments`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({name: testDeployment}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('deployment'); - rs.deployment.should.have.properties(['key', 'name']); - done(); - }); + describe(`create deployments ${testDeployment}`, function (done) { + it("should create deployments successful", function (done) { + request + .post(`/apps/${appName}/deployments`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({ name: testDeployment }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("deployment"); + rs.deployment.should.have.properties(["key", "name"]); + done(); + }); }); - it('should not create deployments successful when deployment exists', function(done) { - request.post(`/apps/${appName}/deployments`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({name: testDeployment}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`${testDeployment} name does Exist!`); - done(); - }); + it("should not create deployments successful when deployment exists", function (done) { + request + .post(`/apps/${appName}/deployments`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({ name: testDeployment }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`${testDeployment} name does Exist!`); + done(); + }); }); }); - describe(`rename deployments ${testDeployment}`, function(done) { - it('should rename deployments successful', function(done) { - request.patch(`/apps/${appName}/deployments/${testDeployment}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({name: newTestDeployment}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('deployment'); - rs.deployment.should.have.properties(['name']); - done(); - }); + describe(`rename deployments ${testDeployment}`, function (done) { + it("should rename deployments successful", function (done) { + request + .patch(`/apps/${appName}/deployments/${testDeployment}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({ name: newTestDeployment }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("deployment"); + rs.deployment.should.have.properties(["name"]); + done(); + }); }); - it('should not rename deployments successful when new deployments name does exists', function(done) { - request.patch(`/apps/${appName}/deployments/${testDeployment}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({name: newTestDeployment}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`${newTestDeployment} name does Exist!`); - done(); - }); + it("should not rename deployments successful when new deployments name does exists", function (done) { + request + .patch(`/apps/${appName}/deployments/${testDeployment}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({ name: newTestDeployment }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`${newTestDeployment} name does Exist!`); + done(); + }); }); - it('should not rename deployments successful when deployments name does not exists', function(done) { - request.patch(`/apps/${appName}/deployments/${testDeployment}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({name: 'hello'}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`does not find the deployment "${testDeployment}"`); - done(); - }); + it("should not rename deployments successful when deployments name does not exists", function (done) { + request + .patch(`/apps/${appName}/deployments/${testDeployment}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({ name: "hello" }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal( + `does not find the deployment "${testDeployment}"` + ); + done(); + }); }); }); - describe(`delete deployments ${newTestDeployment}`, function(done) { - it('should delete deployments successful', function(done) { - request.delete(`/apps/${appName}/deployments/${newTestDeployment}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('deployment'); - rs.deployment.should.have.properties(['name']); - done(); - }); + describe(`delete deployments ${newTestDeployment}`, function (done) { + it("should delete deployments successful", function (done) { + request + .delete(`/apps/${appName}/deployments/${newTestDeployment}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("deployment"); + rs.deployment.should.have.properties(["name"]); + done(); + }); }); - it(`should not delete deployments successful when ${newTestDeployment} not exists`, function(done) { - request.delete(`/apps/${appName}/deployments/${newTestDeployment}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`does not find the deployment "${newTestDeployment}"`); - done(); - }); + it(`should not delete deployments successful when ${newTestDeployment} not exists`, function (done) { + request + .delete(`/apps/${appName}/deployments/${newTestDeployment}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal( + `does not find the deployment "${newTestDeployment}"` + ); + done(); + }); }); }); - describe(`add collaborators`, function(done) { - it(`should not add collaborators successful when ${emailInvalid} invalid`, function(done) { - request.post(`/apps/${appName}/collaborators/${emailInvalid}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`Invalid Email!`); - done(); - }); + describe(`add collaborators`, function (done) { + it(`should not add collaborators successful when ${emailInvalid} invalid`, function (done) { + request + .post(`/apps/${appName}/collaborators/${emailInvalid}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`Invalid Email!`); + done(); + }); }); - it('should add collaborators successful', function(done) { - request.post(`/apps/${appName}/collaborators/${email}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + it("should add collaborators successful", function (done) { + request + .post(`/apps/${appName}/collaborators/${email}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); - it(`should not add collaborators successful when ${email} is already a collaborators`, function(done) { - request.post(`/apps/${appName}/collaborators/${email}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`user already is Collaborator.`); - done(); - }); + it(`should not add collaborators successful when ${email} is already a collaborators`, function (done) { + request + .post(`/apps/${appName}/collaborators/${email}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`user already is Collaborator.`); + done(); + }); }); }); - describe(`list collaborators`, function(done) { - it('should list collaborators successful', function(done) { - request.get(`/apps/${appName}/collaborators`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('collaborators'); - done(); - }); + describe(`list collaborators`, function (done) { + it("should list collaborators successful", function (done) { + request + .get(`/apps/${appName}/collaborators`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("collaborators"); + done(); + }); }); }); - describe(`delete collaborators`, function(done) { - it(`should not delete collaborators successful when ${emailInvalid} invalid`, function(done) { - request.delete(`/apps/${appName}/collaborators/${emailInvalid}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`Invalid Email!`); - done(); - }); + describe(`delete collaborators`, function (done) { + it(`should not delete collaborators successful when ${emailInvalid} invalid`, function (done) { + request + .delete(`/apps/${appName}/collaborators/${emailInvalid}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`Invalid Email!`); + done(); + }); }); - it(`should not delete collaborators successful when email is yourself`, function(done) { - request.delete(`/apps/${appName}/collaborators/${account}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`can't delete yourself!`); - done(); - }); + it(`should not delete collaborators successful when email is yourself`, function (done) { + request + .delete(`/apps/${appName}/collaborators/${account}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`can't delete yourself!`); + done(); + }); }); - it('should delete collaborators successful', function(done) { - request.delete(`/apps/${appName}/collaborators/${email}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + it("should delete collaborators successful", function (done) { + request + .delete(`/apps/${appName}/collaborators/${email}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); - it(`should not delete collaborators successful when ${email} is not a collaborators`, function(done) { - request.delete(`/apps/${appName}/collaborators/${email}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`user is not a Collaborator`); - done(); - }); + it(`should not delete collaborators successful when ${email} is not a collaborators`, function (done) { + request + .delete(`/apps/${appName}/collaborators/${email}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`user is not a Collaborator`); + done(); + }); }); }); - describe(`transfer apps`, function(done) { + describe(`transfer apps`, function (done) { var authTokenOther; - before(function(done){ - request.post('/auth/login') - .send({ - account: email, - password: password - }) - .end(function(err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({status:"OK"}); - authTokenOther = (new Buffer(`auth:${_.get(rs, 'results.tokens')}`)).toString('base64'); - done(); - }); + before(function (done) { + request + .post("/auth/login") + .send({ + account: email, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: "OK" }); + authTokenOther = Buffer.from( + `auth:${_.get(rs, "results.tokens")}` + ).toString("base64"); + done(); + }); }); - it(`should not transfer apps successful when ${emailInvalid} invalid`, function(done) { - request.post(`/apps/${appName}/transfer/${emailInvalid}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`Invalid Email!`); - done(); - }); + it(`should not transfer apps successful when ${emailInvalid} invalid`, function (done) { + request + .post(`/apps/${appName}/transfer/${emailInvalid}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`Invalid Email!`); + done(); + }); }); - it(`should not transfer apps successful when email is yourself`, function(done) { - request.post(`/apps/${appName}/transfer/${account}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`You can't transfer to yourself!`); - done(); - }); + it(`should not transfer apps successful when email is yourself`, function (done) { + request + .post(`/apps/${appName}/transfer/${account}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`You can't transfer to yourself!`); + done(); + }); }); - it(`should transfer apps successful`, function(done) { - request.post(`/apps/${appName}/transfer/${email}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + it(`should transfer apps successful`, function (done) { + request + .post(`/apps/${appName}/transfer/${email}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); - it(`should transfer apps back successful`, function(done) { - request.post(`/apps/${appName}/transfer/${account}`) - .set('Authorization', `Basic ${authTokenOther}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + it(`should transfer apps back successful`, function (done) { + request + .post(`/apps/${appName}/transfer/${account}`) + .set("Authorization", `Basic ${authTokenOther}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - describe(`rename apps`, function(done) { - it(`should not rename apps successful when new name is invalid`, function(done) { - request.patch(`/apps/${appName}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`Please input name!`); - done(); - }); + describe(`rename apps`, function (done) { + it(`should not rename apps successful when new name is invalid`, function (done) { + request + .patch(`/apps/${appName}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`Please input name!`); + done(); + }); }); - it(`should not rename apps successful when new name does exists`, function(done) { - request.patch(`/apps/${appName}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({name: appName}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`${appName} Exist!`); - done(); - }); + it(`should not rename apps successful when new name does exists`, function (done) { + request + .patch(`/apps/${appName}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({ name: appName }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`${appName} Exist!`); + done(); + }); }); - it(`should rename apps successful`, function(done) { - request.patch(`/apps/${appName}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({name: newAppName}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + it(`should rename apps successful`, function (done) { + request + .patch(`/apps/${appName}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({ name: newAppName }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - describe(`delete apps`, function(done) { - it(`should delete apps successful`, function(done) { - request.delete(`/apps/${newAppName}`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + describe(`delete apps`, function (done) { + it(`should delete apps successful`, function (done) { + request + .delete(`/apps/${newAppName}`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - }); diff --git a/test/api/apps/release.test.js b/test/api/apps/release.test.js index 00eb698d..890490b6 100644 --- a/test/api/apps/release.test.js +++ b/test/api/apps/release.test.js @@ -1,228 +1,278 @@ -var app = require('../../../app'); -var request = require('supertest')(app); +var app = require("../../../app"); +var request = require("supertest")(app); var should = require("should"); var path = require("path"); -var security = require('../../../core/utils/security'); -var factory = require('../../../core/utils/factory'); -var _ = require('lodash'); +var security = require("../../../core/utils/security"); +var factory = require("../../../core/utils/factory"); +var _ = require("lodash"); const SLEEP_TIME = 5000; -describe('api/apps/release.test.js', function() { - var account = '522539441@qq.com'; - var password = '123456'; +describe("api/apps/release.test.js", function () { + var account = "522539441@qq.com"; + var password = "123456"; var authToken; var machineName = `Login-${Math.random()}`; var friendlyName = `Login-${Math.random()}`; - var appName = 'Demo-ios'; + var appName = "Demo-ios"; var bearerToken; - before(function(done){ - request.post('/auth/login') - .send({ - account: account, - password: password - }) - .end(function(err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({status:"OK"}); - authToken = (new Buffer(`auth:${_.get(rs, 'results.tokens')}`)).toString('base64'); - done(); - }); - }); - - describe('create accessKeys', function(done) { - it('should create accessKeys successful', function(done) { - request.post(`/accessKeys`) - .set('Authorization', `Basic ${authToken}`) - .send({createdBy: machineName, friendlyName: friendlyName, ttl: 30*24*60*60}) - .end(function(err, res) { + before(function (done) { + request + .post("/auth/login") + .send({ + account: account, + password: password, + }) + .end(function (err, res) { should.not.exist(err); - res.status.should.equal(200); var rs = JSON.parse(res.text); - rs.should.have.properties('accessKey'); - rs.accessKey.should.have.properties(['name', 'createdTime', 'createdBy', - 'expires', 'description', 'friendlyName']); - bearerToken = _.get(rs, 'accessKey.name'); + rs.should.containEql({ status: "OK" }); + authToken = Buffer.from(`auth:${_.get(rs, "results.tokens")}`).toString( + "base64" + ); done(); }); - }); }); - describe('add apps', function(done) { - it('should add apps successful', function(done) { - request.post(`/apps`) - .set('Authorization', `Bearer ${bearerToken}`) - .send({name: appName, os:'iOS', platform:'React-Native'}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('app'); - rs.app.should.have.properties(['name', 'collaborators']); - done(); - }); + describe("create accessKeys", function (done) { + it("should create accessKeys successful", function (done) { + request + .post(`/accessKeys`) + .set("Authorization", `Basic ${authToken}`) + .send({ + createdBy: machineName, + friendlyName: friendlyName, + ttl: 30 * 24 * 60 * 60, + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("accessKey"); + rs.accessKey.should.have.properties([ + "name", + "createdTime", + "createdBy", + "expires", + "description", + "friendlyName", + ]); + bearerToken = _.get(rs, "accessKey.name"); + done(); + }); }); }); - describe('release apps', function(done) { - it('should release apps successful', function(done) { - request.post(`/apps/${appName}/deployments/Staging/release`) - .set('Authorization', `Bearer ${bearerToken}`) - .attach('package', path.resolve(__dirname, './bundle.zip')) - .field('packageInfo', `{"appVersion": "1.0.0", "description": "test", "isMandatory": false}`) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + describe("add apps", function (done) { + it("should add apps successful", function (done) { + request + .post(`/apps`) + .set("Authorization", `Bearer ${bearerToken}`) + .send({ name: appName, os: "iOS", platform: "React-Native" }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("app"); + rs.app.should.have.properties(["name", "collaborators"]); + done(); + }); }); + }); - it('should release apps v2 successful', function(done) { - request.post(`/apps/${appName}/deployments/Staging/release`) - .set('Authorization', `Bearer ${bearerToken}`) - .attach('package', path.resolve(__dirname, './bundle_v2.zip')) - .field('packageInfo', `{"appVersion": "1.0.0", "description": "test", "isMandatory": false}`) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - setTimeout(function(){ + describe("release apps", function (done) { + it("should release apps successful", function (done) { + request + .post(`/apps/${appName}/deployments/Staging/release`) + .set("Authorization", `Bearer ${bearerToken}`) + .attach("package", path.resolve(__dirname, "./bundle.zip")) + .field( + "packageInfo", + `{"appVersion": "1.0.0", "description": "test", "isMandatory": false}` + ) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); done(); - }, SLEEP_TIME); - }); + }); }); - }); - describe('promote apps', function(done) { - it('should promote apps successful', function(done) { - request.post(`/apps/${appName}/deployments/Staging/promote/Production`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - res.status.should.equal(200); - done(); - }); + it("should release apps v2 successful", function (done) { + request + .post(`/apps/${appName}/deployments/Staging/release`) + .set("Authorization", `Bearer ${bearerToken}`) + .attach("package", path.resolve(__dirname, "./bundle_v2.zip")) + .field( + "packageInfo", + `{"appVersion": "1.0.0", "description": "test", "isMandatory": false}` + ) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + setTimeout(function () { + done(); + }, SLEEP_TIME); + }); }); }); - describe('rollback deployments', function(done) { - it('should rollback deployments successful when point labels', function(done) { - request.post(`/apps/${appName}/deployments/Staging/rollback/v1`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`ok`); - setTimeout(function(){ + describe("promote apps", function (done) { + it("should promote apps successful", function (done) { + request + .post(`/apps/${appName}/deployments/Staging/promote/Production`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + res.status.should.equal(200); done(); - }, SLEEP_TIME); - }); + }); }); + }); - it('should rollback deployments successful', function(done) { - request.post(`/apps/${appName}/deployments/Staging/rollback`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`ok`); - setTimeout(function(){ - done(); - }, SLEEP_TIME); - }); + describe("rollback deployments", function (done) { + it("should rollback deployments successful when point labels", function (done) { + request + .post(`/apps/${appName}/deployments/Staging/rollback/v1`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`ok`); + setTimeout(function () { + done(); + }, SLEEP_TIME); + }); + }); + + it("should rollback deployments successful", function (done) { + request + .post(`/apps/${appName}/deployments/Staging/rollback`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`ok`); + setTimeout(function () { + done(); + }, SLEEP_TIME); + }); }); }); - describe('show deployments history', function(done) { - it('should not show deployments history successful where deployments does not exist', function(done) { - request.get(`/apps/${appName}/deployments/Test/history`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`does not find the deployment`); - done(); - }); + describe("show deployments history", function (done) { + it("should not show deployments history successful where deployments does not exist", function (done) { + request + .get(`/apps/${appName}/deployments/Test/history`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`does not find the deployment`); + done(); + }); }); - it('should show deployments history successful', function(done) { - request.get(`/apps/${appName}/deployments/Staging/history`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('history'); - rs.history.should.be.an.instanceOf(Array); - rs.history.should.matchEach(function(it) { - return it.should.have.properties([ - 'description','isDisabled','isMandatory','rollout','appVersion','packageHash', - 'blobUrl','size','manifestBlobUrl','diffPackageMap','releaseMethod','uploadTime', - 'originalLabel','originalDeployment','label','releasedBy' - ]); + it("should show deployments history successful", function (done) { + request + .get(`/apps/${appName}/deployments/Staging/history`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("history"); + rs.history.should.be.an.instanceOf(Array); + rs.history.should.matchEach(function (it) { + return it.should.have.properties([ + "description", + "isDisabled", + "isMandatory", + "rollout", + "appVersion", + "packageHash", + "blobUrl", + "size", + "manifestBlobUrl", + "diffPackageMap", + "releaseMethod", + "uploadTime", + "originalLabel", + "originalDeployment", + "label", + "releasedBy", + ]); + }); + done(); }); - done(); - }); }); }); - describe('delete deployments history', function(done) { - it('should not delete deployments history successful where deployments does not exist', function(done) { - request.delete(`/apps/${appName}/deployments/Test/history`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`does not find the deployment`); - done(); - }); + describe("delete deployments history", function (done) { + it("should not delete deployments history successful where deployments does not exist", function (done) { + request + .delete(`/apps/${appName}/deployments/Test/history`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`does not find the deployment`); + done(); + }); }); - it('should delete deployments history successful', function(done) { - request.delete(`/apps/${appName}/deployments/Staging/history`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`ok`); - done(); - }); + it("should delete deployments history successful", function (done) { + request + .delete(`/apps/${appName}/deployments/Staging/history`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`ok`); + done(); + }); }); }); - describe('show deployments metrics', function(done) { - it('should not show deployments metrics successful where deployments does not exist', function(done) { - request.get(`/apps/${appName}/deployments/Test/metrics`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + describe("show deployments metrics", function (done) { + it("should not show deployments metrics successful where deployments does not exist", function (done) { + request + .get(`/apps/${appName}/deployments/Test/metrics`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); - it('should show deployments metrics successful', function(done) { - request.get(`/apps/${appName}/deployments/Staging/metrics`) - .set('Authorization', `Bearer ${bearerToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties('metrics'); - rs.metrics.should.be.an.instanceOf(Object); - rs.metrics.should.matchEach(function(it) { - return it.should.have.properties(['active','downloaded','failed','installed']); + it("should show deployments metrics successful", function (done) { + request + .get(`/apps/${appName}/deployments/Staging/metrics`) + .set("Authorization", `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties("metrics"); + rs.metrics.should.be.an.instanceOf(Object); + rs.metrics.should.matchEach(function (it) { + return it.should.have.properties([ + "active", + "downloaded", + "failed", + "installed", + ]); + }); + done(); }); - done(); - }); }); }); }); diff --git a/test/api/index/index.test.js b/test/api/index/index.test.js index c21bfbab..f772ea60 100644 --- a/test/api/index/index.test.js +++ b/test/api/index/index.test.js @@ -22,7 +22,7 @@ describe("api/index/index.test.js", function () { should.not.exist(err); var rs = JSON.parse(res.text); rs.should.containEql({ status: "OK" }); - authToken = new Buffer(`auth:${_.get(rs, "results.tokens")}`).toString( + authToken = Buffer.from(`auth:${_.get(rs, "results.tokens")}`).toString( "base64" ); done(); diff --git a/test/api/users/users.test.js b/test/api/users/users.test.js index 2b936dbf..20f788e0 100644 --- a/test/api/users/users.test.js +++ b/test/api/users/users.test.js @@ -1,257 +1,308 @@ -var app = require('../../../app'); -var request = require('supertest')(app); +var app = require("../../../app"); +var request = require("supertest")(app); var should = require("should"); -var security = require('../../../core/utils/security'); -var factory = require('../../../core/utils/factory'); -var _ = require('lodash'); +var security = require("../../../core/utils/security"); +var factory = require("../../../core/utils/factory"); +var _ = require("lodash"); -describe('api/users/users.test.js', function() { - var accountExist = 'lisong2010@gmail.com'; - var account = '522539441@qq.com'; +describe("api/users/users.test.js", function () { + var accountExist = "lisong2010@gmail.com"; + var account = "522539441@qq.com"; var registerKey = `REGISTER_CODE_${security.md5(account)}`; - var password = '654321'; - var newPassword = '123456'; + var password = "654321"; + var newPassword = "123456"; - describe('check email does exists', function(done) { - it('should not check email successful when not input email', function(done) { - request.get(`/users/exists`) - .send() - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"ERROR", message: "请您输入邮箱地址"}); - done(); - }); + describe("check email does exists", function (done) { + it("should not check email successful when not input email", function (done) { + request + .get(`/users/exists`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: "ERROR", + message: "请您输入邮箱地址", + }); + done(); + }); }); - it('should not exists account when sign up', function(done) { - request.get(`/users/exists?email=${account}`) - .send() - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"OK", exists: false}); - done(); - }); + it("should not exists account when sign up", function (done) { + request + .get(`/users/exists?email=${account}`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: "OK", + exists: false, + }); + done(); + }); }); - }); - describe('send register code to email', function(done) { - it('should not send register code successful when not input email', function(done) { - request.post(`/users/registerCode`) - .send({}) - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"ERROR", message: "请您输入邮箱地址"}); - done(); - }); + describe("send register code to email", function (done) { + it("should not send register code successful when not input email", function (done) { + request + .post(`/users/registerCode`) + .send({}) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: "ERROR", + message: "请您输入邮箱地址", + }); + done(); + }); }); - it('should not send register code successful when email already exists', function(done) { - request.post(`/users/registerCode`) - .send({email: accountExist}) - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"ERROR", message: `"${accountExist}" 已经注册过,请更换邮箱注册`}); - done(); - }); + it("should not send register code successful when email already exists", function (done) { + request + .post(`/users/registerCode`) + .send({ email: accountExist }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: "ERROR", + message: `"${accountExist}" 已经注册过,请更换邮箱注册`, + }); + done(); + }); }); - it('should send register successful', function(done) { - request.post(`/users/registerCode`) - .send({email: account}) - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"OK"}); - done(); - }); + it("should send register successful", function (done) { + request + .post(`/users/registerCode`) + .send({ email: account }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ status: "OK" }); + done(); + }); }); - }); - describe('check register code', function(done) { - var token = 'invalid token'; - var account2 = '522539441@qq.com2'; + describe("check register code", function (done) { + var token = "invalid token"; + var account2 = "522539441@qq.com2"; var storageToken; - before(function(done){ + before(function (done) { var client = factory.getRedisClient("default"); - client.getAsync(registerKey) - .then(function (t) { - storageToken = t; - done(); - }) - .finally(() => client.quit()); + client + .getAsync(registerKey) + .then(function (t) { + storageToken = t; + done(); + }) + .finally(() => client.quit()); }); - it('should not check register code successful when email already exists', function(done) { - request.get(`/users/registerCode/exists?email=${accountExist}`) - .send() - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"ERROR", message: `"${accountExist}" 已经注册过,请更换邮箱注册`}); - done(); - }); + it("should not check register code successful when email already exists", function (done) { + request + .get(`/users/registerCode/exists?email=${accountExist}`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: "ERROR", + message: `"${accountExist}" 已经注册过,请更换邮箱注册`, + }); + done(); + }); }); - it('should not check register code successful when token expired', function(done) { - request.get(`/users/registerCode/exists?email=${account2}`) - .send() - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"ERROR", message: `验证码已经失效,请您重新获取`}); - done(); - }); + it("should not check register code successful when token expired", function (done) { + request + .get(`/users/registerCode/exists?email=${account2}`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: "ERROR", + message: `验证码已经失效,请您重新获取`, + }); + done(); + }); }); - it('should not check register code successful when token is invalid', function(done) { - request.get(`/users/registerCode/exists?email=${account}&token=${token}`) - .send() - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"ERROR", message: `您输入的验证码不正确,请重新输入`}); - done(); - }); + it("should not check register code successful when token is invalid", function (done) { + request + .get(`/users/registerCode/exists?email=${account}&token=${token}`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: "ERROR", + message: `您输入的验证码不正确,请重新输入`, + }); + done(); + }); }); - it('should check register code successful', function(done) { - request.get(`/users/registerCode/exists?email=${account}&token=${storageToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"OK"}); - done(); - }); + it("should check register code successful", function (done) { + request + .get( + `/users/registerCode/exists?email=${account}&token=${storageToken}` + ) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ status: "OK" }); + done(); + }); }); - }); - describe('sign up', function(done) { + describe("sign up", function (done) { var storageToken; - before(function(done){ + before(function (done) { var client = factory.getRedisClient("default"); - client.getAsync(registerKey) - .then(function (t) { - storageToken = t; - done(); - }) - .finally(() => client.quit()); + client + .getAsync(registerKey) + .then(function (t) { + storageToken = t; + done(); + }) + .finally(() => client.quit()); }); - it('should not sign up successful when password length invalid', function(done) { - request.post(`/users`) - .send({email:account, password: '1234', token: storageToken}) - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"ERROR", message: `请您输入6~20位长度的密码`}); - done(); - }); + it("should not sign up successful when password length invalid", function (done) { + request + .post(`/users`) + .send({ email: account, password: "1234", token: storageToken }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: "ERROR", + message: `请您输入6~20位长度的密码`, + }); + done(); + }); }); - it('should sign up successful', function(done) { - request.post(`/users`) - .send({email:account, password: password, token: storageToken}) - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"OK"}); - done(); - }); + it("should sign up successful", function (done) { + request + .post(`/users`) + .send({ email: account, password: password, token: storageToken }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ status: "OK" }); + done(); + }); }); }); - describe('change password', function(done) { + describe("change password", function (done) { var authToken; - before(function(done){ - request.post('/auth/login') - .send({ - account: account, - password: password - }) - .end(function(err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({status:"OK"}); - authToken = (new Buffer(`auth:${_.get(rs, 'results.tokens')}`)).toString('base64'); - done(); - }); + before(function (done) { + request + .post("/auth/login") + .send({ + account: account, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: "OK" }); + authToken = Buffer.from( + `auth:${_.get(rs, "results.tokens")}` + ).toString("base64"); + done(); + }); }); - it('should not change password successful when authToken invalid', function(done) { - request.patch(`/users/password`) - .set('Authorization', `Basic 11345`) - .send({oldPassword: password, newPassword: newPassword}) - .end(function(err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - res.status.should.equal(200); - rs.should.containEql({status:401}); - done(); - }); + it("should not change password successful when authToken invalid", function (done) { + request + .patch(`/users/password`) + .set("Authorization", `Basic 11345`) + .send({ oldPassword: password, newPassword: newPassword }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + res.status.should.equal(200); + rs.should.containEql({ status: 401 }); + done(); + }); }); - it('should not change password successful where password invalid', function(done) { - request.patch(`/users/password`) - .set('Authorization', `Basic ${authToken}`) - .send({oldPassword: '123321', newPassword: newPassword}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - JSON.parse(res.text).should.containEql({status:"ERROR", message: `您输入的旧密码不正确,请重新输入`}); - done(); - }); + it("should not change password successful where password invalid", function (done) { + request + .patch(`/users/password`) + .set("Authorization", `Basic ${authToken}`) + .send({ oldPassword: "123321", newPassword: newPassword }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + JSON.parse(res.text).should.containEql({ + status: "ERROR", + message: `您输入的旧密码不正确,请重新输入`, + }); + done(); + }); }); - it('should not change password successful where new password invalid', function(done) { - request.patch(`/users/password`) - .set('Authorization', `Basic ${authToken}`) - .send({oldPassword: password, newPassword: '1234'}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - JSON.parse(res.text).should.containEql({status:"ERROR", message: `请您输入6~20位长度的新密码`}); - done(); - }); + it("should not change password successful where new password invalid", function (done) { + request + .patch(`/users/password`) + .set("Authorization", `Basic ${authToken}`) + .send({ oldPassword: password, newPassword: "1234" }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + JSON.parse(res.text).should.containEql({ + status: "ERROR", + message: `请您输入6~20位长度的新密码`, + }); + done(); + }); }); - it('should change password successful', function(done) { - request.patch(`/users/password`) - .set('Authorization', `Basic ${authToken}`) - .send({oldPassword:password, newPassword: newPassword}) - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - JSON.parse(res.text).should.containEql({status:"OK"}); - done(); - }); + it("should change password successful", function (done) { + request + .patch(`/users/password`) + .set("Authorization", `Basic ${authToken}`) + .send({ oldPassword: password, newPassword: newPassword }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + JSON.parse(res.text).should.containEql({ status: "OK" }); + done(); + }); }); }); - describe('user modules', function(done) { + describe("user modules", function (done) { var authToken; - before(function(done){ - request.post('/auth/login') - .send({ - account: account, - password: newPassword - }) - .end(function(err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({status:"OK"}); - authToken = (new Buffer(`auth:${_.get(rs, 'results.tokens')}`)).toString('base64'); - done(); - }); + before(function (done) { + request + .post("/auth/login") + .send({ + account: account, + password: newPassword, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: "OK" }); + authToken = Buffer.from( + `auth:${_.get(rs, "results.tokens")}` + ).toString("base64"); + done(); + }); }); - it('should get userinfo successful', function(done) { - request.get(`/users`) - .set('Authorization', `Basic ${authToken}`) - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + it("should get userinfo successful", function (done) { + request + .get(`/users`) + .set("Authorization", `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); - }); - }); From 7f2d4e2753104cd99096a37659376b1a31d2eac3 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 18:28:04 +0800 Subject: [PATCH 049/347] chore: prettier format code --- .editorconfig | 37 +- .prettierignore | 4 + .prettierrc.cjs | 1 + Makefile | 2 +- README.md | 80 +- app.js | 131 +- bin/db | 120 +- bin/www | 142 +- config/config.js | 249 ++- core/app-error.js | 57 +- core/config.js | 16 +- core/const.js | 58 +- core/middleware.js | 220 +-- core/services/account-manager.js | 443 +++-- core/services/app-manager.js | 263 +-- core/services/client-manager.js | 592 +++--- core/services/collaborators.js | 103 +- core/services/datacenter-manager.js | 213 +-- core/services/deployments.js | 430 ++--- core/services/email-manager.js | 68 +- core/services/package-manager.js | 1312 +++++++------ core/utils/common.js | 890 +++++---- core/utils/factory.js | 4 +- core/utils/qetag.js | 122 +- core/utils/security.js | 339 ++-- docker-compose.yml | 26 +- docs/react-native-code-push.md | 2 +- models/apps.js | 48 +- models/collaborators.js | 60 +- models/deployments.js | 79 +- models/deployments_history.js | 42 +- models/deployments_versions.js | 48 +- models/index.js | 37 +- models/log_report_deploy.js | 48 +- models/log_report_download.js | 42 +- models/packages.js | 68 +- models/packages_diff.js | 46 +- models/packages_metrics.js | 48 +- models/user_tokens.js | 52 +- models/users.js | 46 +- models/versions.js | 38 +- package-lock.json | 2426 +++++++++++++++++++++++- package.json | 1 + renovate.json | 4 +- routes/accessKeys.js | 170 +- routes/account.js | 16 +- routes/apps.js | 1389 +++++++------- routes/auth.js | 90 +- routes/index.js | 150 +- routes/indexV1.js | 168 +- routes/users.js | 164 +- test/api/accessKeys/accessKeys.test.js | 212 +-- test/api/account/account.test.js | 84 +- test/api/apps/apps.test.js | 870 +++++---- test/api/apps/release.test.js | 478 +++-- test/api/auth/auth.test.js | 241 +-- test/api/index/index.test.js | 428 +++-- test/api/init/database.js | 104 +- test/api/users/users.test.js | 522 +++-- 59 files changed, 8269 insertions(+), 5874 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc.cjs diff --git a/.editorconfig b/.editorconfig index 4d4cd05e..dced3c85 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,40 +1,15 @@ -# editorconfig.org - root = true -[**] -indent_size = 4 -indent_style = space +[*] charset = utf-8 +indent_style = space +indent_size = 4 end_of_line = lf -trim_trailing_whitespace = true - -[**.html] -indent_size = 2 - -[**.jade] -indent_size = 2 - -[**.json] -indent_size = 2 - -[**.scss] -indent_size = 2 -insert_final_newline = true - -[**.css] -indent_size = 2 -insert_final_newline = true - -[**.md] -trim_trailing_whitespace = false - -[**.js] -indent_size = 2 insert_final_newline = true +trim_trailing_whitespace = true -[**.yml] +[{*.json,*.yml}] indent_size = 2 [Makefile] -indent_style = tab \ No newline at end of file +indent_style = tab diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..5bef5195 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ + +CHANGELOG.md +coverage +public diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 00000000..fb8347a7 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1 @@ +module.exports = require('@shm-open/eslint-config-bundle/prettier'); diff --git a/Makefile b/Makefile index ab615c44..1c4edba3 100644 --- a/Makefile +++ b/Makefile @@ -30,4 +30,4 @@ build-docker: docker build -t shmopen/code-push-server:latest . docker tag shmopen/code-push-server:latest shmopen/code-push-server:${VERSION} docker push shmopen/code-push-server:${VERSION} - docker push shmopen/code-push-server:latest \ No newline at end of file + docker push shmopen/code-push-server:latest diff --git a/README.md b/README.md index 5d72439a..10cfcbfd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# CodePush Server [source](https://github.com/lisong/code-push-server) +# CodePush Server [source](https://github.com/lisong/code-push-server) [![NPM](https://nodei.co/npm/code-push-server.svg?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/code-push-server/) @@ -11,30 +11,28 @@ [![Known Vulnerabilities](https://snyk.io/test/npm/code-push-server/badge.svg)](https://snyk.io/test/npm/code-push-server) [![Licenses](https://img.shields.io/npm/l/code-push-server.svg)](https://spdx.org/licenses/MIT) -CodePush Server is a CodePush progam server! microsoft CodePush cloud is slow in China, we can use this to build our's. I use [qiniu](http://www.qiniu.com/) to store the files, because it's simple and quick! Or you can use [local/s3/oss/tencentcloud] storage, just modify config.js file, it's simple configure. +CodePush Server is a CodePush progam server! microsoft CodePush cloud is slow in China, we can use this to build our's. I use [qiniu](http://www.qiniu.com/) to store the files, because it's simple and quick! Or you can use [local/s3/oss/tencentcloud] storage, just modify config.js file, it's simple configure. +## Support Storage mode -## Support Storage mode +- local _storage bundle file in local machine_ +- qiniu _storage bundle file in [qiniu](http://www.qiniu.com/)_ +- s3 _storage bundle file in [aws](https://aws.amazon.com/)_ +- oss _storage bundle file in [aliyun](https://www.aliyun.com/product/oss)_ +- tencentcloud _storage bundle file in [tencentcloud](https://cloud.tencent.com/product/cos)_ -- local *storage bundle file in local machine* -- qiniu *storage bundle file in [qiniu](http://www.qiniu.com/)* -- s3 *storage bundle file in [aws](https://aws.amazon.com/)* -- oss *storage bundle file in [aliyun](https://www.aliyun.com/product/oss)* -- tencentcloud *storage bundle file in [tencentcloud](https://cloud.tencent.com/product/cos)* +## qq 交流群 -## qq交流群 +- QQ 群: 628921445 +- QQ 群: 535491067 -- QQ群: 628921445 -- QQ群: 535491067 - -## 正确使用code-push热更新 - -- 苹果App允许使用热更新[Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), 为了不影响用户体验,规定必须使用静默更新。 Google Play不能使用静默更新,必须弹框告知用户App有更新。中国的android市场必须采用静默更新(如果弹框提示,App会被“请上传最新版本的二进制应用包”原因驳回)。 -- react-native 不同平台bundle包不一样,在使用code-push-server的时候必须创建不同的应用来区分(eg. CodePushDemo-ios 和 CodePushDemo-android) -- react-native-code-push只更新资源文件,不会更新java和Objective C,所以npm升级依赖包版本的时候,如果依赖包使用的本地化实现, 这时候必须更改应用版本号(ios修改Info.plist中的CFBundleShortVersionString, android修改build.gradle中的versionName), 然后重新编译app发布到应用商店。 -- 推荐使用code-push release-react 命令发布应用,该命令合并了打包和发布命令(eg. code-push release-react CodePushDemo-ios ios -d Production) -- 每次向App Store提交新的版本时,也应该基于该提交版本同时向code-push-server发布一个初始版本。(因为后面每次向code-push-server发布版本时,code-puse-server都会和初始版本比较,生成补丁版本) +## 正确使用 code-push 热更新 +- 苹果 App 允许使用热更新[Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), 为了不影响用户体验,规定必须使用静默更新。 Google Play 不能使用静默更新,必须弹框告知用户 App 有更新。中国的 android 市场必须采用静默更新(如果弹框提示,App 会被“请上传最新版本的二进制应用包”原因驳回)。 +- react-native 不同平台 bundle 包不一样,在使用 code-push-server 的时候必须创建不同的应用来区分(eg. CodePushDemo-ios 和 CodePushDemo-android) +- react-native-code-push 只更新资源文件,不会更新 java 和 Objective C,所以 npm 升级依赖包版本的时候,如果依赖包使用的本地化实现, 这时候必须更改应用版本号(ios 修改 Info.plist 中的 CFBundleShortVersionString, android 修改 build.gradle 中的 versionName), 然后重新编译 app 发布到应用商店。 +- 推荐使用 code-push release-react 命令发布应用,该命令合并了打包和发布命令(eg. code-push release-react CodePushDemo-ios ios -d Production) +- 每次向 App Store 提交新的版本时,也应该基于该提交版本同时向 code-push-server 发布一个初始版本。(因为后面每次向 code-push-server 发布版本时,code-puse-server 都会和初始版本比较,生成补丁版本) ### shell login @@ -42,7 +40,7 @@ CodePush Server is a CodePush progam server! microsoft CodePush cloud is slow in $ code-push login http://api.code-push.com #登录 ``` -### [web](http://www.code-push.com) +### [web](http://www.code-push.com) 访问:http://www.code-push.com @@ -54,20 +52,19 @@ $ code-push login http://api.code-push.com #登录 ## HOW TO INSTALL code-push-server -- [docker](https://github.com/lisong/code-push-server/blob/master/docker/README.md) (recommend) -- [manual operation](https://github.com/lisong/code-push-server/blob/master/docs/README.md) +- [docker](https://github.com/lisong/code-push-server/blob/master/docker/README.md) (recommend) +- [manual operation](https://github.com/lisong/code-push-server/blob/master/docs/README.md) ## DEFAULT ACCOUNT AND PASSWORD -- account: `admin` -- password: `123456` +- account: `admin` +- password: `123456` ## HOW TO USE -- [normal](https://github.com/lisong/code-push-server/blob/master/docs/react-native-code-push.md) -- [react-native-code-push](https://github.com/Microsoft/react-native-code-push) -- [code-push](https://github.com/Microsoft/code-push) - +- [normal](https://github.com/lisong/code-push-server/blob/master/docs/react-native-code-push.md) +- [react-native-code-push](https://github.com/Microsoft/react-native-code-push) +- [code-push](https://github.com/Microsoft/code-push) ## ISSUES @@ -77,28 +74,25 @@ $ code-push login http://api.code-push.com #登录 [modify password](https://github.com/lisong/code-push-server/issues/43) - # UPDATE TIME LINE -- targetBinaryVersion support - - `*` - - `1.2.3` - - `1.2`/`1.2.*` - - `1.2.3 - 1.2.7` - - `>=1.2.3 <1.2.7` - - `~1.2.3` - - `^1.2.3` - +- targetBinaryVersion support + - `*` + - `1.2.3` + - `1.2`/`1.2.*` + - `1.2.3 - 1.2.7` + - `>=1.2.3 <1.2.7` + - `~1.2.3` + - `^1.2.3` ## Advance Feature > use google diff-match-patch calculate text file diff patch -- support iOS and Android -- use `"react-native-code-push": "git+https://git@github.com/lisong/react-native-code-push.git"` instead `"react-native-code-push": "x.x.x"` in `package.json` -- change `apps`.`is_use_diff_text` to `1` in mysql codepush database +- support iOS and Android +- use `"react-native-code-push": "git+https://git@github.com/lisong/react-native-code-push.git"` instead `"react-native-code-push": "x.x.x"` in `package.json` +- change `apps`.`is_use_diff_text` to `1` in mysql codepush database ## License -MIT License [read](https://github.com/lisong/code-push-server/blob/master/LICENSE) - +MIT License [read](https://github.com/lisong/code-push-server/blob/master/LICENSE) diff --git a/app.js b/app.js index ee93e3cc..e0de0815 100644 --- a/app.js +++ b/app.js @@ -17,7 +17,7 @@ var users = require('./routes/users'); var apps = require('./routes/apps'); var AppError = require('./core/app-error'); var log4js = require('log4js'); -var log = log4js.getLogger("cps:app"); +var log = log4js.getLogger('cps:app'); var app = express(); app.use(helmet()); app.disable('x-powered-by'); @@ -25,7 +25,12 @@ app.disable('x-powered-by'); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'pug'); -app.use(log4js.connectLogger(log4js.getLogger("http"), {level: log4js.levels.INFO, nolog:'\\.gif|\\.jpg|\\.js|\\.css$' })); +app.use( + log4js.connectLogger(log4js.getLogger('http'), { + level: log4js.levels.INFO, + nolog: '\\.gif|\\.jpg|\\.js|\\.css$', + }), +); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); @@ -34,42 +39,44 @@ app.use(express.static(path.join(__dirname, 'public'))); //use nginx in production //if (app.get('env') === 'development') { - log.debug("set Access-Control Header"); - app.all('*', function(req, res, next) { - res.header("Access-Control-Allow-Origin", "*"); - res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization, X-CodePush-Plugin-Version, X-CodePush-Plugin-Name, X-CodePush-SDK-Version"); - res.header("Access-Control-Allow-Methods","PUT,POST,GET,PATCH,DELETE,OPTIONS"); - log.debug("use set Access-Control Header"); +log.debug('set Access-Control Header'); +app.all('*', function (req, res, next) { + res.header('Access-Control-Allow-Origin', '*'); + res.header( + 'Access-Control-Allow-Headers', + 'Origin, X-Requested-With, Content-Type, Accept, Authorization, X-CodePush-Plugin-Version, X-CodePush-Plugin-Name, X-CodePush-SDK-Version', + ); + res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,PATCH,DELETE,OPTIONS'); + log.debug('use set Access-Control Header'); next(); - }); +}); //} -log.debug("config common.storageType value: " + _.get(config, 'common.storageType')); +log.debug('config common.storageType value: ' + _.get(config, 'common.storageType')); if (_.get(config, 'common.storageType') === 'local') { - var localStorageDir = _.get(config, 'local.storageDir'); - if (localStorageDir) { + var localStorageDir = _.get(config, 'local.storageDir'); + if (localStorageDir) { + log.debug('config common.storageDir value: ' + localStorageDir); - log.debug("config common.storageDir value: " + localStorageDir); - - if (!fs.existsSync(localStorageDir)) { - var e = new Error(`Please create dir ${localStorageDir}`); - log.error(e); - throw e; - } - try { - log.debug('checking storageDir fs.W_OK | fs.R_OK'); - fs.accessSync(localStorageDir, fs.W_OK | fs.R_OK); - log.debug('storageDir fs.W_OK | fs.R_OK is ok'); - } catch (e) { - log.error(e); - throw e; + if (!fs.existsSync(localStorageDir)) { + var e = new Error(`Please create dir ${localStorageDir}`); + log.error(e); + throw e; + } + try { + log.debug('checking storageDir fs.W_OK | fs.R_OK'); + fs.accessSync(localStorageDir, fs.W_OK | fs.R_OK); + log.debug('storageDir fs.W_OK | fs.R_OK is ok'); + } catch (e) { + log.error(e); + throw e; + } + log.debug('static download uri value: ' + _.get(config, 'local.public', '/download')); + app.use(_.get(config, 'local.public', '/download'), express.static(localStorageDir)); + } else { + log.error('please config local storageDir'); } - log.debug("static download uri value: " + _.get(config, 'local.public', '/download')); - app.use(_.get(config, 'local.public', '/download'), express.static(localStorageDir)); - } else { - log.error('please config local storageDir'); - } } app.use('/', routes); @@ -83,40 +90,40 @@ app.use('/apps', apps); // development error handler // will print stacktrace if (app.get('env') === 'development') { - app.use(function(req, res, next) { - var err = new AppError.NotFound(); - res.status(err.status || 404); - res.render('error', { - message: err.message, - error: err + app.use(function (req, res, next) { + var err = new AppError.NotFound(); + res.status(err.status || 404); + res.render('error', { + message: err.message, + error: err, + }); + log.error(err); }); - log.error(err); - }); - app.use(function(err, req, res, next) { - res.status(err.status || 500); - res.render('error', { - message: err.message, - error: err + app.use(function (err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err, + }); + log.error(err); }); - log.error(err); - }); } else { - app.use(function(req, res, next) { - var e = new AppError.NotFound(); - res.status(404).send(e.message); - log.debug(e); - }); - // production error handler - // no stacktraces leaked to user - app.use(function(err, req, res, next) { - if (err instanceof AppError.AppError) { - res.send(err.message); - log.debug(err); - } else { - res.status(err.status || 500).send(err.message); - log.error(err); - } - }); + app.use(function (req, res, next) { + var e = new AppError.NotFound(); + res.status(404).send(e.message); + log.debug(e); + }); + // production error handler + // no stacktraces leaked to user + app.use(function (err, req, res, next) { + if (err instanceof AppError.AppError) { + res.send(err.message); + log.debug(err); + } else { + res.status(err.status || 500).send(err.message); + log.error(err); + } + }); } module.exports = app; diff --git a/bin/db b/bin/db index 6e3b3a5a..6068d0a0 100755 --- a/bin/db +++ b/bin/db @@ -3,52 +3,52 @@ /** * Module dependencies. */ -var fs = require("fs"); -var path = require("path"); -var _ = require("lodash"); -var mysql = require("mysql2"); -var Promise = require("bluebird"); -var constConfig = require("../core/const"); -var yargs = require("yargs"); +var fs = require('fs'); +var path = require('path'); +var _ = require('lodash'); +var mysql = require('mysql2'); +var Promise = require('bluebird'); +var constConfig = require('../core/const'); +var yargs = require('yargs'); var argv = yargs - .usage("Usage: $0 [options]") - .command("init", "初始化数据库", { + .usage('Usage: $0 [options]') + .command('init', '初始化数据库', { dbpassword: { - alias: "dbpassword", - type: "string", + alias: 'dbpassword', + type: 'string', }, }) - .command("upgrade", "升级数据库", { + .command('upgrade', '升级数据库', { dbpassword: { - alias: "dbpassword", - type: "string", + alias: 'dbpassword', + type: 'string', }, }) .example( - "$0 init --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306 --force", - "初始化code-push-server数据库" + '$0 init --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306 --force', + '初始化code-push-server数据库', ) .example( - "$0 upgrade --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306", - "升级code-push-server数据库" + '$0 upgrade --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306', + '升级code-push-server数据库', ) .default({ - dbname: "codepush", - dbhost: "localhost", - dbuser: "root", + dbname: 'codepush', + dbhost: 'localhost', + dbuser: 'root', dbpassword: null, }) - .help("h") - .alias("h", "help") + .help('h') + .alias('h', 'help') .parseSync(); var command = argv._[0]; -var dbname = argv.dbname ? argv.dbname : "codepush"; -var dbhost = argv.dbhost ? argv.dbhost : "localhost"; -var dbuser = argv.dbuser ? argv.dbuser : "root"; +var dbname = argv.dbname ? argv.dbname : 'codepush'; +var dbhost = argv.dbhost ? argv.dbhost : 'localhost'; +var dbuser = argv.dbuser ? argv.dbuser : 'root'; var dbport = argv.dbport ? argv.dbport : 3306; var dbpassword = argv.dbpassword; -if (command === "init") { +if (command === 'init') { var connection2; var connection = mysql.createConnection({ host: dbhost, @@ -77,14 +77,11 @@ if (command === "init") { return connection2; }) .then(function (connection2) { - var sql = fs.readFileSync( - path.resolve(__dirname, "../sql/codepush-all.sql"), - "utf-8" - ); + var sql = fs.readFileSync(path.resolve(__dirname, '../sql/codepush-all.sql'), 'utf-8'); return connection2.queryAsync(sql); }) .then(function () { - console.log("success."); + console.log('success.'); }) .catch(function (e) { console.log(e); @@ -93,7 +90,7 @@ if (command === "init") { if (connection) connection.end(); if (connection2) connection2.end(); }); -} else if (command == "upgrade") { +} else if (command == 'upgrade') { try { var connection = mysql.createConnection({ host: dbhost, @@ -106,74 +103,59 @@ if (command === "init") { Promise.promisifyAll(connection); connection.connect(); } catch (e) { - console.error("connect mysql error, check params", e); + console.error('connect mysql error, check params', e); return; } return Promise.coroutine(function* (val) { - var version_no = "0.0.1"; + var version_no = '0.0.1'; var rs = yield connection.queryAsync( - "select `version` from `versions` where `type`=1 limit 1" + 'select `version` from `versions` where `type`=1 limit 1', ); - version_no = _.get(rs, "0.version", "0.0.1"); + version_no = _.get(rs, '0.version', '0.0.1'); if (version_no == constConfig.CURRENT_DB_VERSION) { - console.log("Everything up-to-date."); + console.log('Everything up-to-date.'); process.exit(0); } var allSqlFile = [ { - version: "0.2.14", - path: path.resolve( - __dirname, - "../sql/codepush-v0.2.14-patch.sql" - ), + version: '0.2.14', + path: path.resolve(__dirname, '../sql/codepush-v0.2.14-patch.sql'), }, { - version: "0.2.15", - path: path.resolve( - __dirname, - "../sql/codepush-v0.2.15-patch.sql" - ), + version: '0.2.15', + path: path.resolve(__dirname, '../sql/codepush-v0.2.15-patch.sql'), }, { - version: "0.3.0", - path: path.resolve( - __dirname, - "../sql/codepush-v0.3.0-patch.sql" - ), + version: '0.3.0', + path: path.resolve(__dirname, '../sql/codepush-v0.3.0-patch.sql'), }, { - version: "0.4.0", - path: path.resolve( - __dirname, - "../sql/codepush-v0.4.0-patch.sql" - ), + version: '0.4.0', + path: path.resolve(__dirname, '../sql/codepush-v0.4.0-patch.sql'), }, { - version: "0.5.0", - path: path.resolve( - __dirname, - "../sql/codepush-v0.5.0-patch.sql" - ), + version: '0.5.0', + path: path.resolve(__dirname, '../sql/codepush-v0.5.0-patch.sql'), }, ]; for (var i = 0; i < allSqlFile.length; i++) { - if (!_.gt(allSqlFile[i]["version"], version_no)) { + if (!_.gt(allSqlFile[i]['version'], version_no)) { continue; } try { - var sql = fs.readFileSync(allSqlFile[i]["path"], "utf-8"); - console.log("exec sql file:" + allSqlFile[i]["path"]); + var sql = fs.readFileSync(allSqlFile[i]['path'], 'utf-8'); + console.log('exec sql file:' + allSqlFile[i]['path']); yield connection.queryAsync(sql); - console.log("success exec sql file:" + allSqlFile[i]["path"]); + console.log('success exec sql file:' + allSqlFile[i]['path']); } catch (e) { - console.error("error exec sql file:" + allSqlFile[i]["path"]); + console.error('error exec sql file:' + allSqlFile[i]['path']); throw e; } } })() .then(function () { - console.log("Upgrade success."); + console.log('Upgrade success.'); }) .catch(function (e) { console.error(e); diff --git a/bin/www b/bin/www index 4f086a7b..e3f3e739 100755 --- a/bin/www +++ b/bin/www @@ -6,15 +6,17 @@ var log4js = require('log4js'); var http = require('http'); -var validator = require('validator') -var _ = require('lodash') +var validator = require('validator'); +var _ = require('lodash'); var config = require('../core/config'); var constConfig = require('../core/const'); -log4js.configure(_.get(config, 'log4js', { - appenders: {console: { type: 'console'}}, - categories : { default: { appenders: ['console'], level: 'info' }} -})); -var log = log4js.getLogger("startup") +log4js.configure( + _.get(config, 'log4js', { + appenders: { console: { type: 'console' } }, + categories: { default: { appenders: ['console'], level: 'info' } }, + }), +); +var log = log4js.getLogger('startup'); var app = require('../app'); @@ -23,17 +25,17 @@ var app = require('../app'); */ var port = normalizePort(process.env.PORT || '3000'); -log.debug('port '+ port); +log.debug('port ' + port); var host = null; if (process.env.HOST) { - log.debug('process.env.HOST '+ process.env.HOST); - if (validator.isIP(process.env.HOST)) { - log.trace(process.env.HOST + ' valid'); - host = process.env.HOST; - } else { - log.warn('process.env.HOST '+ process.env.HOST + ' invalid, use 0.0.0.0 instead'); - } + log.debug('process.env.HOST ' + process.env.HOST); + if (validator.isIP(process.env.HOST)) { + log.trace(process.env.HOST + ' valid'); + host = process.env.HOST; + } else { + log.warn('process.env.HOST ' + process.env.HOST + ' invalid, use 0.0.0.0 instead'); + } } app.set('port', port); @@ -47,43 +49,49 @@ var server = http.createServer(app); * Listen on provided port, on all network interfaces. */ var models = require('../models'); -models.Versions.findOne({where:{type:1}}) -.then(function(v){ - if (!v || v.get('version') != constConfig.CURRENT_DB_VERSION) { - throw new Error('Please upgrade your database. usage `npm run upgrade` or `code-push-server-db upgrade`'); - } - server.listen(port, host); - server.on('error', onError); - server.on('listening', onListening); - return; -}) -.catch(function(e){ - if (_.startsWith(e.message, 'ER_NO_SUCH_TABLE')) { - log.error(new Error(`Please upgrade your database. usage bin/db upgrade or code-push-server-db upgrade`)); - } else { - log.error(e); - } - process.exit(1); -}); +models.Versions.findOne({ where: { type: 1 } }) + .then(function (v) { + if (!v || v.get('version') != constConfig.CURRENT_DB_VERSION) { + throw new Error( + 'Please upgrade your database. usage `npm run upgrade` or `code-push-server-db upgrade`', + ); + } + server.listen(port, host); + server.on('error', onError); + server.on('listening', onListening); + return; + }) + .catch(function (e) { + if (_.startsWith(e.message, 'ER_NO_SUCH_TABLE')) { + log.error( + new Error( + `Please upgrade your database. usage bin/db upgrade or code-push-server-db upgrade`, + ), + ); + } else { + log.error(e); + } + process.exit(1); + }); /** * Normalize a port into a number, string, or false. */ function normalizePort(val) { - var port = parseInt(val, 10); + var port = parseInt(val, 10); - if (isNaN(port)) { - // named pipe - return val; - } + if (isNaN(port)) { + // named pipe + return val; + } - if (port >= 0) { - // port number - return port; - } + if (port >= 0) { + // port number + return port; + } - return false; + return false; } /** @@ -91,27 +99,25 @@ function normalizePort(val) { */ function onError(error) { - if (error.syscall !== 'listen') { - throw error; - } - - var bind = typeof port === 'string' - ? 'Pipe ' + port - : 'Port ' + port; - - // handle specific listen errors with friendly messages - switch (error.code) { - case 'EACCES': - log.error(bind + ' requires elevated privileges'); - process.exit(1); - break; - case 'EADDRINUSE': - log.error(bind + ' is already in use'); - process.exit(1); - break; - default: - throw error; - } + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + log.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + log.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } } /** @@ -119,9 +125,7 @@ function onError(error) { */ function onListening() { - var addr = server.address(); - var bind = typeof addr === 'string' - ? 'pipe ' + addr - : 'port ' + addr.port; - log.info('Listening on ' + bind); + var addr = server.address(); + var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; + log.info('Listening on ' + bind); } diff --git a/config/config.js b/config/config.js index 1da55f6c..0b027e59 100644 --- a/config/config.js +++ b/config/config.js @@ -1,136 +1,135 @@ -var os = require("os"); +var os = require('os'); var config = {}; config.development = { - // Config for database, only support mysql. - db: { - username: process.env.RDS_USERNAME || "root", - password: process.env.RDS_PASSWORD || "password", - database: process.env.RDS_DATABASE || "codepush", - host: process.env.RDS_HOST || "127.0.0.1", - port: process.env.RDS_PORT || 3306, - dialect: "mysql", - logging: false, - operatorsAliases: false, - }, - // Config for qiniu (http://www.qiniu.com/) cloud storage when storageType value is "qiniu". - qiniu: { - accessKey: "", - secretKey: "", - bucketName: "", - downloadUrl: "", // Binary files download host address. - }, - // Config for upyun (https://www.upyun.com/) storage when storageType value is "upyun" - upyun: { - storageDir: process.env.UPYUN_STORAGE_DIR, - serviceName: process.env.UPYUN_SERVICE_NAME, - operatorName: process.env.UPYUN_OPERATOR_NAME, - operatorPass: process.env.UPYUN_OPERATOR_PASS, - downloadUrl: process.env.DOWNLOAD_URL, - }, - // Config for Amazon s3 (https://aws.amazon.com/cn/s3/) storage when storageType value is "s3". - s3: { - accessKeyId: process.env.AWS_ACCESS_KEY_ID, - secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, - sessionToken: process.env.AWS_SESSION_TOKEN, //(optional) - bucketName: process.env.BUCKET_NAME, - region: process.env.REGION, - downloadUrl: process.env.DOWNLOAD_URL, // binary files download host address. - }, - // Config for Aliyun OSS (https://www.aliyun.com/product/oss) when storageType value is "oss". - oss: { - accessKeyId: process.env.OSS_ACCESS_KEY_ID, - secretAccessKey: process.env.OSS_SECRET_ACCESS_KEY, - endpoint: process.env.OSS_ENDPOINT, - bucketName: process.env.OSS_BUCKET_NAME, - prefix: process.env.OSS_PREFIX, // Key prefix in object key - downloadUrl: process.env.OSS_DOWNLOAD_URL, // binary files download host address. - }, - // Config for tencentyun COS (https://cloud.tencent.com/product/cos) when storageType value is "oss". - tencentcloud: { - accessKeyId: "", - secretAccessKey: "", - bucketName: "", - region: "", - downloadUrl: "", // binary files download host address. - }, - // Config for local storage when storageType value is "local". - local: { - // Binary files storage dir, Do not use tmpdir and it's public download dir. - storageDir: process.env.STORAGE_DIR || os.tmpdir(), - // Binary files download host address which Code Push Server listen to. the files storage in storageDir. - downloadUrl: - process.env.LOCAL_DOWNLOAD_URL || "http://127.0.0.1:3000/download", - // public static download spacename. - public: "/download", - }, - jwt: { - // Recommended: 63 random alpha-numeric characters - // Generate using: https://www.grc.com/passwords.htm - tokenSecret: process.env.TOKEN_SECRET || "INSERT_RANDOM_TOKEN_KEY", - }, - common: { - /* - * tryLoginTimes is control login error times to avoid force attack. - * if value is 0, no limit for login auth, it may not safe for account. when it's a number, it means you can - * try that times today. but it need config redis server. - */ - tryLoginTimes: 4, - // CodePush Web(https://github.com/lisong/code-push-web) login address. - //codePushWebUrl: "http://127.0.0.1:3001/login", - // create patch updates's number. default value is 3 - diffNums: 3, - // data dir for caclulate diff files. it's optimization. - dataDir: process.env.DATA_DIR || os.tmpdir(), - // storageType which is your binary package files store. options value is ("local" | "qiniu" | "s3"| "oss" || "tencentcloud") - storageType: process.env.STORAGE_TYPE || "local", - // options value is (true | false), when it's true, it will cache updateCheck results in redis. - updateCheckCache: false, - // options value is (true | false), when it's true, it will cache rollout results in redis - rolloutClientUniqueIdCache: false, - }, - // Config for smtp email,register module need validate user email project source https://github.com/nodemailer/nodemailer - smtpConfig: { - host: "", - port: 465, - secure: true, - auth: { - user: "", - pass: "", + // Config for database, only support mysql. + db: { + username: process.env.RDS_USERNAME || 'root', + password: process.env.RDS_PASSWORD || 'password', + database: process.env.RDS_DATABASE || 'codepush', + host: process.env.RDS_HOST || '127.0.0.1', + port: process.env.RDS_PORT || 3306, + dialect: 'mysql', + logging: false, + operatorsAliases: false, }, - }, - // Config for redis (register module, tryLoginTimes module) - redis: { - default: { - host: process.env.REDIS_HOST || "127.0.0.1", - port: process.env.REDIS_PORT || 6379, - retry_strategy: function (options) { - if (options.error.code === "ECONNREFUSED") { - // End reconnecting on a specific error and flush all commands with a individual error - return new Error("The server refused the connection"); - } - if (options.total_retry_time > 1000 * 60 * 60) { - // End reconnecting after a specific timeout and flush all commands with a individual error - return new Error("Retry time exhausted"); - } - if (options.times_connected > 10) { - // End reconnecting with built in error - return undefined; - } - // reconnect after - return Math.max(options.attempt * 100, 3000); - }, + // Config for qiniu (http://www.qiniu.com/) cloud storage when storageType value is "qiniu". + qiniu: { + accessKey: '', + secretKey: '', + bucketName: '', + downloadUrl: '', // Binary files download host address. + }, + // Config for upyun (https://www.upyun.com/) storage when storageType value is "upyun" + upyun: { + storageDir: process.env.UPYUN_STORAGE_DIR, + serviceName: process.env.UPYUN_SERVICE_NAME, + operatorName: process.env.UPYUN_OPERATOR_NAME, + operatorPass: process.env.UPYUN_OPERATOR_PASS, + downloadUrl: process.env.DOWNLOAD_URL, + }, + // Config for Amazon s3 (https://aws.amazon.com/cn/s3/) storage when storageType value is "s3". + s3: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, + sessionToken: process.env.AWS_SESSION_TOKEN, //(optional) + bucketName: process.env.BUCKET_NAME, + region: process.env.REGION, + downloadUrl: process.env.DOWNLOAD_URL, // binary files download host address. + }, + // Config for Aliyun OSS (https://www.aliyun.com/product/oss) when storageType value is "oss". + oss: { + accessKeyId: process.env.OSS_ACCESS_KEY_ID, + secretAccessKey: process.env.OSS_SECRET_ACCESS_KEY, + endpoint: process.env.OSS_ENDPOINT, + bucketName: process.env.OSS_BUCKET_NAME, + prefix: process.env.OSS_PREFIX, // Key prefix in object key + downloadUrl: process.env.OSS_DOWNLOAD_URL, // binary files download host address. + }, + // Config for tencentyun COS (https://cloud.tencent.com/product/cos) when storageType value is "oss". + tencentcloud: { + accessKeyId: '', + secretAccessKey: '', + bucketName: '', + region: '', + downloadUrl: '', // binary files download host address. + }, + // Config for local storage when storageType value is "local". + local: { + // Binary files storage dir, Do not use tmpdir and it's public download dir. + storageDir: process.env.STORAGE_DIR || os.tmpdir(), + // Binary files download host address which Code Push Server listen to. the files storage in storageDir. + downloadUrl: process.env.LOCAL_DOWNLOAD_URL || 'http://127.0.0.1:3000/download', + // public static download spacename. + public: '/download', + }, + jwt: { + // Recommended: 63 random alpha-numeric characters + // Generate using: https://www.grc.com/passwords.htm + tokenSecret: process.env.TOKEN_SECRET || 'INSERT_RANDOM_TOKEN_KEY', + }, + common: { + /* + * tryLoginTimes is control login error times to avoid force attack. + * if value is 0, no limit for login auth, it may not safe for account. when it's a number, it means you can + * try that times today. but it need config redis server. + */ + tryLoginTimes: 4, + // CodePush Web(https://github.com/lisong/code-push-web) login address. + //codePushWebUrl: "http://127.0.0.1:3001/login", + // create patch updates's number. default value is 3 + diffNums: 3, + // data dir for caclulate diff files. it's optimization. + dataDir: process.env.DATA_DIR || os.tmpdir(), + // storageType which is your binary package files store. options value is ("local" | "qiniu" | "s3"| "oss" || "tencentcloud") + storageType: process.env.STORAGE_TYPE || 'local', + // options value is (true | false), when it's true, it will cache updateCheck results in redis. + updateCheckCache: false, + // options value is (true | false), when it's true, it will cache rollout results in redis + rolloutClientUniqueIdCache: false, + }, + // Config for smtp email,register module need validate user email project source https://github.com/nodemailer/nodemailer + smtpConfig: { + host: '', + port: 465, + secure: true, + auth: { + user: '', + pass: '', + }, + }, + // Config for redis (register module, tryLoginTimes module) + redis: { + default: { + host: process.env.REDIS_HOST || '127.0.0.1', + port: process.env.REDIS_PORT || 6379, + retry_strategy: function (options) { + if (options.error.code === 'ECONNREFUSED') { + // End reconnecting on a specific error and flush all commands with a individual error + return new Error('The server refused the connection'); + } + if (options.total_retry_time > 1000 * 60 * 60) { + // End reconnecting after a specific timeout and flush all commands with a individual error + return new Error('Retry time exhausted'); + } + if (options.times_connected > 10) { + // End reconnecting with built in error + return undefined; + } + // reconnect after + return Math.max(options.attempt * 100, 3000); + }, + }, }, - }, }; config.development.log4js = { - appenders: { console: { type: "console" } }, - categories: { - default: { appenders: ["console"], level: "error" }, - startup: { appenders: ["console"], level: "info" }, - http: { appenders: ["console"], level: "info" }, - }, + appenders: { console: { type: 'console' } }, + categories: { + default: { appenders: ['console'], level: 'error' }, + startup: { appenders: ['console'], level: 'info' }, + http: { appenders: ['console'], level: 'info' }, + }, }; config.production = Object.assign({}, config.development); diff --git a/core/app-error.js b/core/app-error.js index 178a573b..adcd6418 100644 --- a/core/app-error.js +++ b/core/app-error.js @@ -1,35 +1,34 @@ -var util = require('util') +var util = require('util'); var AppError = function (msg, constr) { - if(msg) { - msg = msg.toString(); - } - Error.captureStackTrace(this, constr || this) - this.message = msg || 'Error' - this.name = 'AppError' - this.status = 200 -} -util.inherits(AppError, Error) + if (msg) { + msg = msg.toString(); + } + Error.captureStackTrace(this, constr || this); + this.message = msg || 'Error'; + this.name = 'AppError'; + this.status = 200; +}; +util.inherits(AppError, Error); -var NotFoundError = function(msg) { - NotFoundError.super_.call(this, msg, this.constructor) - this.message = msg || 'Not Found'; - this.name = 'NotFoundError' - this.status = 404 -} -util.inherits(NotFoundError, AppError) +var NotFoundError = function (msg) { + NotFoundError.super_.call(this, msg, this.constructor); + this.message = msg || 'Not Found'; + this.name = 'NotFoundError'; + this.status = 404; +}; +util.inherits(NotFoundError, AppError); -var UnauthorizedError = function(msg) { - UnauthorizedError.super_.call(this, msg, this.constructor) - this.message = msg || `401 Unauthorized`; - this.name = 'UnauthorizedError' - this.status = 401 -} -util.inherits(UnauthorizedError, AppError) +var UnauthorizedError = function (msg) { + UnauthorizedError.super_.call(this, msg, this.constructor); + this.message = msg || `401 Unauthorized`; + this.name = 'UnauthorizedError'; + this.status = 401; +}; +util.inherits(UnauthorizedError, AppError); module.exports = { - AppError: AppError, - NotFound: NotFoundError, - Unauthorized: UnauthorizedError -} - + AppError: AppError, + NotFound: NotFoundError, + Unauthorized: UnauthorizedError, +}; diff --git a/core/config.js b/core/config.js index a67eae86..c7edadf9 100644 --- a/core/config.js +++ b/core/config.js @@ -1,17 +1,17 @@ -var env = process.env.NODE_ENV || 'development'; -var _ = require('lodash'); +var env = process.env.NODE_ENV || 'development'; +var _ = require('lodash'); var path = require('path'); var log4js = require('log4js'); -var log = log4js.getLogger("cps:config"); +var log = log4js.getLogger('cps:config'); var CONFIG_PATH = path.join(__dirname, '../config/config.js'); if (process.env.CONFIG_FILE) { - CONFIG_PATH = path.join(__dirname, path.relative(__dirname, process.env.CONFIG_FILE)); - log.info(`process.env.CONFIG_FILE value: ${process.env.CONFIG_FILE}`) + CONFIG_PATH = path.join(__dirname, path.relative(__dirname, process.env.CONFIG_FILE)); + log.info(`process.env.CONFIG_FILE value: ${process.env.CONFIG_FILE}`); } -log.info(`use config file ${CONFIG_PATH}`) -log.info(`use env ${env}`) +log.info(`use config file ${CONFIG_PATH}`); +log.info(`use env ${env}`); var config = _.get(require(CONFIG_PATH), env); if (_.isEmpty(config)) { - throw new Error(`config is {}, check the env and config`); + throw new Error(`config is {}, check the env and config`); } module.exports = config; diff --git a/core/const.js b/core/const.js index f1d9b23b..d048c274 100644 --- a/core/const.js +++ b/core/const.js @@ -1,49 +1,43 @@ function define(name, value) { Object.defineProperty(exports, name, { - value: value, - enumerable: true + value: value, + enumerable: true, }); } //定义支持的平台 -define("IOS", 1); -define("IOS_NAME", 'iOS'); -define("ANDROID", 2); -define("ANDROID_NAME", 'Android'); -define("WINDOWS", 3); -define("WINDOWS_NAME", 'Windows'); +define('IOS', 1); +define('IOS_NAME', 'iOS'); +define('ANDROID', 2); +define('ANDROID_NAME', 'Android'); +define('WINDOWS', 3); +define('WINDOWS_NAME', 'Windows'); //定义支持的应用类型 -define("REACT_NATIVE", 1); -define("REACT_NATIVE_NAME", 'React-Native'); -define("CORDOVA", 2); -define("CORDOVA_NAME", 'Cordova'); +define('REACT_NATIVE', 1); +define('REACT_NATIVE_NAME', 'React-Native'); +define('CORDOVA', 2); +define('CORDOVA_NAME', 'Cordova'); -define("PRODUCTION", 'Production'); -define("STAGING", 'Staging'); +define('PRODUCTION', 'Production'); +define('STAGING', 'Staging'); +define('IS_MANDATORY_YES', 1); +define('IS_MANDATORY_NO', 0); -define("IS_MANDATORY_YES", 1); -define("IS_MANDATORY_NO", 0); +define('IS_DISABLED_YES', 1); +define('IS_DISABLED_NO', 0); +define('RELEAS_EMETHOD_PROMOTE', 'Promote'); +define('RELEAS_EMETHOD_UPLOAD', 'Upload'); -define("IS_DISABLED_YES", 1); -define("IS_DISABLED_NO", 0); +define('DEPLOYMENT_SUCCEEDED', 1); +define('DEPLOYMENT_FAILED', 2); - -define("RELEAS_EMETHOD_PROMOTE", 'Promote'); -define("RELEAS_EMETHOD_UPLOAD", 'Upload'); - -define("DEPLOYMENT_SUCCEEDED", 1); -define("DEPLOYMENT_FAILED", 2); - -define("DIFF_MANIFEST_FILE_NAME", 'hotcodepush.json'); +define('DIFF_MANIFEST_FILE_NAME', 'hotcodepush.json'); //文本文件是否使用google diff-match-patch 计算差异 -define("IS_USE_DIFF_TEXT_NO", 0); -define("IS_USE_DIFF_TEXT_YES", 1); - - -define("CURRENT_DB_VERSION", '0.5.0'); - +define('IS_USE_DIFF_TEXT_NO', 0); +define('IS_USE_DIFF_TEXT_YES', 1); +define('CURRENT_DB_VERSION', '0.5.0'); diff --git a/core/middleware.js b/core/middleware.js index 18131551..808b68ce 100644 --- a/core/middleware.js +++ b/core/middleware.js @@ -1,125 +1,125 @@ -"use strict"; -var _ = require("lodash"); -var security = require("../core/utils/security"); -var models = require("../models"); -var moment = require("moment"); -var AppError = require("./app-error"); +'use strict'; +var _ = require('lodash'); +var security = require('../core/utils/security'); +var models = require('../models'); +var moment = require('moment'); +var AppError = require('./app-error'); var middleware = module.exports; var checkAuthToken = function (authToken) { - var objToken = security.parseToken(authToken); - return models.Users.findOne({ - where: { identical: objToken.identical }, - }) - .then((users) => { - if (_.isEmpty(users)) { - throw new AppError.Unauthorized(); - } - var Sequelize = require("sequelize"); - return models.UserTokens.findOne({ - where: { - tokens: authToken, - uid: users.id, - expires_at: { - [Sequelize.Op.gt]: moment().format("YYYY-MM-DD HH:mm:ss"), - }, - }, - }).then((tokenInfo) => { - if (_.isEmpty(tokenInfo)) { - throw new AppError.Unauthorized(); - } - return users; - }); + var objToken = security.parseToken(authToken); + return models.Users.findOne({ + where: { identical: objToken.identical }, }) - .then((users) => { - return users; - }); -}; - -var checkAccessToken = function (accessToken) { - return new Promise((resolve, reject) => { - if (_.isEmpty(accessToken)) { - return reject(new AppError.Unauthorized()); - } - var config = require("../core/config"); - var tokenSecret = _.get(config, "jwt.tokenSecret"); - var jwt = require("jsonwebtoken"); - try { - var authData = jwt.verify(accessToken, tokenSecret); - } catch (e) { - return reject(new AppError.Unauthorized()); - } - var uid = _.get(authData, "uid", null); - var hash = _.get(authData, "hash", null); - if (parseInt(uid) > 0) { - return models.Users.findOne({ - where: { id: uid }, - }) .then((users) => { - if (_.isEmpty(users)) { - throw new AppError.Unauthorized(); - } - if (!_.eq(hash, security.md5(users.get("ack_code")))) { - throw new AppError.Unauthorized(); - } - resolve(users); + if (_.isEmpty(users)) { + throw new AppError.Unauthorized(); + } + var Sequelize = require('sequelize'); + return models.UserTokens.findOne({ + where: { + tokens: authToken, + uid: users.id, + expires_at: { + [Sequelize.Op.gt]: moment().format('YYYY-MM-DD HH:mm:ss'), + }, + }, + }).then((tokenInfo) => { + if (_.isEmpty(tokenInfo)) { + throw new AppError.Unauthorized(); + } + return users; + }); }) - .catch((e) => { - reject(e); + .then((users) => { + return users; }); - } else { - reject(new AppError.Unauthorized()); - } - }); }; -middleware.checkToken = function (req, res, next) { - var authArr = _.split(req.get("Authorization"), " "); - var authType = 1; - var authToken = null; - if (_.eq(authArr[0], "Bearer")) { - authToken = authArr[1]; //Bearer - if (authToken && authToken.length > 64) { - authType = 2; - } else { - authType = 1; - } - } else if (_.eq(authArr[0], "Basic")) { - authType = 2; - var b = Buffer.from(authArr[1], "base64"); - var user = _.split(b.toString(), ":"); - authToken = _.get(user, "1"); - } - if (authToken && authType == 1) { - checkAuthToken(authToken) - .then((users) => { - req.users = users; - next(); - return users; - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(e.status || 404).send(e.message); +var checkAccessToken = function (accessToken) { + return new Promise((resolve, reject) => { + if (_.isEmpty(accessToken)) { + return reject(new AppError.Unauthorized()); + } + var config = require('../core/config'); + var tokenSecret = _.get(config, 'jwt.tokenSecret'); + var jwt = require('jsonwebtoken'); + try { + var authData = jwt.verify(accessToken, tokenSecret); + } catch (e) { + return reject(new AppError.Unauthorized()); + } + var uid = _.get(authData, 'uid', null); + var hash = _.get(authData, 'hash', null); + if (parseInt(uid) > 0) { + return models.Users.findOne({ + where: { id: uid }, + }) + .then((users) => { + if (_.isEmpty(users)) { + throw new AppError.Unauthorized(); + } + if (!_.eq(hash, security.md5(users.get('ack_code')))) { + throw new AppError.Unauthorized(); + } + resolve(users); + }) + .catch((e) => { + reject(e); + }); } else { - next(e); + reject(new AppError.Unauthorized()); } - }); - } else if (authToken && authType == 2) { - checkAccessToken(authToken) - .then((users) => { - req.users = users; - next(); - return users; - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(e.status || 404).send(e.message); + }); +}; + +middleware.checkToken = function (req, res, next) { + var authArr = _.split(req.get('Authorization'), ' '); + var authType = 1; + var authToken = null; + if (_.eq(authArr[0], 'Bearer')) { + authToken = authArr[1]; //Bearer + if (authToken && authToken.length > 64) { + authType = 2; } else { - next(e); + authType = 1; } - }); - } else { - res.send(new AppError.Unauthorized(`Auth type not supported.`)); - } + } else if (_.eq(authArr[0], 'Basic')) { + authType = 2; + var b = Buffer.from(authArr[1], 'base64'); + var user = _.split(b.toString(), ':'); + authToken = _.get(user, '1'); + } + if (authToken && authType == 1) { + checkAuthToken(authToken) + .then((users) => { + req.users = users; + next(); + return users; + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(e.status || 404).send(e.message); + } else { + next(e); + } + }); + } else if (authToken && authType == 2) { + checkAccessToken(authToken) + .then((users) => { + req.users = users; + next(); + return users; + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(e.status || 404).send(e.message); + } else { + next(e); + } + }); + } else { + res.send(new AppError.Unauthorized(`Auth type not supported.`)); + } }; diff --git a/core/services/account-manager.js b/core/services/account-manager.js index e8b6613c..d895a4c9 100644 --- a/core/services/account-manager.js +++ b/core/services/account-manager.js @@ -1,273 +1,264 @@ -"use strict"; -var models = require("../../models"); -var _ = require("lodash"); -var validator = require("validator"); -var security = require("../utils/security"); -var factory = require("../utils/factory"); -var moment = require("moment"); -var EmailManager = require("./email-manager"); -var config = require("../config"); -var AppError = require("../app-error"); -var log4js = require("log4js"); -var log = log4js.getLogger("cps:AccountManager"); +'use strict'; +var models = require('../../models'); +var _ = require('lodash'); +var validator = require('validator'); +var security = require('../utils/security'); +var factory = require('../utils/factory'); +var moment = require('moment'); +var EmailManager = require('./email-manager'); +var config = require('../config'); +var AppError = require('../app-error'); +var log4js = require('log4js'); +var log = log4js.getLogger('cps:AccountManager'); var proto = (module.exports = function () { - function AccountManager() {} - AccountManager.__proto__ = proto; - return AccountManager; + function AccountManager() {} + AccountManager.__proto__ = proto; + return AccountManager; }); proto.collaboratorCan = function (uid, appName) { - return this.getCollaborator(uid, appName).then((data) => { - if (!data) { - log.debug(`collaboratorCan App ${appName} not exists.`); - throw new AppError.AppError(`App ${appName} not exists.`); - } - log.debug("collaboratorCan yes"); - return data; - }); + return this.getCollaborator(uid, appName).then((data) => { + if (!data) { + log.debug(`collaboratorCan App ${appName} not exists.`); + throw new AppError.AppError(`App ${appName} not exists.`); + } + log.debug('collaboratorCan yes'); + return data; + }); }; proto.ownerCan = function (uid, appName) { - return this.getCollaborator(uid, appName).then((data) => { - if (!data) { - log.debug(`ownerCan App ${appName} not exists.`); - throw new AppError.AppError(`App ${appName} not exists.`); - } - if (!_.eq(_.get(data, "roles"), "Owner")) { - log.debug(`ownerCan Permission Deny, You are not owner!`); - throw new AppError.AppError("Permission Deny, You are not owner!"); - } - return data; - }); + return this.getCollaborator(uid, appName).then((data) => { + if (!data) { + log.debug(`ownerCan App ${appName} not exists.`); + throw new AppError.AppError(`App ${appName} not exists.`); + } + if (!_.eq(_.get(data, 'roles'), 'Owner')) { + log.debug(`ownerCan Permission Deny, You are not owner!`); + throw new AppError.AppError('Permission Deny, You are not owner!'); + } + return data; + }); }; proto.getCollaborator = function (uid, appName) { - return models.Collaborators.findByAppNameAndUid(uid, appName); + return models.Collaborators.findByAppNameAndUid(uid, appName); }; proto.findUserByEmail = function (email) { - return models.Users.findOne({ where: { email: email } }).then((data) => { - if (_.isEmpty(data)) { - throw new AppError.AppError(email + " does not exist."); - } else { - return data; - } - }); + return models.Users.findOne({ where: { email: email } }).then((data) => { + if (_.isEmpty(data)) { + throw new AppError.AppError(email + ' does not exist.'); + } else { + return data; + } + }); }; proto.getAllAccessKeyByUid = function (uid) { - return models.UserTokens.findAll({ - where: { uid: uid }, - order: [["id", "DESC"]], - }).then((tokens) => { - return _.map(tokens, function (v) { - return { - name: "(hidden)", - createdTime: parseInt(moment(v.created_at).format("x")), - createdBy: v.created_by, - expires: parseInt(moment(v.expires_at).format("x")), - friendlyName: v.name, - description: v.description, - }; + return models.UserTokens.findAll({ + where: { uid: uid }, + order: [['id', 'DESC']], + }).then((tokens) => { + return _.map(tokens, function (v) { + return { + name: '(hidden)', + createdTime: parseInt(moment(v.created_at).format('x')), + createdBy: v.created_by, + expires: parseInt(moment(v.expires_at).format('x')), + friendlyName: v.name, + description: v.description, + }; + }); }); - }); }; proto.isExsitAccessKeyName = function (uid, friendlyName) { - return models.UserTokens.findOne({ - where: { uid: uid, name: friendlyName }, - }); + return models.UserTokens.findOne({ + where: { uid: uid, name: friendlyName }, + }); }; -proto.createAccessKey = function ( - uid, - newAccessKey, - ttl, - friendlyName, - createdBy, - description -) { - return models.UserTokens.create({ - uid: uid, - name: friendlyName, - tokens: newAccessKey, - description: description, - created_by: createdBy, - expires_at: moment() - .add(ttl / 1000, "seconds") - .format("YYYY-MM-DD HH:mm:ss"), - created_at: moment().format("YYYY-MM-DD HH:mm:ss"), - }); +proto.createAccessKey = function (uid, newAccessKey, ttl, friendlyName, createdBy, description) { + return models.UserTokens.create({ + uid: uid, + name: friendlyName, + tokens: newAccessKey, + description: description, + created_by: createdBy, + expires_at: moment() + .add(ttl / 1000, 'seconds') + .format('YYYY-MM-DD HH:mm:ss'), + created_at: moment().format('YYYY-MM-DD HH:mm:ss'), + }); }; -const LOGIN_LIMIT_PRE = "LOGIN_LIMIT_PRE_"; +const LOGIN_LIMIT_PRE = 'LOGIN_LIMIT_PRE_'; proto.login = function (account, password) { - if (_.isEmpty(account)) { - return Promise.reject(new AppError.AppError("请您输入邮箱地址")); - } - if (_.isEmpty(password)) { - return Promise.reject(new AppError.AppError("请您输入密码")); - } - var where = {}; - if (validator.isEmail(account)) { - where = { email: account }; - } else { - where = { username: account }; - } - var tryLoginTimes = _.get(config, "common.tryLoginTimes", 0); - return models.Users.findOne({ where: where }) - .then((users) => { - if (_.isEmpty(users)) { - throw new AppError.AppError("您输入的邮箱或密码有误"); - } - return users; - }) - .then((users) => { - if (tryLoginTimes > 0) { - var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; - var client = factory.getRedisClient("default"); - return client - .getAsync(loginKey) - .then((loginErrorTimes) => { - if (loginErrorTimes > tryLoginTimes) { - throw new AppError.AppError( - `您输入密码错误次数超过限制,帐户已经锁定` - ); + if (_.isEmpty(account)) { + return Promise.reject(new AppError.AppError('请您输入邮箱地址')); + } + if (_.isEmpty(password)) { + return Promise.reject(new AppError.AppError('请您输入密码')); + } + var where = {}; + if (validator.isEmail(account)) { + where = { email: account }; + } else { + where = { username: account }; + } + var tryLoginTimes = _.get(config, 'common.tryLoginTimes', 0); + return models.Users.findOne({ where: where }) + .then((users) => { + if (_.isEmpty(users)) { + throw new AppError.AppError('您输入的邮箱或密码有误'); } return users; - }) - .finally(() => client.quit()); - } else { - return users; - } - }) - .then((users) => { - if (!security.passwordVerifySync(password, users.password)) { - if (tryLoginTimes > 0) { - var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; - var client = factory.getRedisClient("default"); - client - .existsAsync(loginKey) - .then((isExists) => { - if (!isExists) { - var expires = - moment().endOf("day").format("X") - moment().format("X"); - return client.setexAsync(loginKey, expires, 0); - } - return isExists; - }) - .then(() => { - return client.incrAsync(loginKey); - }) - .finally(() => client.quit()); - } - throw new AppError.AppError("您输入的邮箱或密码有误"); - } else { - return users; - } - }); + }) + .then((users) => { + if (tryLoginTimes > 0) { + var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; + var client = factory.getRedisClient('default'); + return client + .getAsync(loginKey) + .then((loginErrorTimes) => { + if (loginErrorTimes > tryLoginTimes) { + throw new AppError.AppError(`您输入密码错误次数超过限制,帐户已经锁定`); + } + return users; + }) + .finally(() => client.quit()); + } else { + return users; + } + }) + .then((users) => { + if (!security.passwordVerifySync(password, users.password)) { + if (tryLoginTimes > 0) { + var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; + var client = factory.getRedisClient('default'); + client + .existsAsync(loginKey) + .then((isExists) => { + if (!isExists) { + var expires = + moment().endOf('day').format('X') - moment().format('X'); + return client.setexAsync(loginKey, expires, 0); + } + return isExists; + }) + .then(() => { + return client.incrAsync(loginKey); + }) + .finally(() => client.quit()); + } + throw new AppError.AppError('您输入的邮箱或密码有误'); + } else { + return users; + } + }); }; -const REGISTER_CODE = "REGISTER_CODE_"; +const REGISTER_CODE = 'REGISTER_CODE_'; const EXPIRED = 1200; const EXPIRED_SPEED = 10; proto.sendRegisterCode = function (email) { - if (_.isEmpty(email)) { - return Promise.reject(new AppError.AppError("请您输入邮箱地址")); - } - return models.Users.findOne({ where: { email: email } }) - .then((u) => { - if (u) { - throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); - } - }) - .then(() => { - //将token临时存储到redis - var token = security.randToken(40); - var client = factory.getRedisClient("default"); - return client - .setexAsync(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) + if (_.isEmpty(email)) { + return Promise.reject(new AppError.AppError('请您输入邮箱地址')); + } + return models.Users.findOne({ where: { email: email } }) + .then((u) => { + if (u) { + throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); + } + }) .then(() => { - return token; + //将token临时存储到redis + var token = security.randToken(40); + var client = factory.getRedisClient('default'); + return client + .setexAsync(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) + .then(() => { + return token; + }) + .finally(() => client.quit()); }) - .finally(() => client.quit()); - }) - .then((token) => { - //将token发送到用户邮箱 - var emailManager = new EmailManager(); - return emailManager.sendRegisterCode(email, token); - }); + .then((token) => { + //将token发送到用户邮箱 + var emailManager = new EmailManager(); + return emailManager.sendRegisterCode(email, token); + }); }; proto.checkRegisterCode = function (email, token) { - return models.Users.findOne({ where: { email: email } }) - .then((u) => { - if (u) { - throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); - } - }) - .then(() => { - var registerKey = `${REGISTER_CODE}${security.md5(email)}`; - var client = factory.getRedisClient("default"); - return client.getAsync(registerKey).then((storageToken) => { - if (_.isEmpty(storageToken)) { - throw new AppError.AppError(`验证码已经失效,请您重新获取`); - } - if (!_.eq(token, storageToken)) { - client - .ttlAsync(registerKey) - .then((ttl) => { - if (ttl > 0) { - return client.expireAsync(registerKey, ttl - EXPIRED_SPEED); - } - return ttl; - }) - .finally(() => client.quit()); - throw new AppError.AppError(`您输入的验证码不正确,请重新输入`); - } - return storageToken; - }); - }); + return models.Users.findOne({ where: { email: email } }) + .then((u) => { + if (u) { + throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); + } + }) + .then(() => { + var registerKey = `${REGISTER_CODE}${security.md5(email)}`; + var client = factory.getRedisClient('default'); + return client.getAsync(registerKey).then((storageToken) => { + if (_.isEmpty(storageToken)) { + throw new AppError.AppError(`验证码已经失效,请您重新获取`); + } + if (!_.eq(token, storageToken)) { + client + .ttlAsync(registerKey) + .then((ttl) => { + if (ttl > 0) { + return client.expireAsync(registerKey, ttl - EXPIRED_SPEED); + } + return ttl; + }) + .finally(() => client.quit()); + throw new AppError.AppError(`您输入的验证码不正确,请重新输入`); + } + return storageToken; + }); + }); }; proto.register = function (email, password) { - return models.Users.findOne({ where: { email: email } }) - .then((u) => { - if (u) { - throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); - } - }) - .then(() => { - var identical = security.randToken(9); - return models.Users.create({ - email: email, - password: security.passwordHashSync(password), - identical: identical, - }); - }); + return models.Users.findOne({ where: { email: email } }) + .then((u) => { + if (u) { + throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); + } + }) + .then(() => { + var identical = security.randToken(9); + return models.Users.create({ + email: email, + password: security.passwordHashSync(password), + identical: identical, + }); + }); }; proto.changePassword = function (uid, oldPassword, newPassword) { - if (!_.isString(newPassword) || newPassword.length < 6) { - return Promise.reject(new AppError.AppError("请您输入6~20位长度的新密码")); - } - return models.Users.findOne({ where: { id: uid } }) - .then((u) => { - if (!u) { - throw new AppError.AppError(`未找到用户信息`); - } - return u; - }) - .then((u) => { - var isEq = security.passwordVerifySync(oldPassword, u.get("password")); - if (!isEq) { - throw new AppError.AppError(`您输入的旧密码不正确,请重新输入`); - } - u.set("password", security.passwordHashSync(newPassword)); - u.set("ack_code", security.randToken(5)); - return u.save(); - }); + if (!_.isString(newPassword) || newPassword.length < 6) { + return Promise.reject(new AppError.AppError('请您输入6~20位长度的新密码')); + } + return models.Users.findOne({ where: { id: uid } }) + .then((u) => { + if (!u) { + throw new AppError.AppError(`未找到用户信息`); + } + return u; + }) + .then((u) => { + var isEq = security.passwordVerifySync(oldPassword, u.get('password')); + if (!isEq) { + throw new AppError.AppError(`您输入的旧密码不正确,请重新输入`); + } + u.set('password', security.passwordHashSync(newPassword)); + u.set('ack_code', security.randToken(5)); + return u.save(); + }); }; diff --git a/core/services/app-manager.js b/core/services/app-manager.js index b3a56811..02a92b89 100644 --- a/core/services/app-manager.js +++ b/core/services/app-manager.js @@ -5,150 +5,165 @@ var _ = require('lodash'); var security = require('../../core/utils/security'); var AppError = require('../app-error'); -var proto = module.exports = function (){ - function AppManager() { - - } - AppManager.__proto__ = proto; - return AppManager; -}; +var proto = (module.exports = function () { + function AppManager() {} + AppManager.__proto__ = proto; + return AppManager; +}); proto.findAppByName = function (uid, appName) { - return models.Apps.findOne({where: {name: appName, uid: uid}}); + return models.Apps.findOne({ where: { name: appName, uid: uid } }); }; proto.addApp = function (uid, appName, os, platform, identical) { - return models.sequelize.transaction((t) => { - return models.Apps.create({ - name: appName, - uid: uid, - os: os, - platform: platform - },{ - transaction: t - }) - .then((apps) => { - var constName = require('../const'); - var appId = apps.id; - var deployments = []; - var deploymentKey = security.randToken(28) + identical; - deployments.push({ - appid: appId, - name: constName.PRODUCTION, - last_deployment_version_id: 0, - label_id: 0, - deployment_key: deploymentKey - }); - deploymentKey = security.randToken(28) + identical; - deployments.push({ - appid: appId, - name: constName.STAGING, - last_deployment_version_id: 0, - label_id: 0, - deployment_key: deploymentKey - }); - return Promise.all([ - models.Collaborators.create({appid: appId, uid: uid, roles: "Owner"}, {transaction: t}), - models.Deployments.bulkCreate(deployments, {transaction: t}) - ]); + return models.sequelize.transaction((t) => { + return models.Apps.create( + { + name: appName, + uid: uid, + os: os, + platform: platform, + }, + { + transaction: t, + }, + ).then((apps) => { + var constName = require('../const'); + var appId = apps.id; + var deployments = []; + var deploymentKey = security.randToken(28) + identical; + deployments.push({ + appid: appId, + name: constName.PRODUCTION, + last_deployment_version_id: 0, + label_id: 0, + deployment_key: deploymentKey, + }); + deploymentKey = security.randToken(28) + identical; + deployments.push({ + appid: appId, + name: constName.STAGING, + last_deployment_version_id: 0, + label_id: 0, + deployment_key: deploymentKey, + }); + return Promise.all([ + models.Collaborators.create( + { appid: appId, uid: uid, roles: 'Owner' }, + { transaction: t }, + ), + models.Deployments.bulkCreate(deployments, { transaction: t }), + ]); + }); }); - }); }; proto.deleteApp = function (appId) { - return models.sequelize.transaction((t) => { - return Promise.all([ - models.Apps.destroy({where: {id: appId}, transaction: t}), - models.Collaborators.destroy({where: {appid: appId}, transaction: t}), - models.Deployments.destroy({where: {appid: appId}, transaction: t}) - ]); - }); + return models.sequelize.transaction((t) => { + return Promise.all([ + models.Apps.destroy({ where: { id: appId }, transaction: t }), + models.Collaborators.destroy({ where: { appid: appId }, transaction: t }), + models.Deployments.destroy({ where: { appid: appId }, transaction: t }), + ]); + }); }; proto.modifyApp = function (appId, params) { - return models.Apps.update(params, {where: {id:appId}}) - .spread((affectedCount, affectedRows) => { - if (!_.gt(affectedCount, 0)) { - throw AppError.AppError('modify errors'); - } - return affectedCount; - }); + return models.Apps.update(params, { where: { id: appId } }).spread( + (affectedCount, affectedRows) => { + if (!_.gt(affectedCount, 0)) { + throw AppError.AppError('modify errors'); + } + return affectedCount; + }, + ); }; proto.transferApp = function (appId, fromUid, toUid) { - return models.sequelize.transaction((t) => { - return Promise.all([ - models.Apps.update({uid: toUid}, {where: {id: appId}, transaction: t}), - models.Collaborators.destroy({where: {appid: appId, uid: fromUid}, transaction: t}), - models.Collaborators.destroy({where: {appid: appId, uid: toUid}, transaction: t}), - models.Collaborators.create({appid: appId, uid: toUid, roles: "Owner"}, {transaction: t}) - ]); - }); + return models.sequelize.transaction((t) => { + return Promise.all([ + models.Apps.update({ uid: toUid }, { where: { id: appId }, transaction: t }), + models.Collaborators.destroy({ where: { appid: appId, uid: fromUid }, transaction: t }), + models.Collaborators.destroy({ where: { appid: appId, uid: toUid }, transaction: t }), + models.Collaborators.create( + { appid: appId, uid: toUid, roles: 'Owner' }, + { transaction: t }, + ), + ]); + }); }; proto.listApps = function (uid) { - const self = this; - return models.Collaborators.findAll({where : {uid: uid}}) - .then((data) => { - if (_.isEmpty(data)){ - return []; - } else { - var appIds = _.map(data, (v) => { return v.appid }); - var Sequelize = require('sequelize'); - return models.Apps.findAll({where: {id: {[Sequelize.Op.in]: appIds}}}); - } - }) - .then((appInfos) => { - var rs = Promise.map(_.values(appInfos), (v) => { - return self.getAppDetailInfo(v, uid) - .then((info) => { - var constName = require('../const'); - if (info.os == constName.IOS) { - info.os = constName.IOS_NAME; - } else if (info.os == constName.ANDROID) { - info.os = constName.ANDROID_NAME; - } else if (info.os == constName.WINDOWS) { - info.os = constName.WINDOWS_NAME; - } - if (info.platform == constName.REACT_NATIVE) { - info.platform = constName.REACT_NATIVE_NAME; - } else if (info.platform == constName.CORDOVA) { - info.platform = constName.CORDOVA_NAME; - } - return info; - }); - }); - return rs; - }); + const self = this; + return models.Collaborators.findAll({ where: { uid: uid } }) + .then((data) => { + if (_.isEmpty(data)) { + return []; + } else { + var appIds = _.map(data, (v) => { + return v.appid; + }); + var Sequelize = require('sequelize'); + return models.Apps.findAll({ where: { id: { [Sequelize.Op.in]: appIds } } }); + } + }) + .then((appInfos) => { + var rs = Promise.map(_.values(appInfos), (v) => { + return self.getAppDetailInfo(v, uid).then((info) => { + var constName = require('../const'); + if (info.os == constName.IOS) { + info.os = constName.IOS_NAME; + } else if (info.os == constName.ANDROID) { + info.os = constName.ANDROID_NAME; + } else if (info.os == constName.WINDOWS) { + info.os = constName.WINDOWS_NAME; + } + if (info.platform == constName.REACT_NATIVE) { + info.platform = constName.REACT_NATIVE_NAME; + } else if (info.platform == constName.CORDOVA) { + info.platform = constName.CORDOVA_NAME; + } + return info; + }); + }); + return rs; + }); }; -proto.getAppDetailInfo = function (appInfo, currentUid) { - var appId = appInfo.get('id'); - return Promise.all([ - models.Deployments.findAll({where: {appid: appId}}), - models.Collaborators.findAll({where: {appid: appId}}), - ]) - .spread((deploymentInfos, collaboratorInfos) => { - return Promise.props({ - collaborators: Promise.reduce(collaboratorInfos, (allCol, collaborator) => { - return models.Users.findOne({where: {id: collaborator.get('uid')}}) - .then((u) => { - var isCurrentAccount = false; - if (_.eq(u.get('id'), currentUid)) { - isCurrentAccount = true; - } - allCol[u.get('email')] = {permission: collaborator.get('roles'), isCurrentAccount: isCurrentAccount}; - return allCol; - }); - }, {}), +proto.getAppDetailInfo = function (appInfo, currentUid) { + var appId = appInfo.get('id'); + return Promise.all([ + models.Deployments.findAll({ where: { appid: appId } }), + models.Collaborators.findAll({ where: { appid: appId } }), + ]).spread((deploymentInfos, collaboratorInfos) => { + return Promise.props({ + collaborators: Promise.reduce( + collaboratorInfos, + (allCol, collaborator) => { + return models.Users.findOne({ where: { id: collaborator.get('uid') } }).then( + (u) => { + var isCurrentAccount = false; + if (_.eq(u.get('id'), currentUid)) { + isCurrentAccount = true; + } + allCol[u.get('email')] = { + permission: collaborator.get('roles'), + isCurrentAccount: isCurrentAccount, + }; + return allCol; + }, + ); + }, + {}, + ), - deployments: _.map(deploymentInfos, (item) => { - return _.get(item, 'name'); - }), - os: appInfo.get('os'), - platform: appInfo.get('platform'), - name: appInfo.get('name'), - id: appInfo.get('id') + deployments: _.map(deploymentInfos, (item) => { + return _.get(item, 'name'); + }), + os: appInfo.get('os'), + platform: appInfo.get('platform'), + name: appInfo.get('name'), + id: appInfo.get('id'), + }); }); - }); }; diff --git a/core/services/client-manager.js b/core/services/client-manager.js index 87a16625..7d2a1bfe 100644 --- a/core/services/client-manager.js +++ b/core/services/client-manager.js @@ -5,316 +5,342 @@ var _ = require('lodash'); var common = require('../utils/common'); var factory = require('../utils/factory'); var AppError = require('../app-error'); -var config = require('../config'); +var config = require('../config'); var log4js = require('log4js'); -var log = log4js.getLogger("cps:ClientManager"); +var log = log4js.getLogger('cps:ClientManager'); var Sequelize = require('sequelize'); -var proto = module.exports = function (){ - function ClientManager() { +var proto = (module.exports = function () { + function ClientManager() {} + ClientManager.__proto__ = proto; + return ClientManager; +}); - } - ClientManager.__proto__ = proto; - return ClientManager; -}; - -const UPDATE_CHECK = "UPDATE_CHECK"; -const CHOSEN_MAN = "CHOSEN_MAN"; +const UPDATE_CHECK = 'UPDATE_CHECK'; +const CHOSEN_MAN = 'CHOSEN_MAN'; const EXPIRED = 600; -proto.getUpdateCheckCacheKey = function(deploymentKey, appVersion, label, packageHash) { - return [UPDATE_CHECK, deploymentKey, appVersion, label, packageHash].join(':'); -} +proto.getUpdateCheckCacheKey = function (deploymentKey, appVersion, label, packageHash) { + return [UPDATE_CHECK, deploymentKey, appVersion, label, packageHash].join(':'); +}; -proto.clearUpdateCheckCache = function(deploymentKey, appVersion, label, packageHash) { - log.debug('clear cache Deployments key:', deploymentKey); - let redisCacheKey = this.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); - var client = factory.getRedisClient("default"); - return client.keysAsync(redisCacheKey) - .then((data) => { - if (_.isArray(data)) { - return Promise.map(data, (key) => { - return client.delAsync(key); - }); - } - return null; - }) - .finally(() => client.quit()); -} +proto.clearUpdateCheckCache = function (deploymentKey, appVersion, label, packageHash) { + log.debug('clear cache Deployments key:', deploymentKey); + let redisCacheKey = this.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); + var client = factory.getRedisClient('default'); + return client + .keysAsync(redisCacheKey) + .then((data) => { + if (_.isArray(data)) { + return Promise.map(data, (key) => { + return client.delAsync(key); + }); + } + return null; + }) + .finally(() => client.quit()); +}; -proto.updateCheckFromCache = function(deploymentKey, appVersion, label, packageHash, clientUniqueId) { - const self = this; - var updateCheckCache = _.get(config, 'common.updateCheckCache', false); - if (updateCheckCache === false) { - return self.updateCheck(deploymentKey, appVersion, label, packageHash); - } - let redisCacheKey = self.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); - var client = factory.getRedisClient("default"); - return client.getAsync(redisCacheKey) - .then((data) => { - if (data) { - try { - log.debug('updateCheckFromCache read from catch'); - var obj = JSON.parse(data); - return obj; - } catch (e) { - } +proto.updateCheckFromCache = function ( + deploymentKey, + appVersion, + label, + packageHash, + clientUniqueId, +) { + const self = this; + var updateCheckCache = _.get(config, 'common.updateCheckCache', false); + if (updateCheckCache === false) { + return self.updateCheck(deploymentKey, appVersion, label, packageHash); } - return self.updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId) - .then((rs) => { - try { - log.debug('updateCheckFromCache read from db'); - var strRs = JSON.stringify(rs); - client.setexAsync(redisCacheKey, EXPIRED, strRs); - } catch (e) { - } - return rs; - }); - }) - .finally(() => client.quit()); -} + let redisCacheKey = self.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); + var client = factory.getRedisClient('default'); + return client + .getAsync(redisCacheKey) + .then((data) => { + if (data) { + try { + log.debug('updateCheckFromCache read from catch'); + var obj = JSON.parse(data); + return obj; + } catch (e) {} + } + return self + .updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId) + .then((rs) => { + try { + log.debug('updateCheckFromCache read from db'); + var strRs = JSON.stringify(rs); + client.setexAsync(redisCacheKey, EXPIRED, strRs); + } catch (e) {} + return rs; + }); + }) + .finally(() => client.quit()); +}; -proto.getChosenManCacheKey = function(packageId, rollout, clientUniqueId) { - return [CHOSEN_MAN, packageId, rollout, clientUniqueId].join(':'); -} +proto.getChosenManCacheKey = function (packageId, rollout, clientUniqueId) { + return [CHOSEN_MAN, packageId, rollout, clientUniqueId].join(':'); +}; -proto.random = function(rollout) { - var r = Math.ceil(Math.random()*10000); - if (r < rollout * 100) { - return Promise.resolve(true); - } else { - return Promise.resolve(false); - } -} +proto.random = function (rollout) { + var r = Math.ceil(Math.random() * 10000); + if (r < rollout * 100) { + return Promise.resolve(true); + } else { + return Promise.resolve(false); + } +}; proto.chosenMan = function (packageId, rollout, clientUniqueId) { - var self = this; - if (rollout >= 100) { - return Promise.resolve(true); - } - var rolloutClientUniqueIdCache = _.get(config, 'common.rolloutClientUniqueIdCache', false); - if (rolloutClientUniqueIdCache === false) { - return self.random(rollout); - } else { - var client = factory.getRedisClient("default"); - var redisCacheKey = self.getChosenManCacheKey(packageId, rollout, clientUniqueId); - return client.getAsync(redisCacheKey) - .then((data) => { - if (data == 1) { - return true; - } else if (data == 2) { - return false; - } else { - return self.random(rollout) - .then((r)=>{ - return client.setexAsync(redisCacheKey, 60*60*24*7, r ? 1:2) - .then(()=>{ - return r; - }); - }); - } - }) - .finally(() => client.quit()); - } -} - -proto.updateCheck = function(deploymentKey, appVersion, label, packageHash, clientUniqueId) { - var rs = { - packageId: 0, - downloadURL: "", - downloadUrl: "", - description: "", - isAvailable: false, - isDisabled: true, - isMandatory: false, - appVersion: appVersion, - targetBinaryRange: "", - packageHash: "", - label: "", - packageSize: 0, - updateAppVersion: false, - shouldRunBinaryVersion: false, - rollout: 100 - }; - var self = this; - if (_.isEmpty(deploymentKey) || _.isEmpty(appVersion)) { - return Promise.reject(new AppError.AppError("please input deploymentKey and appVersion")) - } - return models.Deployments.findOne({where: {deployment_key: deploymentKey}}) - .then((dep) => { - if (_.isEmpty(dep)) { - throw new AppError.AppError('Not found deployment, check deployment key is right.'); + var self = this; + if (rollout >= 100) { + return Promise.resolve(true); } - var version = common.parseVersion(appVersion); - return models.DeploymentsVersions.findAll({where: { - deployment_id: dep.id, - min_version: { [Sequelize.Op.lte]: version }, - max_version: { [Sequelize.Op.gt]: version } - }}) - .then((deploymentsVersionsMore) => { - var distance = 0; - var item = null; - _.map(deploymentsVersionsMore, function(value, index) { - if (index == 0) { - item = value; - distance = value.max_version - value.min_version; - } else { - if (distance > (value.max_version - value.min_version)) { - distance = value.max_version - value.min_version; - item = value; - } - } - }); - log.debug(item); - return item; - }); - }) - .then((deploymentsVersions) => { - var packageId = _.get(deploymentsVersions, 'current_package_id', 0); - if (_.eq(packageId, 0) ) { - return; + var rolloutClientUniqueIdCache = _.get(config, 'common.rolloutClientUniqueIdCache', false); + if (rolloutClientUniqueIdCache === false) { + return self.random(rollout); + } else { + var client = factory.getRedisClient('default'); + var redisCacheKey = self.getChosenManCacheKey(packageId, rollout, clientUniqueId); + return client + .getAsync(redisCacheKey) + .then((data) => { + if (data == 1) { + return true; + } else if (data == 2) { + return false; + } else { + return self.random(rollout).then((r) => { + return client + .setexAsync(redisCacheKey, 60 * 60 * 24 * 7, r ? 1 : 2) + .then(() => { + return r; + }); + }); + } + }) + .finally(() => client.quit()); + } +}; + +proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, clientUniqueId) { + var rs = { + packageId: 0, + downloadURL: '', + downloadUrl: '', + description: '', + isAvailable: false, + isDisabled: true, + isMandatory: false, + appVersion: appVersion, + targetBinaryRange: '', + packageHash: '', + label: '', + packageSize: 0, + updateAppVersion: false, + shouldRunBinaryVersion: false, + rollout: 100, + }; + var self = this; + if (_.isEmpty(deploymentKey) || _.isEmpty(appVersion)) { + return Promise.reject(new AppError.AppError('please input deploymentKey and appVersion')); } - return models.Packages.findById(packageId) - .then((packages) => { - if (packages - && _.eq(packages.deployment_id, deploymentsVersions.deployment_id) - && !_.eq(packages.package_hash, packageHash)) { - rs.packageId = packageId; - rs.targetBinaryRange = deploymentsVersions.app_version; - rs.downloadUrl = rs.downloadURL = common.getBlobDownloadUrl(_.get(packages, 'blob_url')); - rs.description = _.get(packages, 'description', ''); - rs.isAvailable = _.eq(packages.is_disabled, 1) ? false : true; - rs.isDisabled = _.eq(packages.is_disabled, 1) ? true : false; - rs.isMandatory = _.eq(packages.is_mandatory, 1) ? true : false; - rs.appVersion = appVersion; - rs.packageHash = _.get(packages, 'package_hash', ''); - rs.label = _.get(packages, 'label', ''); - rs.packageSize = _.get(packages, 'size', 0); - rs.rollout = _.get(packages, 'rollout', 100); - } - return packages; - }) - .then((packages) => { - //增量更新 - if (!_.isEmpty(packages) && !_.eq(_.get(packages, 'package_hash', ""), packageHash)) { - return models.PackagesDiff.findOne({where: {package_id:packages.id, diff_against_package_hash: packageHash}}) - .then((diffPackage) => { - if (!_.isEmpty(diffPackage)) { - rs.downloadURL = common.getBlobDownloadUrl(_.get(diffPackage, 'diff_blob_url')); - rs.downloadUrl = common.getBlobDownloadUrl(_.get(diffPackage, 'diff_blob_url')); - rs.packageSize = _.get(diffPackage, 'diff_size', 0); - } - return; + return models.Deployments.findOne({ where: { deployment_key: deploymentKey } }) + .then((dep) => { + if (_.isEmpty(dep)) { + throw new AppError.AppError('Not found deployment, check deployment key is right.'); + } + var version = common.parseVersion(appVersion); + return models.DeploymentsVersions.findAll({ + where: { + deployment_id: dep.id, + min_version: { [Sequelize.Op.lte]: version }, + max_version: { [Sequelize.Op.gt]: version }, + }, + }).then((deploymentsVersionsMore) => { + var distance = 0; + var item = null; + _.map(deploymentsVersionsMore, function (value, index) { + if (index == 0) { + item = value; + distance = value.max_version - value.min_version; + } else { + if (distance > value.max_version - value.min_version) { + distance = value.max_version - value.min_version; + item = value; + } + } + }); + log.debug(item); + return item; + }); + }) + .then((deploymentsVersions) => { + var packageId = _.get(deploymentsVersions, 'current_package_id', 0); + if (_.eq(packageId, 0)) { + return; + } + return models.Packages.findById(packageId) + .then((packages) => { + if ( + packages && + _.eq(packages.deployment_id, deploymentsVersions.deployment_id) && + !_.eq(packages.package_hash, packageHash) + ) { + rs.packageId = packageId; + rs.targetBinaryRange = deploymentsVersions.app_version; + rs.downloadUrl = rs.downloadURL = common.getBlobDownloadUrl( + _.get(packages, 'blob_url'), + ); + rs.description = _.get(packages, 'description', ''); + rs.isAvailable = _.eq(packages.is_disabled, 1) ? false : true; + rs.isDisabled = _.eq(packages.is_disabled, 1) ? true : false; + rs.isMandatory = _.eq(packages.is_mandatory, 1) ? true : false; + rs.appVersion = appVersion; + rs.packageHash = _.get(packages, 'package_hash', ''); + rs.label = _.get(packages, 'label', ''); + rs.packageSize = _.get(packages, 'size', 0); + rs.rollout = _.get(packages, 'rollout', 100); + } + return packages; + }) + .then((packages) => { + //增量更新 + if ( + !_.isEmpty(packages) && + !_.eq(_.get(packages, 'package_hash', ''), packageHash) + ) { + return models.PackagesDiff.findOne({ + where: { + package_id: packages.id, + diff_against_package_hash: packageHash, + }, + }).then((diffPackage) => { + if (!_.isEmpty(diffPackage)) { + rs.downloadURL = common.getBlobDownloadUrl( + _.get(diffPackage, 'diff_blob_url'), + ); + rs.downloadUrl = common.getBlobDownloadUrl( + _.get(diffPackage, 'diff_blob_url'), + ); + rs.packageSize = _.get(diffPackage, 'diff_size', 0); + } + return; + }); + } else { + return; + } + }); + }) + .then(() => { + return rs; }); - } else { - return; - } - }); - }) - .then(() => { - return rs; - }); }; proto.getPackagesInfo = function (deploymentKey, label) { - if (_.isEmpty(deploymentKey) || _.isEmpty(label)) { - return Promise.reject(new AppError.AppError("please input deploymentKey and label")) - } - return models.Deployments.findOne({where: {deployment_key: deploymentKey}}) - .then((dep) => { - if (_.isEmpty(dep)) { - throw new AppError.AppError('does not found deployment'); + if (_.isEmpty(deploymentKey) || _.isEmpty(label)) { + return Promise.reject(new AppError.AppError('please input deploymentKey and label')); } - return models.Packages.findOne({where: {deployment_id: dep.id, label: label}}); - }) - .then((packages) => { - if (_.isEmpty(packages)) { - throw new AppError.AppError('does not found packages'); - } - return packages; - }); + return models.Deployments.findOne({ where: { deployment_key: deploymentKey } }) + .then((dep) => { + if (_.isEmpty(dep)) { + throw new AppError.AppError('does not found deployment'); + } + return models.Packages.findOne({ where: { deployment_id: dep.id, label: label } }); + }) + .then((packages) => { + if (_.isEmpty(packages)) { + throw new AppError.AppError('does not found packages'); + } + return packages; + }); }; -proto.reportStatusDownload = function(deploymentKey, label, clientUniqueId) { - return this.getPackagesInfo(deploymentKey, label) - .then((packages) => { - return Promise.all([ - models.PackagesMetrics.findOne({where: {package_id: packages.id}}) - .then((metrics)=>{ - if (metrics) { - return metrics.increment('downloaded'); - } - return; - }), - models.LogReportDownload.create({ - package_id: packages.id, - client_unique_id: clientUniqueId - }) - ]); - }); +proto.reportStatusDownload = function (deploymentKey, label, clientUniqueId) { + return this.getPackagesInfo(deploymentKey, label).then((packages) => { + return Promise.all([ + models.PackagesMetrics.findOne({ where: { package_id: packages.id } }).then( + (metrics) => { + if (metrics) { + return metrics.increment('downloaded'); + } + return; + }, + ), + models.LogReportDownload.create({ + package_id: packages.id, + client_unique_id: clientUniqueId, + }), + ]); + }); }; proto.reportStatusDeploy = function (deploymentKey, label, clientUniqueId, others) { - return this.getPackagesInfo(deploymentKey, label) - .then((packages) => { - var constConfig = require('../const'); - var statusText = _.get(others, "status"); - var status = 0; - if (_.eq(statusText, "DeploymentSucceeded")) { - status = constConfig.DEPLOYMENT_SUCCEEDED; - } else if (_.eq(statusText, "DeploymentFailed")) { - status = constConfig.DEPLOYMENT_FAILED; - } - var packageId = packages.id; - var previous_deployment_key = _.get(others, 'previousDeploymentKey'); - var previous_label = _.get(others, 'previousLabelOrAppVersion'); - if (status > 0) { - return Promise.all([ - models.LogReportDeploy.create({ - package_id: packageId, - client_unique_id: clientUniqueId, - previous_label: previous_label, - previous_deployment_key: previous_deployment_key, - status: status - }), - models.PackagesMetrics.findOne({where: {package_id: packageId}}) - .then((metrics)=>{ - if (_.isEmpty(metrics)) { - return; - } - if (_.eq(status, constConfig.DEPLOYMENT_SUCCEEDED)) { - return metrics.increment(['installed', 'active'],{by: 1}); - } else { - return metrics.increment(['installed', 'failed'],{by: 1}); - } - }) - ]) - .then(()=>{ - if (previous_deployment_key && previous_label) { - return models.Deployments.findOne({where: {deployment_key: previous_deployment_key}}) - .then((dep)=>{ - if (_.isEmpty(dep)) { - return; - } - return models.Packages.findOne({where: {deployment_id: dep.id, label: previous_label}}) - .then((p)=>{ - if (_.isEmpty(p)) { + return this.getPackagesInfo(deploymentKey, label).then((packages) => { + var constConfig = require('../const'); + var statusText = _.get(others, 'status'); + var status = 0; + if (_.eq(statusText, 'DeploymentSucceeded')) { + status = constConfig.DEPLOYMENT_SUCCEEDED; + } else if (_.eq(statusText, 'DeploymentFailed')) { + status = constConfig.DEPLOYMENT_FAILED; + } + var packageId = packages.id; + var previous_deployment_key = _.get(others, 'previousDeploymentKey'); + var previous_label = _.get(others, 'previousLabelOrAppVersion'); + if (status > 0) { + return Promise.all([ + models.LogReportDeploy.create({ + package_id: packageId, + client_unique_id: clientUniqueId, + previous_label: previous_label, + previous_deployment_key: previous_deployment_key, + status: status, + }), + models.PackagesMetrics.findOne({ where: { package_id: packageId } }).then( + (metrics) => { + if (_.isEmpty(metrics)) { + return; + } + if (_.eq(status, constConfig.DEPLOYMENT_SUCCEEDED)) { + return metrics.increment(['installed', 'active'], { by: 1 }); + } else { + return metrics.increment(['installed', 'failed'], { by: 1 }); + } + }, + ), + ]).then(() => { + if (previous_deployment_key && previous_label) { + return models.Deployments.findOne({ + where: { deployment_key: previous_deployment_key }, + }) + .then((dep) => { + if (_.isEmpty(dep)) { + return; + } + return models.Packages.findOne({ + where: { deployment_id: dep.id, label: previous_label }, + }).then((p) => { + if (_.isEmpty(p)) { + return; + } + return models.PackagesMetrics.findOne({ + where: { package_id: p.id }, + }); + }); + }) + .then((metrics) => { + if (metrics) { + return metrics.decrement('active'); + } + return; + }); + } return; - } - return models.PackagesMetrics.findOne({where:{package_id: p.id}}); }); - }) - .then((metrics)=>{ - if (metrics) { - return metrics.decrement('active'); - } + } else { return; - }); } - return; - }); - } else { - return; - } - }); + }); }; diff --git a/core/services/collaborators.js b/core/services/collaborators.js index b2371103..23596cdf 100644 --- a/core/services/collaborators.js +++ b/core/services/collaborators.js @@ -3,61 +3,66 @@ var models = require('../../models'); var _ = require('lodash'); var AppError = require('../app-error'); -var proto = module.exports = function (){ - function Collaborators() { - - } - Collaborators.__proto__ = proto; - return Collaborators; -}; +var proto = (module.exports = function () { + function Collaborators() {} + Collaborators.__proto__ = proto; + return Collaborators; +}); proto.listCollaborators = function (appId) { - return models.Collaborators.findAll({where: {appid: appId}}) - .then((data) => { - return _.reduce(data, function(result, value, key) { - (result['uids'] || (result['uids'] = [])).push(value.uid); - result[value.uid] = value; - return result; - }, []); - }) - .then((coInfo) => { - var Sequelize = require('sequelize'); - return models.Users.findAll({where: {id: {[Sequelize.Op.in]: coInfo.uids}}}) - .then((data2) => { - return _.reduce(data2, function (result, value, key) { - var permission = ""; - if (!_.isEmpty(coInfo[value.id])) { - permission = coInfo[value.id].roles; - } - result[value.email] = {permission: permission}; - return result; - }, {}); - }); - }); + return models.Collaborators.findAll({ where: { appid: appId } }) + .then((data) => { + return _.reduce( + data, + function (result, value, key) { + (result['uids'] || (result['uids'] = [])).push(value.uid); + result[value.uid] = value; + return result; + }, + [], + ); + }) + .then((coInfo) => { + var Sequelize = require('sequelize'); + return models.Users.findAll({ where: { id: { [Sequelize.Op.in]: coInfo.uids } } }).then( + (data2) => { + return _.reduce( + data2, + function (result, value, key) { + var permission = ''; + if (!_.isEmpty(coInfo[value.id])) { + permission = coInfo[value.id].roles; + } + result[value.email] = { permission: permission }; + return result; + }, + {}, + ); + }, + ); + }); }; proto.addCollaborator = function (appId, uid) { - return models.Collaborators.findOne({where: {appid: appId, uid: uid}}) - .then((data) => { - if (_.isEmpty(data)){ - return models.Collaborators.create({ - appid: appId, - uid: uid, - roles: "Collaborator" - }); - }else { - throw new AppError.AppError('user already is Collaborator.'); - } - }); + return models.Collaborators.findOne({ where: { appid: appId, uid: uid } }).then((data) => { + if (_.isEmpty(data)) { + return models.Collaborators.create({ + appid: appId, + uid: uid, + roles: 'Collaborator', + }); + } else { + throw new AppError.AppError('user already is Collaborator.'); + } + }); }; proto.deleteCollaborator = function (appId, uid) { - return models.Collaborators.findOne({where: {appid: appId, uid: uid}}) - .then((data) => { - if (_.isEmpty(data)){ - throw new AppError.AppError('user is not a Collaborator'); - }else { - return models.Collaborators.destroy({where: {id: data.id}}); - } - }); + return models.Collaborators.findOne({ where: { appid: appId, uid: uid } }).then((data) => { + if (_.isEmpty(data)) { + throw new AppError.AppError('user is not a Collaborator'); + } else { + return models.Collaborators.destroy({ where: { id: data.id } }); + } + }); }; diff --git a/core/services/datacenter-manager.js b/core/services/datacenter-manager.js index 7ea5dfe0..116c337d 100644 --- a/core/services/datacenter-manager.js +++ b/core/services/datacenter-manager.js @@ -1,137 +1,124 @@ -"use strict"; -var _ = require("lodash"); -var fs = require("fs"); -var os = require("os"); -var security = require("../utils/security"); -var common = require("../utils/common"); -const MANIFEST_FILE_NAME = "manifest.json"; -const CONTENTS_NAME = "contents"; -var AppError = require("../app-error"); -var log4js = require("log4js"); -var log = log4js.getLogger("cps:DataCenterManager"); -var path = require("path"); +'use strict'; +var _ = require('lodash'); +var fs = require('fs'); +var os = require('os'); +var security = require('../utils/security'); +var common = require('../utils/common'); +const MANIFEST_FILE_NAME = 'manifest.json'; +const CONTENTS_NAME = 'contents'; +var AppError = require('../app-error'); +var log4js = require('log4js'); +var log = log4js.getLogger('cps:DataCenterManager'); +var path = require('path'); var proto = (module.exports = function () { - function DataCenterManager() {} - DataCenterManager.__proto__ = proto; - return DataCenterManager; + function DataCenterManager() {} + DataCenterManager.__proto__ = proto; + return DataCenterManager; }); proto.getDataDir = function () { - var dataDir = _.get(require("../config"), "common.dataDir", {}); - if (_.isEmpty(dataDir)) { - dataDir = os.tmpdir(); - } - return dataDir; + var dataDir = _.get(require('../config'), 'common.dataDir', {}); + if (_.isEmpty(dataDir)) { + dataDir = os.tmpdir(); + } + return dataDir; }; proto.hasPackageStoreSync = function (packageHash) { - var dataDir = this.getDataDir(); - var packageHashPath = path.join(dataDir, packageHash); - var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); - var contentPath = path.join(packageHashPath, CONTENTS_NAME); - return fs.existsSync(manifestFile) && fs.existsSync(contentPath); -}; - -proto.getPackageInfo = function (packageHash) { - if (this.hasPackageStoreSync(packageHash)) { var dataDir = this.getDataDir(); var packageHashPath = path.join(dataDir, packageHash); var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); var contentPath = path.join(packageHashPath, CONTENTS_NAME); - return this.buildPackageInfo( - packageHash, - packageHashPath, - contentPath, - manifestFile - ); - } else { - throw new AppError.AppError("can't get PackageInfo"); - } + return fs.existsSync(manifestFile) && fs.existsSync(contentPath); }; -proto.buildPackageInfo = function ( - packageHash, - packageHashPath, - contentPath, - manifestFile -) { - return { - packageHash: packageHash, - path: packageHashPath, - contentPath: contentPath, - manifestFilePath: manifestFile, - }; +proto.getPackageInfo = function (packageHash) { + if (this.hasPackageStoreSync(packageHash)) { + var dataDir = this.getDataDir(); + var packageHashPath = path.join(dataDir, packageHash); + var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); + var contentPath = path.join(packageHashPath, CONTENTS_NAME); + return this.buildPackageInfo(packageHash, packageHashPath, contentPath, manifestFile); + } else { + throw new AppError.AppError("can't get PackageInfo"); + } +}; + +proto.buildPackageInfo = function (packageHash, packageHashPath, contentPath, manifestFile) { + return { + packageHash: packageHash, + path: packageHashPath, + contentPath: contentPath, + manifestFilePath: manifestFile, + }; }; proto.validateStore = function (providePackageHash) { - var dataDir = this.getDataDir(); - var packageHashPath = path.join(dataDir, providePackageHash); - var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); - var contentPath = path.join(packageHashPath, CONTENTS_NAME); - if (!this.hasPackageStoreSync(providePackageHash)) { - log.debug(`validateStore providePackageHash not exist`); - return Promise.resolve(false); - } - return security.calcAllFileSha256(contentPath).then((manifestJson) => { - var packageHash = security.packageHashSync(manifestJson); - log.debug(`validateStore packageHash:`, packageHash); - try { - var manifestJsonLocal = JSON.parse(fs.readFileSync(manifestFile)); - } catch (e) { - log.debug(`validateStore manifestFile contents invilad`); - return false; - } - var packageHashLocal = security.packageHashSync(manifestJsonLocal); - log.debug(`validateStore packageHashLocal:`, packageHashLocal); - if ( - _.eq(providePackageHash, packageHash) && - _.eq(providePackageHash, packageHashLocal) - ) { - log.debug(`validateStore store files is ok`); - return true; + var dataDir = this.getDataDir(); + var packageHashPath = path.join(dataDir, providePackageHash); + var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); + var contentPath = path.join(packageHashPath, CONTENTS_NAME); + if (!this.hasPackageStoreSync(providePackageHash)) { + log.debug(`validateStore providePackageHash not exist`); + return Promise.resolve(false); } - log.debug(`validateStore store files broken`); - return false; - }); + return security.calcAllFileSha256(contentPath).then((manifestJson) => { + var packageHash = security.packageHashSync(manifestJson); + log.debug(`validateStore packageHash:`, packageHash); + try { + var manifestJsonLocal = JSON.parse(fs.readFileSync(manifestFile)); + } catch (e) { + log.debug(`validateStore manifestFile contents invilad`); + return false; + } + var packageHashLocal = security.packageHashSync(manifestJsonLocal); + log.debug(`validateStore packageHashLocal:`, packageHashLocal); + if (_.eq(providePackageHash, packageHash) && _.eq(providePackageHash, packageHashLocal)) { + log.debug(`validateStore store files is ok`); + return true; + } + log.debug(`validateStore store files broken`); + return false; + }); }; proto.storePackage = function (sourceDst, force) { - log.debug(`storePackage sourceDst:`, sourceDst); - if (_.isEmpty(force)) { - force = false; - } - var self = this; - return security.calcAllFileSha256(sourceDst).then((manifestJson) => { - var packageHash = security.packageHashSync(manifestJson); - log.debug("storePackage manifestJson packageHash:", packageHash); - var dataDir = self.getDataDir(); - var packageHashPath = path.join(dataDir, packageHash); - var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); - var contentPath = path.join(packageHashPath, CONTENTS_NAME); - return self.validateStore(packageHash).then((isValidate) => { - if (!force && isValidate) { - return self.buildPackageInfo( - packageHash, - packageHashPath, - contentPath, - manifestFile - ); - } else { - log.debug(`storePackage cover from sourceDst:`, sourceDst); - return common.createEmptyFolder(packageHashPath).then(() => { - return common.copy(sourceDst, contentPath).then(() => { - var manifestString = JSON.stringify(manifestJson); - fs.writeFileSync(manifestFile, manifestString); - return self.buildPackageInfo( - packageHash, - packageHashPath, - contentPath, - manifestFile - ); - }); + log.debug(`storePackage sourceDst:`, sourceDst); + if (_.isEmpty(force)) { + force = false; + } + var self = this; + return security.calcAllFileSha256(sourceDst).then((manifestJson) => { + var packageHash = security.packageHashSync(manifestJson); + log.debug('storePackage manifestJson packageHash:', packageHash); + var dataDir = self.getDataDir(); + var packageHashPath = path.join(dataDir, packageHash); + var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); + var contentPath = path.join(packageHashPath, CONTENTS_NAME); + return self.validateStore(packageHash).then((isValidate) => { + if (!force && isValidate) { + return self.buildPackageInfo( + packageHash, + packageHashPath, + contentPath, + manifestFile, + ); + } else { + log.debug(`storePackage cover from sourceDst:`, sourceDst); + return common.createEmptyFolder(packageHashPath).then(() => { + return common.copy(sourceDst, contentPath).then(() => { + var manifestString = JSON.stringify(manifestJson); + fs.writeFileSync(manifestFile, manifestString); + return self.buildPackageInfo( + packageHash, + packageHashPath, + contentPath, + manifestFile, + ); + }); + }); + } }); - } }); - }); }; diff --git a/core/services/deployments.js b/core/services/deployments.js index dd06d956..cc7c0395 100644 --- a/core/services/deployments.js +++ b/core/services/deployments.js @@ -1,270 +1,254 @@ -"use strict"; -var Promise = require("bluebird"); -var models = require("../../models"); -var security = require("../../core/utils/security"); -var common = require("../../core/utils/common"); -var _ = require("lodash"); -var moment = require("moment"); -var AppError = require("../app-error"); -var log4js = require("log4js"); -var log = log4js.getLogger("cps:deployments"); +'use strict'; +var Promise = require('bluebird'); +var models = require('../../models'); +var security = require('../../core/utils/security'); +var common = require('../../core/utils/common'); +var _ = require('lodash'); +var moment = require('moment'); +var AppError = require('../app-error'); +var log4js = require('log4js'); +var log = log4js.getLogger('cps:deployments'); var proto = (module.exports = function () { - function Deployments() {} - Deployments.__proto__ = proto; - return Deployments; + function Deployments() {} + Deployments.__proto__ = proto; + return Deployments; }); proto.getAllPackageIdsByDeploymentsId = function (deploymentsId) { - return models.Packages.findAll({ where: { deployment_id: deploymentsId } }); + return models.Packages.findAll({ where: { deployment_id: deploymentsId } }); }; proto.existDeloymentName = function (appId, name) { - return models.Deployments.findOne({ - where: { appid: appId, name: name }, - }).then((data) => { - if (!_.isEmpty(data)) { - throw new AppError.AppError(name + " name does Exist!"); - } else { - return data; - } - }); + return models.Deployments.findOne({ + where: { appid: appId, name: name }, + }).then((data) => { + if (!_.isEmpty(data)) { + throw new AppError.AppError(name + ' name does Exist!'); + } else { + return data; + } + }); }; proto.addDeloyment = function (name, appId, uid) { - var self = this; - return models.Users.findById(uid).then((user) => { - if (_.isEmpty(user)) { - throw new AppError.AppError("can't find user"); - } - return self.existDeloymentName(appId, name).then(() => { - var identical = user.identical; - var deploymentKey = security.randToken(28) + identical; - return models.Deployments.create({ - appid: appId, - name: name, - deployment_key: deploymentKey, - last_deployment_version_id: 0, - label_id: 0, - }); + var self = this; + return models.Users.findById(uid).then((user) => { + if (_.isEmpty(user)) { + throw new AppError.AppError("can't find user"); + } + return self.existDeloymentName(appId, name).then(() => { + var identical = user.identical; + var deploymentKey = security.randToken(28) + identical; + return models.Deployments.create({ + appid: appId, + name: name, + deployment_key: deploymentKey, + last_deployment_version_id: 0, + label_id: 0, + }); + }); }); - }); }; proto.renameDeloymentByName = function (deploymentName, appId, newName) { - return this.existDeloymentName(appId, newName).then(() => { - return models.Deployments.update( - { name: newName }, - { where: { name: deploymentName, appid: appId } } - ).spread((affectedCount, affectedRow) => { - if (_.gt(affectedCount, 0)) { - return { name: newName }; - } else { - throw new AppError.AppError( - `does not find the deployment "${deploymentName}"` - ); - } + return this.existDeloymentName(appId, newName).then(() => { + return models.Deployments.update( + { name: newName }, + { where: { name: deploymentName, appid: appId } }, + ).spread((affectedCount, affectedRow) => { + if (_.gt(affectedCount, 0)) { + return { name: newName }; + } else { + throw new AppError.AppError(`does not find the deployment "${deploymentName}"`); + } + }); }); - }); }; proto.deleteDeloymentByName = function (deploymentName, appId) { - return models.Deployments.destroy({ - where: { name: deploymentName, appid: appId }, - }).then((rowNum) => { - if (_.gt(rowNum, 0)) { - return { name: `${deploymentName}` }; - } else { - throw new AppError.AppError( - `does not find the deployment "${deploymentName}"` - ); - } - }); + return models.Deployments.destroy({ + where: { name: deploymentName, appid: appId }, + }).then((rowNum) => { + if (_.gt(rowNum, 0)) { + return { name: `${deploymentName}` }; + } else { + throw new AppError.AppError(`does not find the deployment "${deploymentName}"`); + } + }); }; proto.findDeloymentByName = function (deploymentName, appId) { - log.debug(`findDeloymentByName name:${deploymentName},appId: ${appId}`); - return models.Deployments.findOne({ - where: { name: deploymentName, appid: appId }, - }); + log.debug(`findDeloymentByName name:${deploymentName},appId: ${appId}`); + return models.Deployments.findOne({ + where: { name: deploymentName, appid: appId }, + }); }; proto.findPackagesAndOtherInfos = function (packageId) { - return models.Packages.findOne({ - where: { id: packageId }, - }).then((packageInfo) => { - if (!packageInfo) { - return null; - } - return Promise.props({ - packageInfo: packageInfo, - packageDiffMap: models.PackagesDiff.findAll({ - where: { package_id: packageId }, - }).then((diffs) => { - if (diffs.length > 0) { - return _.reduce( - diffs, - (result, v) => { - result[_.get(v, "diff_against_package_hash")] = { - size: _.get(v, "diff_size"), - url: common.getBlobDownloadUrl(_.get(v, "diff_blob_url")), - }; - return result; - }, - {} - ); + return models.Packages.findOne({ + where: { id: packageId }, + }).then((packageInfo) => { + if (!packageInfo) { + return null; } - return null; - }), - userInfo: models.Users.findOne({ - where: { id: packageInfo.released_by }, - }), - deploymentsVersions: models.DeploymentsVersions.findById( - packageInfo.deployment_version_id - ), + return Promise.props({ + packageInfo: packageInfo, + packageDiffMap: models.PackagesDiff.findAll({ + where: { package_id: packageId }, + }).then((diffs) => { + if (diffs.length > 0) { + return _.reduce( + diffs, + (result, v) => { + result[_.get(v, 'diff_against_package_hash')] = { + size: _.get(v, 'diff_size'), + url: common.getBlobDownloadUrl(_.get(v, 'diff_blob_url')), + }; + return result; + }, + {}, + ); + } + return null; + }), + userInfo: models.Users.findOne({ + where: { id: packageInfo.released_by }, + }), + deploymentsVersions: models.DeploymentsVersions.findById( + packageInfo.deployment_version_id, + ), + }); }); - }); }; proto.findDeloymentsPackages = function (deploymentsVersionsId) { - var self = this; - return models.DeploymentsVersions.findOne({ - where: { id: deploymentsVersionsId }, - }).then((deploymentsVersionsInfo) => { - if (deploymentsVersionsInfo) { - return self.findPackagesAndOtherInfos( - deploymentsVersionsInfo.current_package_id - ); - } - return null; - }); + var self = this; + return models.DeploymentsVersions.findOne({ + where: { id: deploymentsVersionsId }, + }).then((deploymentsVersionsInfo) => { + if (deploymentsVersionsInfo) { + return self.findPackagesAndOtherInfos(deploymentsVersionsInfo.current_package_id); + } + return null; + }); }; proto.formatPackage = function (packageVersion) { - if (!packageVersion) { - return null; - } - return { - description: _.get(packageVersion, "packageInfo.description"), - isDisabled: false, - isMandatory: - _.get(packageVersion, "packageInfo.is_mandatory") == 1 ? true : false, - rollout: 100, - appVersion: _.get(packageVersion, "deploymentsVersions.app_version"), - packageHash: _.get(packageVersion, "packageInfo.package_hash"), - blobUrl: common.getBlobDownloadUrl( - _.get(packageVersion, "packageInfo.blob_url") - ), - size: _.get(packageVersion, "packageInfo.size"), - manifestBlobUrl: common.getBlobDownloadUrl( - _.get(packageVersion, "packageInfo.manifest_blob_url") - ), - diffPackageMap: _.get(packageVersion, "packageDiffMap"), - releaseMethod: _.get(packageVersion, "packageInfo.release_method"), - uploadTime: parseInt( - moment(_.get(packageVersion, "packageInfo.updated_at")).format("x") - ), - originalLabel: _.get(packageVersion, "packageInfo.original_label"), - originalDeployment: _.get( - packageVersion, - "packageInfo.original_deployment" - ), - label: _.get(packageVersion, "packageInfo.label"), - releasedBy: _.get(packageVersion, "userInfo.email"), - }; + if (!packageVersion) { + return null; + } + return { + description: _.get(packageVersion, 'packageInfo.description'), + isDisabled: false, + isMandatory: _.get(packageVersion, 'packageInfo.is_mandatory') == 1 ? true : false, + rollout: 100, + appVersion: _.get(packageVersion, 'deploymentsVersions.app_version'), + packageHash: _.get(packageVersion, 'packageInfo.package_hash'), + blobUrl: common.getBlobDownloadUrl(_.get(packageVersion, 'packageInfo.blob_url')), + size: _.get(packageVersion, 'packageInfo.size'), + manifestBlobUrl: common.getBlobDownloadUrl( + _.get(packageVersion, 'packageInfo.manifest_blob_url'), + ), + diffPackageMap: _.get(packageVersion, 'packageDiffMap'), + releaseMethod: _.get(packageVersion, 'packageInfo.release_method'), + uploadTime: parseInt(moment(_.get(packageVersion, 'packageInfo.updated_at')).format('x')), + originalLabel: _.get(packageVersion, 'packageInfo.original_label'), + originalDeployment: _.get(packageVersion, 'packageInfo.original_deployment'), + label: _.get(packageVersion, 'packageInfo.label'), + releasedBy: _.get(packageVersion, 'userInfo.email'), + }; }; proto.listDeloyments = function (appId) { - var self = this; - return models.Deployments.findAll({ where: { appid: appId } }).then( - (deploymentsInfos) => { - if (_.isEmpty(deploymentsInfos)) { - return []; - } - return Promise.map(deploymentsInfos, (v) => { - return self.listDeloyment(v); - }); - } - ); + var self = this; + return models.Deployments.findAll({ where: { appid: appId } }).then((deploymentsInfos) => { + if (_.isEmpty(deploymentsInfos)) { + return []; + } + return Promise.map(deploymentsInfos, (v) => { + return self.listDeloyment(v); + }); + }); }; proto.listDeloyment = function (deploymentInfo) { - const self = this; - return Promise.props({ - createdTime: parseInt(moment(deploymentInfo.created_at).format("x")), - id: `${deploymentInfo.id}`, - key: deploymentInfo.deployment_key, - name: deploymentInfo.name, - package: self - .findDeloymentsPackages([deploymentInfo.last_deployment_version_id]) - .then(self.formatPackage), - }); + const self = this; + return Promise.props({ + createdTime: parseInt(moment(deploymentInfo.created_at).format('x')), + id: `${deploymentInfo.id}`, + key: deploymentInfo.deployment_key, + name: deploymentInfo.name, + package: self + .findDeloymentsPackages([deploymentInfo.last_deployment_version_id]) + .then(self.formatPackage), + }); }; proto.getDeploymentHistory = function (deploymentId) { - var self = this; - return models.DeploymentsHistory.findAll({ - where: { deployment_id: deploymentId }, - order: [["id", "desc"]], - limit: 15, - }) - .then((history) => { - return _.map(history, (v) => { - return v.package_id; - }); + var self = this; + return models.DeploymentsHistory.findAll({ + where: { deployment_id: deploymentId }, + order: [['id', 'desc']], + limit: 15, }) - .then((packageIds) => { - return Promise.map(packageIds, (v) => { - return self.findPackagesAndOtherInfos(v).then(self.formatPackage); - }); - }); + .then((history) => { + return _.map(history, (v) => { + return v.package_id; + }); + }) + .then((packageIds) => { + return Promise.map(packageIds, (v) => { + return self.findPackagesAndOtherInfos(v).then(self.formatPackage); + }); + }); }; proto.deleteDeploymentHistory = function (deploymentId) { - return models.sequelize.transaction((t) => { - return Promise.all([ - models.Deployments.update( - { last_deployment_version_id: 0, label_id: 0 }, - { where: { id: deploymentId }, transaction: t } - ), - models.DeploymentsHistory.findAll({ - where: { deployment_id: deploymentId }, - order: [["id", "desc"]], - limit: 1000, - }).then((rs) => { - return Promise.map(rs, (v) => { - return v.destroy({ transaction: t }); - }); - }), - models.DeploymentsVersions.findAll({ - where: { deployment_id: deploymentId }, - order: [["id", "desc"]], - limit: 1000, - }).then((rs) => { - return Promise.map(rs, (v) => { - return v.destroy({ transaction: t }); - }); - }), - models.Packages.findAll({ - where: { deployment_id: deploymentId }, - order: [["id", "desc"]], - limit: 1000, - }).then((rs) => { - return Promise.map(rs, (v) => { - return v.destroy({ transaction: t }).then(() => { - return Promise.all([ - models.PackagesMetrics.destroy({ - where: { package_id: v.get("id") }, - transaction: t, - }), - models.PackagesDiff.destroy({ - where: { package_id: v.get("id") }, - transaction: t, - }), - ]); - }); - }); - }), - ]); - }); + return models.sequelize.transaction((t) => { + return Promise.all([ + models.Deployments.update( + { last_deployment_version_id: 0, label_id: 0 }, + { where: { id: deploymentId }, transaction: t }, + ), + models.DeploymentsHistory.findAll({ + where: { deployment_id: deploymentId }, + order: [['id', 'desc']], + limit: 1000, + }).then((rs) => { + return Promise.map(rs, (v) => { + return v.destroy({ transaction: t }); + }); + }), + models.DeploymentsVersions.findAll({ + where: { deployment_id: deploymentId }, + order: [['id', 'desc']], + limit: 1000, + }).then((rs) => { + return Promise.map(rs, (v) => { + return v.destroy({ transaction: t }); + }); + }), + models.Packages.findAll({ + where: { deployment_id: deploymentId }, + order: [['id', 'desc']], + limit: 1000, + }).then((rs) => { + return Promise.map(rs, (v) => { + return v.destroy({ transaction: t }).then(() => { + return Promise.all([ + models.PackagesMetrics.destroy({ + where: { package_id: v.get('id') }, + transaction: t, + }), + models.PackagesDiff.destroy({ + where: { package_id: v.get('id') }, + transaction: t, + }), + ]); + }); + }); + }), + ]); + }); }; diff --git a/core/services/email-manager.js b/core/services/email-manager.js index 613b61ba..be8b5778 100644 --- a/core/services/email-manager.js +++ b/core/services/email-manager.js @@ -1,44 +1,44 @@ -"use strict"; -var _ = require("lodash"); -var nodemailer = require("nodemailer"); -var config = require("../config"); +'use strict'; +var _ = require('lodash'); +var nodemailer = require('nodemailer'); +var config = require('../config'); var proto = (module.exports = function () { - function EmailManager() {} - EmailManager.__proto__ = proto; - return EmailManager; + function EmailManager() {} + EmailManager.__proto__ = proto; + return EmailManager; }); proto.sendMail = function (options) { - return new Promise((resolve, reject) => { - if (!_.get(options, "to")) { - return reject(new AppError.AppError("to是必传参数")); - } - var smtpConfig = _.get(config, "smtpConfig"); - if (!smtpConfig || !smtpConfig.host) { - resolve({}); - } - var transporter = nodemailer.createTransport(smtpConfig); - var sendEmailAddress = _.get(smtpConfig, "auth.user"); - var defaultMailOptions = { - from: `"CodePush Server" <${sendEmailAddress}>`, // sender address - to: "", // list of receivers 必传参数 - subject: "CodePush Server", // Subject line - html: "", // html body - }; - var mailOptions = _.assign(defaultMailOptions, options); - transporter.sendMail(mailOptions, function (error, info) { - if (error) { - return reject(error); - } - resolve(info); + return new Promise((resolve, reject) => { + if (!_.get(options, 'to')) { + return reject(new AppError.AppError('to是必传参数')); + } + var smtpConfig = _.get(config, 'smtpConfig'); + if (!smtpConfig || !smtpConfig.host) { + resolve({}); + } + var transporter = nodemailer.createTransport(smtpConfig); + var sendEmailAddress = _.get(smtpConfig, 'auth.user'); + var defaultMailOptions = { + from: `"CodePush Server" <${sendEmailAddress}>`, // sender address + to: '', // list of receivers 必传参数 + subject: 'CodePush Server', // Subject line + html: '', // html body + }; + var mailOptions = _.assign(defaultMailOptions, options); + transporter.sendMail(mailOptions, function (error, info) { + if (error) { + return reject(error); + } + resolve(info); + }); }); - }); }; proto.sendRegisterCode = function (email, code) { - return proto.sendMail({ - to: email, - html: `
您接收的验证码为: ${code} 20分钟内有效
`, - }); + return proto.sendMail({ + to: email, + html: `
您接收的验证码为: ${code} 20分钟内有效
`, + }); }; diff --git a/core/services/package-manager.js b/core/services/package-manager.js index fe259c7c..6c19a935 100644 --- a/core/services/package-manager.js +++ b/core/services/package-manager.js @@ -5,661 +5,779 @@ var security = require('../utils/security'); var _ = require('lodash'); var qetag = require('../utils/qetag'); var formidable = require('formidable'); -var yazl = require("yazl"); -var fs = require("fs"); -var slash = require("slash"); +var yazl = require('yazl'); +var fs = require('fs'); +var slash = require('slash'); var common = require('../utils/common'); var os = require('os'); var path = require('path'); var AppError = require('../app-error'); var constConfig = require('../const'); var log4js = require('log4js'); -var log = log4js.getLogger("cps:PackageManager"); +var log = log4js.getLogger('cps:PackageManager'); -var proto = module.exports = function (){ - function PackageManager() { +var proto = (module.exports = function () { + function PackageManager() {} + PackageManager.__proto__ = proto; + return PackageManager; +}); - } - PackageManager.__proto__ = proto; - return PackageManager; +proto.getMetricsbyPackageId = function (packageId) { + return models.PackagesMetrics.findOne({ where: { package_id: packageId } }); }; -proto.getMetricsbyPackageId = function(packageId) { - return models.PackagesMetrics.findOne({where: {package_id: packageId}}); -} - proto.findPackageInfoByDeploymentIdAndLabel = function (deploymentId, label) { - return models.Packages.findOne({where: {deployment_id: deploymentId, label:label}}); -} + return models.Packages.findOne({ where: { deployment_id: deploymentId, label: label } }); +}; proto.findLatestPackageInfoByDeployVersion = function (deploymentsVersionsId) { - return models.DeploymentsVersions.findById(deploymentsVersionsId) - .then((deploymentsVersions)=>{ - if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { - var e = new AppError.AppError("not found last packages"); - log.debug(e); - throw e; - } - return models.Packages.findById(deploymentsVersions.current_package_id); - }); -} + return models.DeploymentsVersions.findById(deploymentsVersionsId).then( + (deploymentsVersions) => { + if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { + var e = new AppError.AppError('not found last packages'); + log.debug(e); + throw e; + } + return models.Packages.findById(deploymentsVersions.current_package_id); + }, + ); +}; proto.parseReqFile = function (req) { - log.debug('parseReqFile'); - return new Promise((resolve, reject) => { - var form = new formidable.IncomingForm(); - form.maxFieldsSize = 200 * 1024 * 1024; - form.parse(req, (err, fields, files) => { - if (err) { - log.debug('parseReqFile:', err); - reject(new AppError.AppError("upload error")); - } else { - log.debug('parseReqFile fields:', fields); - log.debug('parseReqFile file location:', _.get(files,'package.path')); - if (_.isEmpty(fields.packageInfo) || _.isEmpty(_.get(files,'package'))) { - log.debug('parseReqFile upload info lack'); - reject(new AppError.AppError("upload info lack")); - } else { - log.debug('parseReqFile is ok'); - resolve({packageInfo: JSON.parse(fields.packageInfo), package: files.package}); - } - } + log.debug('parseReqFile'); + return new Promise((resolve, reject) => { + var form = new formidable.IncomingForm(); + form.maxFieldsSize = 200 * 1024 * 1024; + form.parse(req, (err, fields, files) => { + if (err) { + log.debug('parseReqFile:', err); + reject(new AppError.AppError('upload error')); + } else { + log.debug('parseReqFile fields:', fields); + log.debug('parseReqFile file location:', _.get(files, 'package.path')); + if (_.isEmpty(fields.packageInfo) || _.isEmpty(_.get(files, 'package'))) { + log.debug('parseReqFile upload info lack'); + reject(new AppError.AppError('upload info lack')); + } else { + log.debug('parseReqFile is ok'); + resolve({ + packageInfo: JSON.parse(fields.packageInfo), + package: files.package, + }); + } + } + }); }); - }); }; -proto.createDeploymentsVersionIfNotExist = function (deploymentId, appVersion, minVersion, maxVersion, t) { - return models.DeploymentsVersions.findOrCreate({ - where: {deployment_id: deploymentId, app_version: appVersion, min_version:minVersion, max_version:maxVersion}, - defaults: {current_package_id: 0}, - transaction: t - }) - .spread((data, created)=>{ - if (created) { - log.debug(`createDeploymentsVersionIfNotExist findOrCreate version ${appVersion}`); - } - log.debug(`createDeploymentsVersionIfNotExist version data:`, data.get()); - return data; - }); +proto.createDeploymentsVersionIfNotExist = function ( + deploymentId, + appVersion, + minVersion, + maxVersion, + t, +) { + return models.DeploymentsVersions.findOrCreate({ + where: { + deployment_id: deploymentId, + app_version: appVersion, + min_version: minVersion, + max_version: maxVersion, + }, + defaults: { current_package_id: 0 }, + transaction: t, + }).spread((data, created) => { + if (created) { + log.debug(`createDeploymentsVersionIfNotExist findOrCreate version ${appVersion}`); + } + log.debug(`createDeploymentsVersionIfNotExist version data:`, data.get()); + return data; + }); }; proto.isMatchPackageHash = function (packageId, packageHash) { - if (_.lt(packageId, 0)) { - log.debug(`isMatchPackageHash packageId is 0`); - return Promise.resolve(false); - } - return models.Packages.findById(packageId) - .then((data) => { - if (data && _.eq(data.get('package_hash'), packageHash)){ - log.debug(`isMatchPackageHash data:`, data.get()); - log.debug(`isMatchPackageHash packageHash exist`); - return true; - }else { - log.debug(`isMatchPackageHash package is null`); - return false; + if (_.lt(packageId, 0)) { + log.debug(`isMatchPackageHash packageId is 0`); + return Promise.resolve(false); } - }); + return models.Packages.findById(packageId).then((data) => { + if (data && _.eq(data.get('package_hash'), packageHash)) { + log.debug(`isMatchPackageHash data:`, data.get()); + log.debug(`isMatchPackageHash packageHash exist`); + return true; + } else { + log.debug(`isMatchPackageHash package is null`); + return false; + } + }); }; -proto.createPackage = function (deploymentId, appVersion, packageHash, manifestHash, blobHash, params) { - var releaseMethod = params.releaseMethod || constConfig.RELEAS_EMETHOD_UPLOAD; - var releaseUid = params.releaseUid || 0; - var isMandatory = params.isMandatory || 0; - var size = params.size || 0; - var rollout = params.rollout || 100; - var description = params.description || ""; - var originalLabel = params.originalLabel || ""; - var isDisabled = params.isDisabled || 0; - var originalDeployment = params.originalDeployment || ""; - var self = this; - return models.Deployments.generateLabelId(deploymentId) - .then((labelId) => { - return models.sequelize.transaction((t) => { - return self.createDeploymentsVersionIfNotExist(deploymentId, appVersion, params.min_version, params.max_version, t) - .then((deploymentsVersions) => { - return models.Packages.create({ - deployment_version_id: deploymentsVersions.id, - deployment_id: deploymentId, - description: description, - package_hash: packageHash, - blob_url: blobHash, - size: size, - manifest_blob_url: manifestHash, - release_method: releaseMethod, - label: "v" + labelId, - released_by: releaseUid, - is_mandatory: isMandatory, - is_disabled: isDisabled, - rollout: rollout, - original_label: originalLabel, - original_deployment: originalDeployment - },{transaction: t}) - .then((packages) => { - deploymentsVersions.set('current_package_id', packages.id); - return Promise.all([ - deploymentsVersions.save({transaction: t}), - models.Deployments.update( - {last_deployment_version_id: deploymentsVersions.id}, - {where: {id: deploymentId}, transaction: t} - ), - models.PackagesMetrics.create( - {package_id: packages.id}, - {transaction: t} - ), - models.DeploymentsHistory.create( - {deployment_id: deploymentId,package_id: packages.id}, - {transaction: t} - ) - ]) - .then(() => packages); +proto.createPackage = function ( + deploymentId, + appVersion, + packageHash, + manifestHash, + blobHash, + params, +) { + var releaseMethod = params.releaseMethod || constConfig.RELEAS_EMETHOD_UPLOAD; + var releaseUid = params.releaseUid || 0; + var isMandatory = params.isMandatory || 0; + var size = params.size || 0; + var rollout = params.rollout || 100; + var description = params.description || ''; + var originalLabel = params.originalLabel || ''; + var isDisabled = params.isDisabled || 0; + var originalDeployment = params.originalDeployment || ''; + var self = this; + return models.Deployments.generateLabelId(deploymentId).then((labelId) => { + return models.sequelize.transaction((t) => { + return self + .createDeploymentsVersionIfNotExist( + deploymentId, + appVersion, + params.min_version, + params.max_version, + t, + ) + .then((deploymentsVersions) => { + return models.Packages.create( + { + deployment_version_id: deploymentsVersions.id, + deployment_id: deploymentId, + description: description, + package_hash: packageHash, + blob_url: blobHash, + size: size, + manifest_blob_url: manifestHash, + release_method: releaseMethod, + label: 'v' + labelId, + released_by: releaseUid, + is_mandatory: isMandatory, + is_disabled: isDisabled, + rollout: rollout, + original_label: originalLabel, + original_deployment: originalDeployment, + }, + { transaction: t }, + ).then((packages) => { + deploymentsVersions.set('current_package_id', packages.id); + return Promise.all([ + deploymentsVersions.save({ transaction: t }), + models.Deployments.update( + { last_deployment_version_id: deploymentsVersions.id }, + { where: { id: deploymentId }, transaction: t }, + ), + models.PackagesMetrics.create( + { package_id: packages.id }, + { transaction: t }, + ), + models.DeploymentsHistory.create( + { deployment_id: deploymentId, package_id: packages.id }, + { transaction: t }, + ), + ]).then(() => packages); + }); + }); }); - }); }); - }); }; proto.downloadPackageAndExtract = function (workDirectoryPath, packageHash, blobHash) { - var dataCenterManager = require('./datacenter-manager')(); - return dataCenterManager.validateStore(packageHash) - .then((isValidate) => { - if (isValidate) { - return dataCenterManager.getPackageInfo(packageHash); - } else { - var downloadURL = common.getBlobDownloadUrl(blobHash); - return common.createFileFromRequest(downloadURL, path.join(workDirectoryPath, blobHash)) - .then((download) => { - return common.unzipFile(path.join(workDirectoryPath, blobHash), path.join(workDirectoryPath, 'current')) - .then((outputPath) => { - return dataCenterManager.storePackage(outputPath, true); - }); - }); - } - }); -} + var dataCenterManager = require('./datacenter-manager')(); + return dataCenterManager.validateStore(packageHash).then((isValidate) => { + if (isValidate) { + return dataCenterManager.getPackageInfo(packageHash); + } else { + var downloadURL = common.getBlobDownloadUrl(blobHash); + return common + .createFileFromRequest(downloadURL, path.join(workDirectoryPath, blobHash)) + .then((download) => { + return common + .unzipFile( + path.join(workDirectoryPath, blobHash), + path.join(workDirectoryPath, 'current'), + ) + .then((outputPath) => { + return dataCenterManager.storePackage(outputPath, true); + }); + }); + } + }); +}; proto.zipDiffPackage = function (fileName, files, baseDirectoryPath, hotCodePushFile) { - return new Promise((resolve, reject) => { - var zipFile = new yazl.ZipFile(); - var writeStream = fs.createWriteStream(fileName); - writeStream.on('error', (error) => { - reject(error); - }) - zipFile.outputStream.pipe(writeStream) - .on("error", (error) => { - reject(error); - }) - .on("close", () => { - resolve({ isTemporary: true, path: fileName }); + return new Promise((resolve, reject) => { + var zipFile = new yazl.ZipFile(); + var writeStream = fs.createWriteStream(fileName); + writeStream.on('error', (error) => { + reject(error); + }); + zipFile.outputStream + .pipe(writeStream) + .on('error', (error) => { + reject(error); + }) + .on('close', () => { + resolve({ isTemporary: true, path: fileName }); + }); + for (var i = 0; i < files.length; ++i) { + var file = files[i]; + zipFile.addFile(path.join(baseDirectoryPath, file), slash(file)); + } + zipFile.addFile(hotCodePushFile, constConfig.DIFF_MANIFEST_FILE_NAME); + zipFile.end(); }); - for (var i = 0; i < files.length; ++i) { - var file = files[i]; - zipFile.addFile(path.join(baseDirectoryPath, file), slash(file)); - } - zipFile.addFile(hotCodePushFile, constConfig.DIFF_MANIFEST_FILE_NAME); - zipFile.end(); - }); -} +}; proto.generateOneDiffPackage = function ( - workDirectoryPath, - packageId, - originDataCenter, - oldPackageDataCenter, - diffPackageHash, - diffManifestBlobHash, - isUseDiffText + workDirectoryPath, + packageId, + originDataCenter, + oldPackageDataCenter, + diffPackageHash, + diffManifestBlobHash, + isUseDiffText, ) { - var self = this; - return models.PackagesDiff.findOne({ - where:{ - package_id: packageId, - diff_against_package_hash: diffPackageHash - } - }) - .then((diffPackage) => { - if (!_.isEmpty(diffPackage)) { - return; - } - log.debug('originDataCenter', originDataCenter); - log.debug('oldPackageDataCenter', oldPackageDataCenter); - var downloadURL = common.getBlobDownloadUrl(diffManifestBlobHash); - return common.createFileFromRequest(downloadURL, path.join(workDirectoryPath,diffManifestBlobHash)) - .then(() => { - var dataCenterContentPath = path.join(workDirectoryPath, 'dataCenter'); - common.copySync(originDataCenter.contentPath, dataCenterContentPath); - var oldPackageDataCenterContentPath = oldPackageDataCenter.contentPath; - var originManifestJson = JSON.parse(fs.readFileSync(originDataCenter.manifestFilePath, "utf8")) - var diffManifestJson = JSON.parse(fs.readFileSync(path.join(workDirectoryPath, diffManifestBlobHash), "utf8")) - var json = common.diffCollectionsSync(originManifestJson, diffManifestJson); - var files = _.concat(json.diff, json.collection1Only); - var hotcodepush = {deletedFiles: json.collection2Only, patchedFiles:[]}; - if (isUseDiffText == constConfig.IS_USE_DIFF_TEXT_YES) { - //使用google diff-match-patch - _.forEach(json.diff, function(tmpFilePath) { - var dataCenterContentPathTmpFilePath = path.join(dataCenterContentPath, tmpFilePath); - var oldPackageDataCenterContentPathTmpFilePath = path.join(oldPackageDataCenterContentPath, tmpFilePath); - if ( - fs.existsSync(dataCenterContentPathTmpFilePath) - && fs.existsSync(oldPackageDataCenterContentPathTmpFilePath) - && common.detectIsTextFile(dataCenterContentPathTmpFilePath) - && common.detectIsTextFile(oldPackageDataCenterContentPathTmpFilePath) - ) { - var textOld = fs.readFileSync(oldPackageDataCenterContentPathTmpFilePath, 'utf-8'); - var textNew = fs.readFileSync(dataCenterContentPathTmpFilePath, 'utf-8'); - if (!textOld || !textNew) { - return; - } - var DiffMatchPatch = require('diff-match-patch'); - var dmp = new DiffMatchPatch(); - var patchs = dmp.patch_make(textOld, textNew); - var patchText = dmp.patch_toText(patchs); - if (patchText && patchText.length < _.parseInt(textNew.length * 0.8)) { - fs.writeFileSync(dataCenterContentPathTmpFilePath, patchText); - hotcodepush.patchedFiles.push(tmpFilePath); - } - } - }); - } - var hotCodePushFile = path.join(workDirectoryPath,`${diffManifestBlobHash}_hotcodepush`);; - fs.writeFileSync(hotCodePushFile, JSON.stringify(hotcodepush)); - var fileName = path.join(workDirectoryPath,`${diffManifestBlobHash}.zip`);; - return self.zipDiffPackage(fileName, files, dataCenterContentPath, hotCodePushFile) - .then((data) => { - return security.qetag(data.path) - .then((diffHash) => { - return common.uploadFileToStorage(diffHash, fileName) - .then(() => { - var stats = fs.statSync(fileName); - return models.PackagesDiff.create({ - package_id: packageId, - diff_against_package_hash: diffPackageHash, - diff_blob_url: diffHash, - diff_size: stats.size + var self = this; + return models.PackagesDiff.findOne({ + where: { + package_id: packageId, + diff_against_package_hash: diffPackageHash, + }, + }).then((diffPackage) => { + if (!_.isEmpty(diffPackage)) { + return; + } + log.debug('originDataCenter', originDataCenter); + log.debug('oldPackageDataCenter', oldPackageDataCenter); + var downloadURL = common.getBlobDownloadUrl(diffManifestBlobHash); + return common + .createFileFromRequest(downloadURL, path.join(workDirectoryPath, diffManifestBlobHash)) + .then(() => { + var dataCenterContentPath = path.join(workDirectoryPath, 'dataCenter'); + common.copySync(originDataCenter.contentPath, dataCenterContentPath); + var oldPackageDataCenterContentPath = oldPackageDataCenter.contentPath; + var originManifestJson = JSON.parse( + fs.readFileSync(originDataCenter.manifestFilePath, 'utf8'), + ); + var diffManifestJson = JSON.parse( + fs.readFileSync(path.join(workDirectoryPath, diffManifestBlobHash), 'utf8'), + ); + var json = common.diffCollectionsSync(originManifestJson, diffManifestJson); + var files = _.concat(json.diff, json.collection1Only); + var hotcodepush = { deletedFiles: json.collection2Only, patchedFiles: [] }; + if (isUseDiffText == constConfig.IS_USE_DIFF_TEXT_YES) { + //使用google diff-match-patch + _.forEach(json.diff, function (tmpFilePath) { + var dataCenterContentPathTmpFilePath = path.join( + dataCenterContentPath, + tmpFilePath, + ); + var oldPackageDataCenterContentPathTmpFilePath = path.join( + oldPackageDataCenterContentPath, + tmpFilePath, + ); + if ( + fs.existsSync(dataCenterContentPathTmpFilePath) && + fs.existsSync(oldPackageDataCenterContentPathTmpFilePath) && + common.detectIsTextFile(dataCenterContentPathTmpFilePath) && + common.detectIsTextFile(oldPackageDataCenterContentPathTmpFilePath) + ) { + var textOld = fs.readFileSync( + oldPackageDataCenterContentPathTmpFilePath, + 'utf-8', + ); + var textNew = fs.readFileSync( + dataCenterContentPathTmpFilePath, + 'utf-8', + ); + if (!textOld || !textNew) { + return; + } + var DiffMatchPatch = require('diff-match-patch'); + var dmp = new DiffMatchPatch(); + var patchs = dmp.patch_make(textOld, textNew); + var patchText = dmp.patch_toText(patchs); + if (patchText && patchText.length < _.parseInt(textNew.length * 0.8)) { + fs.writeFileSync(dataCenterContentPathTmpFilePath, patchText); + hotcodepush.patchedFiles.push(tmpFilePath); + } + } + }); + } + var hotCodePushFile = path.join( + workDirectoryPath, + `${diffManifestBlobHash}_hotcodepush`, + ); + fs.writeFileSync(hotCodePushFile, JSON.stringify(hotcodepush)); + var fileName = path.join(workDirectoryPath, `${diffManifestBlobHash}.zip`); + return self + .zipDiffPackage(fileName, files, dataCenterContentPath, hotCodePushFile) + .then((data) => { + return security.qetag(data.path).then((diffHash) => { + return common.uploadFileToStorage(diffHash, fileName).then(() => { + var stats = fs.statSync(fileName); + return models.PackagesDiff.create({ + package_id: packageId, + diff_against_package_hash: diffPackageHash, + diff_blob_url: diffHash, + diff_size: stats.size, + }); + }); + }); + }); }); - }) - }); - }); }); - }); }; proto.createDiffPackagesByLastNums = function (appId, originalPackage, num) { - var self = this; - var Sequelize = require('sequelize'); - var packageId = originalPackage.id; - return Promise.all([ - models.Packages.findAll({ - where:{ - deployment_version_id: originalPackage.deployment_version_id, - id: {[Sequelize.Op.lt]: packageId}}, - order: [['id','desc']], - limit: num - }), - models.Packages.findAll({ - where:{ - deployment_version_id: originalPackage.deployment_version_id, - id: {[Sequelize.Op.lt]: packageId}}, - order: [['id','asc']], - limit: 2 - }), - models.Apps.findById(appId), - ]) - .spread((lastNumsPackages, basePackages, appInfo) => { - return [_.uniqBy(_.unionBy(lastNumsPackages, basePackages, 'id'), 'package_hash'), appInfo]; - }) - .spread((lastNumsPackages, appInfo) => { - return self.createDiffPackages(originalPackage, lastNumsPackages, _.get(appInfo, 'is_use_diff_text', constConfig.IS_USE_DIFF_TEXT_NO)); - }); + var self = this; + var Sequelize = require('sequelize'); + var packageId = originalPackage.id; + return Promise.all([ + models.Packages.findAll({ + where: { + deployment_version_id: originalPackage.deployment_version_id, + id: { [Sequelize.Op.lt]: packageId }, + }, + order: [['id', 'desc']], + limit: num, + }), + models.Packages.findAll({ + where: { + deployment_version_id: originalPackage.deployment_version_id, + id: { [Sequelize.Op.lt]: packageId }, + }, + order: [['id', 'asc']], + limit: 2, + }), + models.Apps.findById(appId), + ]) + .spread((lastNumsPackages, basePackages, appInfo) => { + return [ + _.uniqBy(_.unionBy(lastNumsPackages, basePackages, 'id'), 'package_hash'), + appInfo, + ]; + }) + .spread((lastNumsPackages, appInfo) => { + return self.createDiffPackages( + originalPackage, + lastNumsPackages, + _.get(appInfo, 'is_use_diff_text', constConfig.IS_USE_DIFF_TEXT_NO), + ); + }); }; proto.createDiffPackages = function (originalPackage, destPackages, isUseDiffText) { - if (!_.isArray(destPackages)) { - return Promise.reject(new AppError.AppError('第二个参数必须是数组')); - } - if (destPackages.length <= 0) { - return null; - } - var self = this; - var package_hash = _.get(originalPackage, 'package_hash'); - var manifest_blob_url = _.get(originalPackage, 'manifest_blob_url'); - var blob_url = _.get(originalPackage, 'blob_url'); - var workDirectoryPath = path.join(os.tmpdir(), 'codepush_' + security.randToken(32)); - log.debug('workDirectoryPath', workDirectoryPath); - return common.createEmptyFolder(workDirectoryPath) - .then(() => self.downloadPackageAndExtract(workDirectoryPath, package_hash, blob_url)) - .then((originDataCenter) => Promise.map(destPackages, - (v) => { - var diffWorkDirectoryPath = path.join(workDirectoryPath, _.get(v, 'package_hash')); - common.createEmptyFolderSync(diffWorkDirectoryPath); - return self.downloadPackageAndExtract(diffWorkDirectoryPath, _.get(v, 'package_hash'), _.get(v, 'blob_url')) - .then((oldPackageDataCenter) => - self.generateOneDiffPackage( - diffWorkDirectoryPath, - originalPackage.id, - originDataCenter, - oldPackageDataCenter, - v.package_hash, - v.manifest_blob_url, - isUseDiffText - ) - ) + if (!_.isArray(destPackages)) { + return Promise.reject(new AppError.AppError('第二个参数必须是数组')); } - )) - .finally(() => common.deleteFolderSync(workDirectoryPath)); -} + if (destPackages.length <= 0) { + return null; + } + var self = this; + var package_hash = _.get(originalPackage, 'package_hash'); + var manifest_blob_url = _.get(originalPackage, 'manifest_blob_url'); + var blob_url = _.get(originalPackage, 'blob_url'); + var workDirectoryPath = path.join(os.tmpdir(), 'codepush_' + security.randToken(32)); + log.debug('workDirectoryPath', workDirectoryPath); + return common + .createEmptyFolder(workDirectoryPath) + .then(() => self.downloadPackageAndExtract(workDirectoryPath, package_hash, blob_url)) + .then((originDataCenter) => + Promise.map(destPackages, (v) => { + var diffWorkDirectoryPath = path.join(workDirectoryPath, _.get(v, 'package_hash')); + common.createEmptyFolderSync(diffWorkDirectoryPath); + return self + .downloadPackageAndExtract( + diffWorkDirectoryPath, + _.get(v, 'package_hash'), + _.get(v, 'blob_url'), + ) + .then((oldPackageDataCenter) => + self.generateOneDiffPackage( + diffWorkDirectoryPath, + originalPackage.id, + originDataCenter, + oldPackageDataCenter, + v.package_hash, + v.manifest_blob_url, + isUseDiffText, + ), + ); + }), + ) + .finally(() => common.deleteFolderSync(workDirectoryPath)); +}; proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, releaseUid) { - var self = this; - var appVersion = packageInfo.appVersion; - var versionInfo = common.validatorVersion(appVersion); - if (!versionInfo[0]) { - log.debug(`releasePackage targetBinaryVersion ${appVersion} not support.`); - return Promise.reject(new AppError.AppError(`targetBinaryVersion ${appVersion} not support.`)) - } - var description = packageInfo.description; //描述 - var isDisabled = packageInfo.isDisabled; //是否立刻下载 - var rollout = packageInfo.rollout; //灰度百分比 - var isMandatory = packageInfo.isMandatory; //是否强制更新,无法跳过 - var tmpDir = os.tmpdir(); - var directoryPathParent = path.join(tmpDir, 'codepuh_' + security.randToken(32)); - var directoryPath = path.join(directoryPathParent, 'current'); - log.debug(`releasePackage generate an random dir path: ${directoryPath}`); - return Promise.all([ - security.qetag(filePath), - common.createEmptyFolder(directoryPath) - .then(() => { - return common.unzipFile(filePath, directoryPath) - }) - ]) - .spread((blobHash) => { - return security.uploadPackageType(directoryPath) - .then((type) => { - return models.Apps.findById(appId).then((appInfo)=>{ - if (type > 0 && appInfo.os > 0 && appInfo.os != type) { - var e = new AppError.AppError("it must be publish it by ios type"); - log.debug(e); - throw e; - } else { - //不验证 - log.debug(`Unknown package type:`, type, ',db os:', appInfo.os); - } - return blobHash; - }); - }); - }) - .then((blobHash) => { - var dataCenterManager = require('./datacenter-manager')(); - return dataCenterManager.storePackage(directoryPath) - .then((dataCenter) => { - var packageHash = dataCenter.packageHash; - var manifestFile = dataCenter.manifestFilePath; - return models.DeploymentsVersions.findOne({where: {deployment_id: deploymentId, app_version:appVersion}}) - .then((deploymentsVersions) => { - if (!deploymentsVersions) { - return false; - } - return self.isMatchPackageHash(deploymentsVersions.get('current_package_id'), packageHash); - }) - .then((isExist) => { - if (isExist){ - var e = new AppError.AppError("The uploaded package is identical to the contents of the specified deployment's current release."); - log.debug(e.message); - throw e; - } - return security.qetag(manifestFile); - }) - .then((manifestHash) => { - return Promise.all([ - common.uploadFileToStorage(manifestHash, manifestFile), - common.uploadFileToStorage(blobHash, filePath) - ]) - .then(() => [packageHash, manifestHash, blobHash]); - }) - }); - }) - .spread((packageHash, manifestHash, blobHash) => { - var stats = fs.statSync(filePath); - var params = { - releaseMethod: constConfig.RELEAS_EMETHOD_UPLOAD, - releaseUid: releaseUid, - isMandatory: isMandatory ? constConfig.IS_MANDATORY_YES : constConfig.IS_MANDATORY_NO, - isDisabled: isDisabled ? constConfig.IS_DISABLED_YES : constConfig.IS_DISABLED_NO, - rollout: rollout, - size: stats.size, - description: description, - min_version: versionInfo[1], - max_version: versionInfo[2], + var self = this; + var appVersion = packageInfo.appVersion; + var versionInfo = common.validatorVersion(appVersion); + if (!versionInfo[0]) { + log.debug(`releasePackage targetBinaryVersion ${appVersion} not support.`); + return Promise.reject( + new AppError.AppError(`targetBinaryVersion ${appVersion} not support.`), + ); } - return self.createPackage(deploymentId, appVersion, packageHash, manifestHash, blobHash, params); - }) - .finally(() => common.deleteFolderSync(directoryPathParent)) + var description = packageInfo.description; //描述 + var isDisabled = packageInfo.isDisabled; //是否立刻下载 + var rollout = packageInfo.rollout; //灰度百分比 + var isMandatory = packageInfo.isMandatory; //是否强制更新,无法跳过 + var tmpDir = os.tmpdir(); + var directoryPathParent = path.join(tmpDir, 'codepuh_' + security.randToken(32)); + var directoryPath = path.join(directoryPathParent, 'current'); + log.debug(`releasePackage generate an random dir path: ${directoryPath}`); + return Promise.all([ + security.qetag(filePath), + common.createEmptyFolder(directoryPath).then(() => { + return common.unzipFile(filePath, directoryPath); + }), + ]) + .spread((blobHash) => { + return security.uploadPackageType(directoryPath).then((type) => { + return models.Apps.findById(appId).then((appInfo) => { + if (type > 0 && appInfo.os > 0 && appInfo.os != type) { + var e = new AppError.AppError('it must be publish it by ios type'); + log.debug(e); + throw e; + } else { + //不验证 + log.debug(`Unknown package type:`, type, ',db os:', appInfo.os); + } + return blobHash; + }); + }); + }) + .then((blobHash) => { + var dataCenterManager = require('./datacenter-manager')(); + return dataCenterManager.storePackage(directoryPath).then((dataCenter) => { + var packageHash = dataCenter.packageHash; + var manifestFile = dataCenter.manifestFilePath; + return models.DeploymentsVersions.findOne({ + where: { deployment_id: deploymentId, app_version: appVersion }, + }) + .then((deploymentsVersions) => { + if (!deploymentsVersions) { + return false; + } + return self.isMatchPackageHash( + deploymentsVersions.get('current_package_id'), + packageHash, + ); + }) + .then((isExist) => { + if (isExist) { + var e = new AppError.AppError( + "The uploaded package is identical to the contents of the specified deployment's current release.", + ); + log.debug(e.message); + throw e; + } + return security.qetag(manifestFile); + }) + .then((manifestHash) => { + return Promise.all([ + common.uploadFileToStorage(manifestHash, manifestFile), + common.uploadFileToStorage(blobHash, filePath), + ]).then(() => [packageHash, manifestHash, blobHash]); + }); + }); + }) + .spread((packageHash, manifestHash, blobHash) => { + var stats = fs.statSync(filePath); + var params = { + releaseMethod: constConfig.RELEAS_EMETHOD_UPLOAD, + releaseUid: releaseUid, + isMandatory: isMandatory + ? constConfig.IS_MANDATORY_YES + : constConfig.IS_MANDATORY_NO, + isDisabled: isDisabled ? constConfig.IS_DISABLED_YES : constConfig.IS_DISABLED_NO, + rollout: rollout, + size: stats.size, + description: description, + min_version: versionInfo[1], + max_version: versionInfo[2], + }; + return self.createPackage( + deploymentId, + appVersion, + packageHash, + manifestHash, + blobHash, + params, + ); + }) + .finally(() => common.deleteFolderSync(directoryPathParent)); }; -proto.modifyReleasePackage = function(packageId, params) { - var appVersion = _.get(params, 'appVersion'); - var description = _.get(params, 'description'); - var isMandatory = _.get(params, 'isMandatory'); - var isDisabled = _.get(params, 'isDisabled'); - var rollout = _.get(params, 'rollout'); - return models.Packages.findById(packageId) - .then((packageInfo) => { - if (!packageInfo) { - throw new AppError.AppError(`packageInfo not found`); - } - if (!_.isNull(appVersion)) { - var versionInfo = common.validatorVersion(appVersion); - if (!versionInfo[0]) { - throw new AppError.AppError(`--targetBinaryVersion ${appVersion} not support.`); - } - return Promise.all([ - models.DeploymentsVersions.findOne({where: {deployment_id:packageInfo.deployment_id, app_version:appVersion}}), - models.DeploymentsVersions.findById(packageInfo.deployment_version_id) - ]) - .spread((v1, v2) => { - if (v1 && !_.eq(v1.id, v2.id)) { - log.debug(v1); - throw new AppError.AppError(`${appVersion} already exist.`); - } - if (!v2) { - throw new AppError.AppError(`packages not found.`); - } - return models.DeploymentsVersions.update({ - app_version:appVersion, - min_version:versionInfo[1], - max_version:versionInfo[2] - },{where: {id:v2.id}}); - }) - .then(()=>{ - return packageInfo - }); - } - return packageInfo; - }) - .then((packageInfo) => { - var new_params = { - description: description || packageInfo.description, - }; - if (_.isInteger(rollout)) { - new_params.rollout = rollout; - } - if (_.isBoolean(isMandatory)) { - new_params.is_mandatory = isMandatory ? constConfig.IS_MANDATORY_YES : constConfig.IS_MANDATORY_NO; - } - if (_.isBoolean(isDisabled)) { - new_params.is_disabled = isDisabled ? constConfig.IS_DISABLED_YES : constConfig.IS_DISABLED_NO; - } - return models.Packages.update(new_params,{where: {id: packageId}}); - }); +proto.modifyReleasePackage = function (packageId, params) { + var appVersion = _.get(params, 'appVersion'); + var description = _.get(params, 'description'); + var isMandatory = _.get(params, 'isMandatory'); + var isDisabled = _.get(params, 'isDisabled'); + var rollout = _.get(params, 'rollout'); + return models.Packages.findById(packageId) + .then((packageInfo) => { + if (!packageInfo) { + throw new AppError.AppError(`packageInfo not found`); + } + if (!_.isNull(appVersion)) { + var versionInfo = common.validatorVersion(appVersion); + if (!versionInfo[0]) { + throw new AppError.AppError(`--targetBinaryVersion ${appVersion} not support.`); + } + return Promise.all([ + models.DeploymentsVersions.findOne({ + where: { + deployment_id: packageInfo.deployment_id, + app_version: appVersion, + }, + }), + models.DeploymentsVersions.findById(packageInfo.deployment_version_id), + ]) + .spread((v1, v2) => { + if (v1 && !_.eq(v1.id, v2.id)) { + log.debug(v1); + throw new AppError.AppError(`${appVersion} already exist.`); + } + if (!v2) { + throw new AppError.AppError(`packages not found.`); + } + return models.DeploymentsVersions.update( + { + app_version: appVersion, + min_version: versionInfo[1], + max_version: versionInfo[2], + }, + { where: { id: v2.id } }, + ); + }) + .then(() => { + return packageInfo; + }); + } + return packageInfo; + }) + .then((packageInfo) => { + var new_params = { + description: description || packageInfo.description, + }; + if (_.isInteger(rollout)) { + new_params.rollout = rollout; + } + if (_.isBoolean(isMandatory)) { + new_params.is_mandatory = isMandatory + ? constConfig.IS_MANDATORY_YES + : constConfig.IS_MANDATORY_NO; + } + if (_.isBoolean(isDisabled)) { + new_params.is_disabled = isDisabled + ? constConfig.IS_DISABLED_YES + : constConfig.IS_DISABLED_NO; + } + return models.Packages.update(new_params, { where: { id: packageId } }); + }); }; proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, params) { - var self = this; - var appVersion = _.get(params,'appVersion', null); - var label = _.get(params,'label', null); - return new Promise((resolve, reject) => { - if (label) { - return models.Packages.findOne({where: {deployment_id: sourceDeploymentInfo.id, label:label}}) - .then((sourcePack)=>{ - if (!sourcePack) { - throw new AppError.AppError('label does not exist.'); - } - return models.DeploymentsVersions.findById(sourcePack.deployment_version_id) - .then((deploymentsVersions)=>{ - if (!deploymentsVersions) { - throw new AppError.AppError('deploymentsVersions does not exist.'); - } - resolve([sourcePack, deploymentsVersions]); - }); - }) - .catch((e) => { - reject(e); - }); - } else { - var lastDeploymentVersionId = _.get(sourceDeploymentInfo, 'last_deployment_version_id', 0); - if (_.lte(lastDeploymentVersionId, 0)) { - throw new AppError.AppError(`does not exist last_deployment_version_id.`); - } - return models.DeploymentsVersions.findById(lastDeploymentVersionId) - .then((deploymentsVersions)=>{ - var sourcePackId = _.get(deploymentsVersions, 'current_package_id', 0); - if (_.lte(sourcePackId, 0)) { - throw new AppError.AppError(`packageInfo not found.`); + var self = this; + var appVersion = _.get(params, 'appVersion', null); + var label = _.get(params, 'label', null); + return new Promise((resolve, reject) => { + if (label) { + return models.Packages.findOne({ + where: { deployment_id: sourceDeploymentInfo.id, label: label }, + }) + .then((sourcePack) => { + if (!sourcePack) { + throw new AppError.AppError('label does not exist.'); + } + return models.DeploymentsVersions.findById( + sourcePack.deployment_version_id, + ).then((deploymentsVersions) => { + if (!deploymentsVersions) { + throw new AppError.AppError('deploymentsVersions does not exist.'); + } + resolve([sourcePack, deploymentsVersions]); + }); + }) + .catch((e) => { + reject(e); + }); + } else { + var lastDeploymentVersionId = _.get( + sourceDeploymentInfo, + 'last_deployment_version_id', + 0, + ); + if (_.lte(lastDeploymentVersionId, 0)) { + throw new AppError.AppError(`does not exist last_deployment_version_id.`); + } + return models.DeploymentsVersions.findById(lastDeploymentVersionId) + .then((deploymentsVersions) => { + var sourcePackId = _.get(deploymentsVersions, 'current_package_id', 0); + if (_.lte(sourcePackId, 0)) { + throw new AppError.AppError(`packageInfo not found.`); + } + return models.Packages.findById(sourcePackId).then((sourcePack) => { + if (!sourcePack) { + throw new AppError.AppError(`packageInfo not found.`); + } + resolve([sourcePack, deploymentsVersions]); + }); + }) + .catch((e) => { + reject(e); + }); } - return models.Packages.findById(sourcePackId) - .then((sourcePack) =>{ - if (!sourcePack) { - throw new AppError.AppError(`packageInfo not found.`); - } - resolve([sourcePack, deploymentsVersions]); - }); - }) - .catch((e) => { - reject(e); - }); - } - }) - .spread((sourcePack, deploymentsVersions)=>{ - var appFinalVersion = appVersion || deploymentsVersions.app_version; - log.debug('sourcePack',sourcePack); - log.debug('deploymentsVersions',deploymentsVersions); - log.debug('appFinalVersion', appFinalVersion); - return models.DeploymentsVersions.findOne({where: { - deployment_id:destDeploymentInfo.id, - app_version: appFinalVersion, - }}) - .then((destDeploymentsVersions)=>{ - if (!destDeploymentsVersions) { - return false; - } - return self.isMatchPackageHash(destDeploymentsVersions.get('current_package_id'), sourcePack.package_hash); }) - .then((isExist) => { - if (isExist){ - throw new AppError.AppError("The uploaded package is identical to the contents of the specified deployment's current release."); - } - return [sourcePack, deploymentsVersions, appFinalVersion]; - }); - }) - .spread((sourcePack, deploymentsVersions, appFinalVersion) => { - var versionInfo = common.validatorVersion(appFinalVersion); - if (!versionInfo[0]) { - log.debug(`targetBinaryVersion ${appVersion} not support.`); - throw new AppError.AppError(`targetBinaryVersion ${appVersion} not support.`); - } - var create_params = { - releaseMethod: constConfig.RELEAS_EMETHOD_PROMOTE, - releaseUid: params.promoteUid || 0, - rollout: params.rollout || 100, - size: sourcePack.size, - description: params.description || sourcePack.description, - originalLabel: sourcePack.label, - originalDeployment: sourceDeploymentInfo.name, - min_version: versionInfo[1], - max_version: versionInfo[2], - }; - if (_.isBoolean(params.isMandatory)) { - create_params.isMandatory = params.isMandatory ? constConfig.IS_MANDATORY_YES : constConfig.IS_MANDATORY_NO; - } else { - create_params.isMandatory = sourcePack.is_mandatory - } - if (_.isBoolean(params.isDisabled)) { - create_params.isDisabled = params.isDisabled ? constConfig.IS_DISABLED_YES : constConfig.IS_DISABLED_NO; - } else { - create_params.isDisabled = sourcePack.is_disabled - } - return self.createPackage( - destDeploymentInfo.id, - appFinalVersion, - sourcePack.package_hash, - sourcePack.manifest_blob_url, - sourcePack.blob_url, - create_params - ); - }); + .spread((sourcePack, deploymentsVersions) => { + var appFinalVersion = appVersion || deploymentsVersions.app_version; + log.debug('sourcePack', sourcePack); + log.debug('deploymentsVersions', deploymentsVersions); + log.debug('appFinalVersion', appFinalVersion); + return models.DeploymentsVersions.findOne({ + where: { + deployment_id: destDeploymentInfo.id, + app_version: appFinalVersion, + }, + }) + .then((destDeploymentsVersions) => { + if (!destDeploymentsVersions) { + return false; + } + return self.isMatchPackageHash( + destDeploymentsVersions.get('current_package_id'), + sourcePack.package_hash, + ); + }) + .then((isExist) => { + if (isExist) { + throw new AppError.AppError( + "The uploaded package is identical to the contents of the specified deployment's current release.", + ); + } + return [sourcePack, deploymentsVersions, appFinalVersion]; + }); + }) + .spread((sourcePack, deploymentsVersions, appFinalVersion) => { + var versionInfo = common.validatorVersion(appFinalVersion); + if (!versionInfo[0]) { + log.debug(`targetBinaryVersion ${appVersion} not support.`); + throw new AppError.AppError(`targetBinaryVersion ${appVersion} not support.`); + } + var create_params = { + releaseMethod: constConfig.RELEAS_EMETHOD_PROMOTE, + releaseUid: params.promoteUid || 0, + rollout: params.rollout || 100, + size: sourcePack.size, + description: params.description || sourcePack.description, + originalLabel: sourcePack.label, + originalDeployment: sourceDeploymentInfo.name, + min_version: versionInfo[1], + max_version: versionInfo[2], + }; + if (_.isBoolean(params.isMandatory)) { + create_params.isMandatory = params.isMandatory + ? constConfig.IS_MANDATORY_YES + : constConfig.IS_MANDATORY_NO; + } else { + create_params.isMandatory = sourcePack.is_mandatory; + } + if (_.isBoolean(params.isDisabled)) { + create_params.isDisabled = params.isDisabled + ? constConfig.IS_DISABLED_YES + : constConfig.IS_DISABLED_NO; + } else { + create_params.isDisabled = sourcePack.is_disabled; + } + return self.createPackage( + destDeploymentInfo.id, + appFinalVersion, + sourcePack.package_hash, + sourcePack.manifest_blob_url, + sourcePack.blob_url, + create_params, + ); + }); }; proto.rollbackPackage = function (deploymentVersionId, targetLabel, rollbackUid) { - var self = this; - return models.DeploymentsVersions.findById(deploymentVersionId) - .then((deploymentsVersions) => { - if (!deploymentsVersions) { - throw new AppError.AppError("您之前还没有发布过版本"); - } - return models.Packages.findById(deploymentsVersions.current_package_id) - .then((currentPackageInfo) => { - if (targetLabel) { - return models.Packages.findAll({where: {deployment_version_id: deploymentVersionId, label: targetLabel}, limit: 1}) - .then((rollbackPackageInfos) => { - return [currentPackageInfo, rollbackPackageInfos] - }); - } else { - return self.getCanRollbackPackages(deploymentVersionId) - .then((rollbackPackageInfos) => { - return [currentPackageInfo, rollbackPackageInfos] - }); - } - }) - .spread((currentPackageInfo, rollbackPackageInfos) => { - if (currentPackageInfo && rollbackPackageInfos.length > 0) { - for (var i = rollbackPackageInfos.length - 1; i >= 0; i--) { - if (rollbackPackageInfos[i].package_hash != currentPackageInfo.package_hash) { - return rollbackPackageInfos[i]; - } + var self = this; + return models.DeploymentsVersions.findById(deploymentVersionId).then((deploymentsVersions) => { + if (!deploymentsVersions) { + throw new AppError.AppError('您之前还没有发布过版本'); } - } - throw new AppError.AppError("没有可供回滚的版本"); - }) - .then((rollbackPackage) => { - var params = { - releaseMethod: 'Rollback', - releaseUid: rollbackUid, - isMandatory: rollbackPackage.is_mandatory, - isDisabled: rollbackPackage.is_disabled, - rollout: rollbackPackage.rollout, - size: rollbackPackage.size, - description: rollbackPackage.description, - originalLabel: rollbackPackage.label, - originalDeployment: '', - min_version: deploymentsVersions.min_version, - max_version: deploymentsVersions.max_version, - }; - return self.createPackage(deploymentsVersions.deployment_id, - deploymentsVersions.app_version, - rollbackPackage.package_hash, - rollbackPackage.manifest_blob_url, - rollbackPackage.blob_url, - params - ); + return models.Packages.findById(deploymentsVersions.current_package_id) + .then((currentPackageInfo) => { + if (targetLabel) { + return models.Packages.findAll({ + where: { deployment_version_id: deploymentVersionId, label: targetLabel }, + limit: 1, + }).then((rollbackPackageInfos) => { + return [currentPackageInfo, rollbackPackageInfos]; + }); + } else { + return self + .getCanRollbackPackages(deploymentVersionId) + .then((rollbackPackageInfos) => { + return [currentPackageInfo, rollbackPackageInfos]; + }); + } + }) + .spread((currentPackageInfo, rollbackPackageInfos) => { + if (currentPackageInfo && rollbackPackageInfos.length > 0) { + for (var i = rollbackPackageInfos.length - 1; i >= 0; i--) { + if ( + rollbackPackageInfos[i].package_hash != currentPackageInfo.package_hash + ) { + return rollbackPackageInfos[i]; + } + } + } + throw new AppError.AppError('没有可供回滚的版本'); + }) + .then((rollbackPackage) => { + var params = { + releaseMethod: 'Rollback', + releaseUid: rollbackUid, + isMandatory: rollbackPackage.is_mandatory, + isDisabled: rollbackPackage.is_disabled, + rollout: rollbackPackage.rollout, + size: rollbackPackage.size, + description: rollbackPackage.description, + originalLabel: rollbackPackage.label, + originalDeployment: '', + min_version: deploymentsVersions.min_version, + max_version: deploymentsVersions.max_version, + }; + return self.createPackage( + deploymentsVersions.deployment_id, + deploymentsVersions.app_version, + rollbackPackage.package_hash, + rollbackPackage.manifest_blob_url, + rollbackPackage.blob_url, + params, + ); + }); }); - }); -} +}; proto.getCanRollbackPackages = function (deploymentVersionId) { - var Sequelize = require('sequelize'); - return models.Packages.findAll({ - where: { - deployment_version_id: deploymentVersionId, - release_method: {[Sequelize.Op.in]: [constConfig.RELEAS_EMETHOD_UPLOAD, constConfig.RELEAS_EMETHOD_PROMOTE] } - }, order: [['id','desc']], limit: 2 - }); -} + var Sequelize = require('sequelize'); + return models.Packages.findAll({ + where: { + deployment_version_id: deploymentVersionId, + release_method: { + [Sequelize.Op.in]: [ + constConfig.RELEAS_EMETHOD_UPLOAD, + constConfig.RELEAS_EMETHOD_PROMOTE, + ], + }, + }, + order: [['id', 'desc']], + limit: 2, + }); +}; diff --git a/core/utils/common.js b/core/utils/common.js index 119b2694..4d2c7cd1 100644 --- a/core/utils/common.js +++ b/core/utils/common.js @@ -1,549 +1,519 @@ -"use strict"; -var fs = require("fs"); -var fsextra = require("fs-extra"); -var extract = require("extract-zip"); -var config = require("../config"); -var _ = require("lodash"); -var validator = require("validator"); -var qiniu = require("qiniu"); -var upyun = require("upyun"); +'use strict'; +var fs = require('fs'); +var fsextra = require('fs-extra'); +var extract = require('extract-zip'); +var config = require('../config'); +var _ = require('lodash'); +var validator = require('validator'); +var qiniu = require('qiniu'); +var upyun = require('upyun'); var common = {}; -var AppError = require("../app-error"); -var jschardet = require("jschardet"); -var log4js = require("log4js"); -var path = require("path"); -var log = log4js.getLogger("cps:utils:common"); +var AppError = require('../app-error'); +var jschardet = require('jschardet'); +var log4js = require('log4js'); +var path = require('path'); +var log = log4js.getLogger('cps:utils:common'); module.exports = common; common.detectIsTextFile = function (filePath) { - var fd = fs.openSync(filePath, "r"); - var buffer = Buffer.alloc(4096); - fs.readSync(fd, buffer, 0, 4096, 0); - fs.closeSync(fd); - var rs = jschardet.detect(buffer); - log.debug("detectIsTextFile:", filePath, rs); - if (rs.confidence == 1) { - return true; - } - return false; + var fd = fs.openSync(filePath, 'r'); + var buffer = Buffer.alloc(4096); + fs.readSync(fd, buffer, 0, 4096, 0); + fs.closeSync(fd); + var rs = jschardet.detect(buffer); + log.debug('detectIsTextFile:', filePath, rs); + if (rs.confidence == 1) { + return true; + } + return false; }; common.parseVersion = function (versionNo) { - var version = "0"; - var data = null; - if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { - // "1.2.3" - version = - data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); - } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})$/))) { - // "1.2" - version = data[1] + _.padStart(data[2], 5, "0") + _.padStart("0", 10, "0"); - } - return version; + var version = '0'; + var data = null; + if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { + // "1.2.3" + version = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})$/))) { + // "1.2" + version = data[1] + _.padStart(data[2], 5, '0') + _.padStart('0', 10, '0'); + } + return version; }; common.validatorVersion = function (versionNo) { - var flag = false; - var min = "0"; - var max = "9999999999999999999"; - var data = null; - if (versionNo == "*") { - // "*" - flag = true; - } else if ( - (data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) - ) { - // "1.2.3" - flag = true; - min = data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); - max = - data[1] + - _.padStart(data[2], 5, "0") + - _.padStart(parseInt(data[3]) + 1, 10, "0"); - } else if ( - (data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})(\.\*){0,1}$/)) - ) { - // "1.2" "1.2.*" - flag = true; - min = data[1] + _.padStart(data[2], 5, "0") + _.padStart("0", 10, "0"); - max = - data[1] + - _.padStart(parseInt(data[2]) + 1, 5, "0") + - _.padStart("0", 10, "0"); - } else if ( - (data = versionNo.match(/^\~([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) - ) { - //"~1.2.3" - flag = true; - min = data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); - max = - data[1] + - _.padStart(parseInt(data[2]) + 1, 5, "0") + - _.padStart("0", 10, "0"); - } else if ( - (data = versionNo.match(/^\^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/)) - ) { - //"^1.2.3" - flag = true; - min = data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); - max = - _.toString(parseInt(data[1]) + 1) + - _.padStart(0, 5, "0") + - _.padStart("0", 10, "0"); - } else if ( - (data = versionNo.match( - /^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?-\s?([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/ - )) - ) { - // "1.2.3 - 1.2.7" - flag = true; - min = data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); - max = - data[4] + - _.padStart(data[5], 5, "0") + - _.padStart(parseInt(data[6]) + 1, 10, "0"); - } else if ( - (data = versionNo.match( - /^>=([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?<([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/ - )) - ) { - // ">=1.2.3 <1.2.7" - flag = true; - min = data[1] + _.padStart(data[2], 5, "0") + _.padStart(data[3], 10, "0"); - max = data[4] + _.padStart(data[5], 5, "0") + _.padStart(data[6], 10, "0"); - } - return [flag, min, max]; + var flag = false; + var min = '0'; + var max = '9999999999999999999'; + var data = null; + if (versionNo == '*') { + // "*" + flag = true; + } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { + // "1.2.3" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + max = data[1] + _.padStart(data[2], 5, '0') + _.padStart(parseInt(data[3]) + 1, 10, '0'); + } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})(\.\*){0,1}$/))) { + // "1.2" "1.2.*" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart('0', 10, '0'); + max = data[1] + _.padStart(parseInt(data[2]) + 1, 5, '0') + _.padStart('0', 10, '0'); + } else if ((data = versionNo.match(/^\~([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { + //"~1.2.3" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + max = data[1] + _.padStart(parseInt(data[2]) + 1, 5, '0') + _.padStart('0', 10, '0'); + } else if ((data = versionNo.match(/^\^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { + //"^1.2.3" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + max = _.toString(parseInt(data[1]) + 1) + _.padStart(0, 5, '0') + _.padStart('0', 10, '0'); + } else if ( + (data = versionNo.match( + /^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?-\s?([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/, + )) + ) { + // "1.2.3 - 1.2.7" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + max = data[4] + _.padStart(data[5], 5, '0') + _.padStart(parseInt(data[6]) + 1, 10, '0'); + } else if ( + (data = versionNo.match( + /^>=([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?<([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/, + )) + ) { + // ">=1.2.3 <1.2.7" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + max = data[4] + _.padStart(data[5], 5, '0') + _.padStart(data[6], 10, '0'); + } + return [flag, min, max]; }; common.createFileFromRequest = function (url, filePath) { - return new Promise((resolve, reject) => { - fs.exists(filePath, function (exists) { - if (!exists) { - var request = require("request"); - log.debug(`createFileFromRequest url:${url}`); - request(url) - .on("error", function (error) { - reject(error); - }) - .on("response", function (response) { - if (response.statusCode == 200) { - let stream = fs.createWriteStream(filePath); - response.pipe(stream); - stream.on("close", function () { - resolve(null); - }); - stream.on("error", function (error) { - reject(error); - }); + return new Promise((resolve, reject) => { + fs.exists(filePath, function (exists) { + if (!exists) { + var request = require('request'); + log.debug(`createFileFromRequest url:${url}`); + request(url) + .on('error', function (error) { + reject(error); + }) + .on('response', function (response) { + if (response.statusCode == 200) { + let stream = fs.createWriteStream(filePath); + response.pipe(stream); + stream.on('close', function () { + resolve(null); + }); + stream.on('error', function (error) { + reject(error); + }); + } else { + reject({ message: 'request fail' }); + } + }); } else { - reject({ message: "request fail" }); + resolve(null); } - }); - } else { - resolve(null); - } + }); }); - }); }; common.copySync = function (sourceDst, targertDst) { - return fsextra.copySync(sourceDst, targertDst, { overwrite: true }); + return fsextra.copySync(sourceDst, targertDst, { overwrite: true }); }; common.copy = function (sourceDst, targertDst) { - return new Promise((resolve, reject) => { - fsextra.copy(sourceDst, targertDst, { overwrite: true }, function (err) { - if (err) { - log.error(err); - reject(err); - } else { - log.debug( - `copy success sourceDst:${sourceDst} targertDst:${targertDst}` - ); - resolve(); - } + return new Promise((resolve, reject) => { + fsextra.copy(sourceDst, targertDst, { overwrite: true }, function (err) { + if (err) { + log.error(err); + reject(err); + } else { + log.debug(`copy success sourceDst:${sourceDst} targertDst:${targertDst}`); + resolve(); + } + }); }); - }); }; common.move = function (sourceDst, targertDst) { - return new Promise((resolve, reject) => { - fsextra.move(sourceDst, targertDst, { overwrite: true }, function (err) { - if (err) { - log.error(err); - reject(err); - } else { - log.debug( - `move success sourceDst:${sourceDst} targertDst:${targertDst}` - ); - resolve(); - } + return new Promise((resolve, reject) => { + fsextra.move(sourceDst, targertDst, { overwrite: true }, function (err) { + if (err) { + log.error(err); + reject(err); + } else { + log.debug(`move success sourceDst:${sourceDst} targertDst:${targertDst}`); + resolve(); + } + }); }); - }); }; common.deleteFolder = function (folderPath) { - return new Promise((resolve, reject) => { - fsextra.remove(folderPath, function (err) { - if (err) { - log.error(err); - reject(err); - } else { - log.debug(`deleteFolder delete ${folderPath} success.`); - resolve(null); - } + return new Promise((resolve, reject) => { + fsextra.remove(folderPath, function (err) { + if (err) { + log.error(err); + reject(err); + } else { + log.debug(`deleteFolder delete ${folderPath} success.`); + resolve(null); + } + }); }); - }); }; common.deleteFolderSync = function (folderPath) { - return fsextra.removeSync(folderPath); + return fsextra.removeSync(folderPath); }; common.createEmptyFolder = function (folderPath) { - return new Promise((resolve, reject) => { - log.debug(`createEmptyFolder Create dir ${folderPath}`); - return common.deleteFolder(folderPath).then((data) => { - fsextra.mkdirs(folderPath, (err) => { - if (err) { - log.error(err); - reject(new AppError.AppError(err.message)); - } else { - resolve(folderPath); - } - }); + return new Promise((resolve, reject) => { + log.debug(`createEmptyFolder Create dir ${folderPath}`); + return common.deleteFolder(folderPath).then((data) => { + fsextra.mkdirs(folderPath, (err) => { + if (err) { + log.error(err); + reject(new AppError.AppError(err.message)); + } else { + resolve(folderPath); + } + }); + }); }); - }); }; common.createEmptyFolderSync = function (folderPath) { - common.deleteFolderSync(folderPath); - return fsextra.mkdirsSync(folderPath); + common.deleteFolderSync(folderPath); + return fsextra.mkdirsSync(folderPath); }; common.unzipFile = function (zipFile, outputPath) { - return new Promise((resolve, reject) => { - try { - log.debug(`unzipFile check zipFile ${zipFile} fs.R_OK`); - fs.accessSync(zipFile, fs.R_OK); - log.debug(`Pass unzipFile file ${zipFile}`); - } catch (e) { - log.error(e); - return reject(new AppError.AppError(e.message)); - } - extract(zipFile, { dir: outputPath }, function (err) { - if (err) { - log.error(err); - reject(new AppError.AppError(`it's not a zipFile`)); - } else { - log.debug(`unzipFile success`); - resolve(outputPath); - } + return new Promise((resolve, reject) => { + try { + log.debug(`unzipFile check zipFile ${zipFile} fs.R_OK`); + fs.accessSync(zipFile, fs.R_OK); + log.debug(`Pass unzipFile file ${zipFile}`); + } catch (e) { + log.error(e); + return reject(new AppError.AppError(e.message)); + } + extract(zipFile, { dir: outputPath }, function (err) { + if (err) { + log.error(err); + reject(new AppError.AppError(`it's not a zipFile`)); + } else { + log.debug(`unzipFile success`); + resolve(outputPath); + } + }); }); - }); }; common.getUploadTokenQiniu = function (mac, bucket, key) { - var options = { - scope: bucket + ":" + key, - }; - var putPolicy = new qiniu.rs.PutPolicy(options); - return putPolicy.uploadToken(mac); + var options = { + scope: bucket + ':' + key, + }; + var putPolicy = new qiniu.rs.PutPolicy(options); + return putPolicy.uploadToken(mac); }; common.uploadFileToStorage = function (key, filePath) { - var storageType = _.get(config, "common.storageType"); - if (storageType === "local") { - return common.uploadFileToLocal(key, filePath); - } else if (storageType === "s3") { - return common.uploadFileToS3(key, filePath); - } else if (storageType === "oss") { - return common.uploadFileToOSS(key, filePath); - } else if (storageType === "qiniu") { - return common.uploadFileToQiniu(key, filePath); - } else if (storageType === "upyun") { - return common.uploadFileToUpyun(key, filePath); - } else if (storageType === "tencentcloud") { - return common.uploadFileToTencentCloud(key, filePath); - } - throw new AppError.AppError(`${storageType} storageType does not support.`); + var storageType = _.get(config, 'common.storageType'); + if (storageType === 'local') { + return common.uploadFileToLocal(key, filePath); + } else if (storageType === 's3') { + return common.uploadFileToS3(key, filePath); + } else if (storageType === 'oss') { + return common.uploadFileToOSS(key, filePath); + } else if (storageType === 'qiniu') { + return common.uploadFileToQiniu(key, filePath); + } else if (storageType === 'upyun') { + return common.uploadFileToUpyun(key, filePath); + } else if (storageType === 'tencentcloud') { + return common.uploadFileToTencentCloud(key, filePath); + } + throw new AppError.AppError(`${storageType} storageType does not support.`); }; common.uploadFileToLocal = function (key, filePath) { - return new Promise((resolve, reject) => { - var storageDir = _.get(config, "local.storageDir"); - if (!storageDir) { - throw new AppError.AppError("please set config local storageDir"); - } - if (key.length < 3) { - log.error(`generate key is too short, key value:${key}`); - throw new AppError.AppError("generate key is too short."); - } - try { - log.debug(`uploadFileToLocal check directory ${storageDir} fs.R_OK`); - fs.accessSync(storageDir, fs.W_OK); - log.debug(`uploadFileToLocal directory ${storageDir} fs.R_OK is ok`); - } catch (e) { - log.error(e); - throw new AppError.AppError(e.message); - } - var subDir = key.substr(0, 2).toLowerCase(); - var finalDir = path.join(storageDir, subDir); - var fileName = path.join(finalDir, key); - if (fs.existsSync(fileName)) { - return resolve(key); - } - var stats = fs.statSync(storageDir); - if (!stats.isDirectory()) { - var e = new AppError.AppError(`${storageDir} must be directory`); - log.error(e); - throw e; - } - if (!fs.existsSync(`${finalDir}`)) { - fs.mkdirSync(`${finalDir}`); - log.debug(`uploadFileToLocal mkdir:${finalDir}`); - } - try { - fs.accessSync(filePath, fs.R_OK); - } catch (e) { - log.error(e); - throw new AppError.AppError(e.message); - } - stats = fs.statSync(filePath); - if (!stats.isFile()) { - var e = new AppError.AppError(`${filePath} must be file`); - log.error(e); - throw e; - } - fsextra.copy(filePath, fileName, (err) => { - if (err) { - log.error(new AppError.AppError(err.message)); - return reject(new AppError.AppError(err.message)); - } - log.debug(`uploadFileToLocal copy file ${key} success.`); - resolve(key); + return new Promise((resolve, reject) => { + var storageDir = _.get(config, 'local.storageDir'); + if (!storageDir) { + throw new AppError.AppError('please set config local storageDir'); + } + if (key.length < 3) { + log.error(`generate key is too short, key value:${key}`); + throw new AppError.AppError('generate key is too short.'); + } + try { + log.debug(`uploadFileToLocal check directory ${storageDir} fs.R_OK`); + fs.accessSync(storageDir, fs.W_OK); + log.debug(`uploadFileToLocal directory ${storageDir} fs.R_OK is ok`); + } catch (e) { + log.error(e); + throw new AppError.AppError(e.message); + } + var subDir = key.substr(0, 2).toLowerCase(); + var finalDir = path.join(storageDir, subDir); + var fileName = path.join(finalDir, key); + if (fs.existsSync(fileName)) { + return resolve(key); + } + var stats = fs.statSync(storageDir); + if (!stats.isDirectory()) { + var e = new AppError.AppError(`${storageDir} must be directory`); + log.error(e); + throw e; + } + if (!fs.existsSync(`${finalDir}`)) { + fs.mkdirSync(`${finalDir}`); + log.debug(`uploadFileToLocal mkdir:${finalDir}`); + } + try { + fs.accessSync(filePath, fs.R_OK); + } catch (e) { + log.error(e); + throw new AppError.AppError(e.message); + } + stats = fs.statSync(filePath); + if (!stats.isFile()) { + var e = new AppError.AppError(`${filePath} must be file`); + log.error(e); + throw e; + } + fsextra.copy(filePath, fileName, (err) => { + if (err) { + log.error(new AppError.AppError(err.message)); + return reject(new AppError.AppError(err.message)); + } + log.debug(`uploadFileToLocal copy file ${key} success.`); + resolve(key); + }); }); - }); }; common.getBlobDownloadUrl = function (blobUrl) { - var fileName = blobUrl; - var storageType = _.get(config, "common.storageType"); - var downloadUrl = _.get(config, `${storageType}.downloadUrl`); - if (storageType === "local") { - fileName = blobUrl.substr(0, 2).toLowerCase() + "/" + blobUrl; - } - if (!validator.isURL(downloadUrl)) { - var e = new AppError.AppError( - `Please config ${storageType}.downloadUrl in config.js` - ); - log.error(e); - throw e; - } - return `${downloadUrl}/${fileName}`; + var fileName = blobUrl; + var storageType = _.get(config, 'common.storageType'); + var downloadUrl = _.get(config, `${storageType}.downloadUrl`); + if (storageType === 'local') { + fileName = blobUrl.substr(0, 2).toLowerCase() + '/' + blobUrl; + } + if (!validator.isURL(downloadUrl)) { + var e = new AppError.AppError(`Please config ${storageType}.downloadUrl in config.js`); + log.error(e); + throw e; + } + return `${downloadUrl}/${fileName}`; }; common.uploadFileToQiniu = function (key, filePath) { - return new Promise((resolve, reject) => { - var accessKey = _.get(config, "qiniu.accessKey"); - var secretKey = _.get(config, "qiniu.secretKey"); - var bucket = _.get(config, "qiniu.bucketName", ""); - var mac = new qiniu.auth.digest.Mac(accessKey, secretKey); - var conf = new qiniu.conf.Config(); - var bucketManager = new qiniu.rs.BucketManager(mac, conf); - bucketManager.stat(bucket, key, (respErr, respBody, respInfo) => { - if (respErr) { - log.debug("uploadFileToQiniu file stat:", respErr); - return reject(new AppError.AppError(respErr.message)); - } - log.debug("uploadFileToQiniu file stat respBody:", respBody); - log.debug("uploadFileToQiniu file stat respInfo:", respInfo); - if (respInfo.statusCode == 200) { - resolve(respBody.hash); - } else { - try { - var uploadToken = common.getUploadTokenQiniu(mac, bucket, key); - } catch (e) { - return reject(new AppError.AppError(e.message)); - } - var formUploader = new qiniu.form_up.FormUploader(conf); - var putExtra = new qiniu.form_up.PutExtra(); - formUploader.putFile( - uploadToken, - key, - filePath, - putExtra, - (respErr, respBody, respInfo) => { + return new Promise((resolve, reject) => { + var accessKey = _.get(config, 'qiniu.accessKey'); + var secretKey = _.get(config, 'qiniu.secretKey'); + var bucket = _.get(config, 'qiniu.bucketName', ''); + var mac = new qiniu.auth.digest.Mac(accessKey, secretKey); + var conf = new qiniu.conf.Config(); + var bucketManager = new qiniu.rs.BucketManager(mac, conf); + bucketManager.stat(bucket, key, (respErr, respBody, respInfo) => { if (respErr) { - log.error("uploadFileToQiniu putFile:", respErr); - // 上传失败, 处理返回代码 - return reject(new AppError.AppError(JSON.stringify(respErr))); + log.debug('uploadFileToQiniu file stat:', respErr); + return reject(new AppError.AppError(respErr.message)); + } + log.debug('uploadFileToQiniu file stat respBody:', respBody); + log.debug('uploadFileToQiniu file stat respInfo:', respInfo); + if (respInfo.statusCode == 200) { + resolve(respBody.hash); } else { - log.debug("uploadFileToQiniu putFile respBody:", respBody); - log.debug("uploadFileToQiniu putFile respInfo:", respInfo); - // 上传成功, 处理返回值 - if (respInfo.statusCode == 200) { - return resolve(respBody.hash); - } else { - return reject(new AppError.AppError(respBody.error)); - } + try { + var uploadToken = common.getUploadTokenQiniu(mac, bucket, key); + } catch (e) { + return reject(new AppError.AppError(e.message)); + } + var formUploader = new qiniu.form_up.FormUploader(conf); + var putExtra = new qiniu.form_up.PutExtra(); + formUploader.putFile( + uploadToken, + key, + filePath, + putExtra, + (respErr, respBody, respInfo) => { + if (respErr) { + log.error('uploadFileToQiniu putFile:', respErr); + // 上传失败, 处理返回代码 + return reject(new AppError.AppError(JSON.stringify(respErr))); + } else { + log.debug('uploadFileToQiniu putFile respBody:', respBody); + log.debug('uploadFileToQiniu putFile respInfo:', respInfo); + // 上传成功, 处理返回值 + if (respInfo.statusCode == 200) { + return resolve(respBody.hash); + } else { + return reject(new AppError.AppError(respBody.error)); + } + } + }, + ); } - } - ); - } + }); }); - }); }; common.uploadFileToUpyun = function (key, filePath) { - var serviceName = _.get(config, "upyun.serviceName"); - var operatorName = _.get(config, "upyun.operatorName"); - var operatorPass = _.get(config, "upyun.operatorPass", ""); - var storageDir = _.get(config, "upyun.storageDir", ""); - var service = new upyun.Service(serviceName, operatorName, operatorPass); - var client = new upyun.Client(service); - return new Promise((resolve, reject) => { - client - .makeDir(storageDir) - .then((result) => { - if (!storageDir) { - reject(new AppError.AppError("Please config the upyun remoteDir!")); - return; - } - let remotePath = storageDir + "/" + key; - log.debug("uploadFileToUpyun remotePath:", remotePath); - log.debug("uploadFileToUpyun mkDir result:", result); + var serviceName = _.get(config, 'upyun.serviceName'); + var operatorName = _.get(config, 'upyun.operatorName'); + var operatorPass = _.get(config, 'upyun.operatorPass', ''); + var storageDir = _.get(config, 'upyun.storageDir', ''); + var service = new upyun.Service(serviceName, operatorName, operatorPass); + var client = new upyun.Client(service); + return new Promise((resolve, reject) => { client - .putFile(remotePath, fs.createReadStream(filePath)) - .then((data) => { - log.debug("uploadFileToUpyun putFile response:", data); - if (data) { - resolve(key); - } else { - log.debug("uploadFileToUpyun putFile failed!", data); - reject(new AppError.AppError("Upload file to upyun failed!")); - } - }) - .catch((e1) => { - log.debug("uploadFileToUpyun putFile exception e1:", e1); - reject(new AppError.AppError(JSON.stringify(e1))); - }); - }) - .catch((e) => { - log.debug("uploadFileToUpyun putFile exception e:", e); - reject(new AppError.AppError(JSON.stringify(e))); - }); - }); + .makeDir(storageDir) + .then((result) => { + if (!storageDir) { + reject(new AppError.AppError('Please config the upyun remoteDir!')); + return; + } + let remotePath = storageDir + '/' + key; + log.debug('uploadFileToUpyun remotePath:', remotePath); + log.debug('uploadFileToUpyun mkDir result:', result); + client + .putFile(remotePath, fs.createReadStream(filePath)) + .then((data) => { + log.debug('uploadFileToUpyun putFile response:', data); + if (data) { + resolve(key); + } else { + log.debug('uploadFileToUpyun putFile failed!', data); + reject(new AppError.AppError('Upload file to upyun failed!')); + } + }) + .catch((e1) => { + log.debug('uploadFileToUpyun putFile exception e1:', e1); + reject(new AppError.AppError(JSON.stringify(e1))); + }); + }) + .catch((e) => { + log.debug('uploadFileToUpyun putFile exception e:', e); + reject(new AppError.AppError(JSON.stringify(e))); + }); + }); }; common.uploadFileToS3 = function (key, filePath) { - var AWS = require("aws-sdk"); - return new Promise((resolve, reject) => { - AWS.config.update({ - accessKeyId: _.get(config, "s3.accessKeyId"), - secretAccessKey: _.get(config, "s3.secretAccessKey"), - sessionToken: _.get(config, "s3.sessionToken"), - region: _.get(config, "s3.region"), + var AWS = require('aws-sdk'); + return new Promise((resolve, reject) => { + AWS.config.update({ + accessKeyId: _.get(config, 's3.accessKeyId'), + secretAccessKey: _.get(config, 's3.secretAccessKey'), + sessionToken: _.get(config, 's3.sessionToken'), + region: _.get(config, 's3.region'), + }); + var s3 = new AWS.S3({ + params: { Bucket: _.get(config, 's3.bucketName') }, + }); + fs.readFile(filePath, (err, data) => { + s3.upload( + { + Key: key, + Body: data, + ACL: 'public-read', + }, + (err, response) => { + if (err) { + reject(new AppError.AppError(JSON.stringify(err))); + } else { + resolve(response.ETag); + } + }, + ); + }); }); - var s3 = new AWS.S3({ - params: { Bucket: _.get(config, "s3.bucketName") }, - }); - fs.readFile(filePath, (err, data) => { - s3.upload( - { - Key: key, - Body: data, - ACL: "public-read", - }, - (err, response) => { - if (err) { - reject(new AppError.AppError(JSON.stringify(err))); - } else { - resolve(response.ETag); - } - } - ); - }); - }); }; common.uploadFileToOSS = function (key, filePath) { - var ALY = require("aliyun-sdk"); - var ossStream = require("aliyun-oss-upload-stream")( - new ALY.OSS({ - accessKeyId: _.get(config, "oss.accessKeyId"), - secretAccessKey: _.get(config, "oss.secretAccessKey"), - endpoint: _.get(config, "oss.endpoint"), - apiVersion: "2013-10-15", - }) - ); - if (!_.isEmpty(_.get(config, "oss.prefix", ""))) { - key = `${_.get(config, "oss.prefix")}/${key}`; - } - var upload = ossStream.upload({ - Bucket: _.get(config, "oss.bucketName"), - Key: key, - }); - - return new Promise((resolve, reject) => { - upload.on("error", (error) => { - log.debug("uploadFileToOSS", error); - reject(error); + var ALY = require('aliyun-sdk'); + var ossStream = require('aliyun-oss-upload-stream')( + new ALY.OSS({ + accessKeyId: _.get(config, 'oss.accessKeyId'), + secretAccessKey: _.get(config, 'oss.secretAccessKey'), + endpoint: _.get(config, 'oss.endpoint'), + apiVersion: '2013-10-15', + }), + ); + if (!_.isEmpty(_.get(config, 'oss.prefix', ''))) { + key = `${_.get(config, 'oss.prefix')}/${key}`; + } + var upload = ossStream.upload({ + Bucket: _.get(config, 'oss.bucketName'), + Key: key, }); - upload.on("uploaded", (details) => { - log.debug("uploadFileToOSS", details); - resolve(details.ETag); + return new Promise((resolve, reject) => { + upload.on('error', (error) => { + log.debug('uploadFileToOSS', error); + reject(error); + }); + + upload.on('uploaded', (details) => { + log.debug('uploadFileToOSS', details); + resolve(details.ETag); + }); + fs.createReadStream(filePath).pipe(upload); }); - fs.createReadStream(filePath).pipe(upload); - }); }; common.uploadFileToTencentCloud = function (key, filePath) { - return new Promise((resolve, reject) => { - var COS = require("cos-nodejs-sdk-v5"); - var cosIn = new COS({ - SecretId: _.get(config, "tencentcloud.accessKeyId"), - SecretKey: _.get(config, "tencentcloud.secretAccessKey"), + return new Promise((resolve, reject) => { + var COS = require('cos-nodejs-sdk-v5'); + var cosIn = new COS({ + SecretId: _.get(config, 'tencentcloud.accessKeyId'), + SecretKey: _.get(config, 'tencentcloud.secretAccessKey'), + }); + cosIn.sliceUploadFile( + { + Bucket: _.get(config, 'tencentcloud.bucketName'), + Region: _.get(config, 'tencentcloud.region'), + Key: key, + FilePath: filePath, + }, + function (err, data) { + log.debug('uploadFileToTencentCloud', err, data); + if (err) { + reject(new AppError.AppError(JSON.stringify(err))); + } else { + resolve(data.Key); + } + }, + ); }); - cosIn.sliceUploadFile( - { - Bucket: _.get(config, "tencentcloud.bucketName"), - Region: _.get(config, "tencentcloud.region"), - Key: key, - FilePath: filePath, - }, - function (err, data) { - log.debug("uploadFileToTencentCloud", err, data); - if (err) { - reject(new AppError.AppError(JSON.stringify(err))); - } else { - resolve(data.Key); - } - } - ); - }); }; common.diffCollectionsSync = function (collection1, collection2) { - var diffFiles = []; - var collection1Only = []; - var newCollection2 = Object.assign({}, collection2); - if (collection1 instanceof Object) { - for (var key of Object.keys(collection1)) { - if (_.isEmpty(newCollection2[key])) { - collection1Only.push(key); - } else { - if (!_.eq(collection1[key], newCollection2[key])) { - diffFiles.push(key); + var diffFiles = []; + var collection1Only = []; + var newCollection2 = Object.assign({}, collection2); + if (collection1 instanceof Object) { + for (var key of Object.keys(collection1)) { + if (_.isEmpty(newCollection2[key])) { + collection1Only.push(key); + } else { + if (!_.eq(collection1[key], newCollection2[key])) { + diffFiles.push(key); + } + delete newCollection2[key]; + } } - delete newCollection2[key]; - } } - } - return { - diff: diffFiles, - collection1Only: collection1Only, - collection2Only: Object.keys(newCollection2), - }; + return { + diff: diffFiles, + collection1Only: collection1Only, + collection2Only: Object.keys(newCollection2), + }; }; diff --git a/core/utils/factory.js b/core/utils/factory.js index 17a2b99c..da12fb22 100644 --- a/core/utils/factory.js +++ b/core/utils/factory.js @@ -3,11 +3,11 @@ var Promise = require('bluebird'); var redis = require('redis'); Promise.promisifyAll(redis.RedisClient.prototype); Promise.promisifyAll(redis.Multi.prototype); -var config = require('../config'); +var config = require('../config'); var _ = require('lodash'); var factory = {}; module.exports = factory; factory.getRedisClient = function (name) { - return redis.createClient(_.get(config, `redis.${name}`)); + return redis.createClient(_.get(config, `redis.${name}`)); }; diff --git a/core/utils/qetag.js b/core/utils/qetag.js index 20de48f5..eb6eaedf 100644 --- a/core/utils/qetag.js +++ b/core/utils/qetag.js @@ -1,78 +1,72 @@ // 计算文件的eTag,参数为buffer或者readableStream或者文件路径 function getEtag(buffer, callback) { - // 判断传入的参数是buffer还是stream还是filepath - var mode = "buffer"; + // 判断传入的参数是buffer还是stream还是filepath + var mode = 'buffer'; - if (typeof buffer === "string") { - buffer = require("fs").createReadStream(buffer); - mode = "stream"; - } else if (buffer instanceof require("stream")) { - mode = "stream"; - } - - // sha1算法 - var sha1 = function (content) { - var crypto = require("crypto"); - var sha1 = crypto.createHash("sha1"); - sha1.update(content); - return sha1.digest(); - }; + if (typeof buffer === 'string') { + buffer = require('fs').createReadStream(buffer); + mode = 'stream'; + } else if (buffer instanceof require('stream')) { + mode = 'stream'; + } - // 以4M为单位分割 - var blockSize = 4 * 1024 * 1024; - var sha1String = []; - var prefix = 0x16; - var blockCount = 0; + // sha1算法 + var sha1 = function (content) { + var crypto = require('crypto'); + var sha1 = crypto.createHash('sha1'); + sha1.update(content); + return sha1.digest(); + }; - switch (mode) { - case "buffer": - var bufferSize = buffer.length; - blockCount = Math.ceil(bufferSize / blockSize); + // 以4M为单位分割 + var blockSize = 4 * 1024 * 1024; + var sha1String = []; + var prefix = 0x16; + var blockCount = 0; - for (var i = 0; i < blockCount; i++) { - sha1String.push(sha1(buffer.slice(i * blockSize, (i + 1) * blockSize))); - } - process.nextTick(function () { - callback(calcEtag()); - }); - break; - case "stream": - var stream = buffer; - stream.on("readable", function () { - var chunk; - while ((chunk = stream.read(blockSize))) { - sha1String.push(sha1(chunk)); - blockCount++; - } - }); - stream.on("end", function () { - callback(calcEtag()); - }); - break; - } + switch (mode) { + case 'buffer': + var bufferSize = buffer.length; + blockCount = Math.ceil(bufferSize / blockSize); - function calcEtag() { - if (!sha1String.length) { - return "Fto5o-5ea0sNMlW_75VgGJCv2AcJ"; + for (var i = 0; i < blockCount; i++) { + sha1String.push(sha1(buffer.slice(i * blockSize, (i + 1) * blockSize))); + } + process.nextTick(function () { + callback(calcEtag()); + }); + break; + case 'stream': + var stream = buffer; + stream.on('readable', function () { + var chunk; + while ((chunk = stream.read(blockSize))) { + sha1String.push(sha1(chunk)); + blockCount++; + } + }); + stream.on('end', function () { + callback(calcEtag()); + }); + break; } - var sha1Buffer = Buffer.concat(sha1String, blockCount * 20); - // 如果大于4M,则对各个块的sha1结果再次sha1 - if (blockCount > 1) { - prefix = 0x96; - sha1Buffer = sha1(sha1Buffer); - } + function calcEtag() { + if (!sha1String.length) { + return 'Fto5o-5ea0sNMlW_75VgGJCv2AcJ'; + } + var sha1Buffer = Buffer.concat(sha1String, blockCount * 20); + + // 如果大于4M,则对各个块的sha1结果再次sha1 + if (blockCount > 1) { + prefix = 0x96; + sha1Buffer = sha1(sha1Buffer); + } - sha1Buffer = Buffer.concat( - [Buffer.from([prefix]), sha1Buffer], - sha1Buffer.length + 1 - ); + sha1Buffer = Buffer.concat([Buffer.from([prefix]), sha1Buffer], sha1Buffer.length + 1); - return sha1Buffer - .toString("base64") - .replace(/\//g, "_") - .replace(/\+/g, "-"); - } + return sha1Buffer.toString('base64').replace(/\//g, '_').replace(/\+/g, '-'); + } } module.exports = getEtag; diff --git a/core/utils/security.js b/core/utils/security.js index dd8e2f63..6e49890f 100644 --- a/core/utils/security.js +++ b/core/utils/security.js @@ -1,230 +1,227 @@ -"use strict"; -var bcrypt = require("bcryptjs"); -var crypto = require("crypto"); -var fs = require("fs"); -var qetag = require("../utils/qetag"); -var _ = require("lodash"); -var log4js = require("log4js"); -var log = log4js.getLogger("cps:utils:security"); -var AppError = require("../app-error"); - -var randToken = require("rand-token").generator({ - chars: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", - source: crypto.randomBytes, +'use strict'; +var bcrypt = require('bcryptjs'); +var crypto = require('crypto'); +var fs = require('fs'); +var qetag = require('../utils/qetag'); +var _ = require('lodash'); +var log4js = require('log4js'); +var log = log4js.getLogger('cps:utils:security'); +var AppError = require('../app-error'); + +var randToken = require('rand-token').generator({ + chars: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + source: crypto.randomBytes, }); var security = {}; module.exports = security; security.md5 = function (str) { - var md5sum = crypto.createHash("md5"); - md5sum.update(str); - str = md5sum.digest("hex"); - return str; + var md5sum = crypto.createHash('md5'); + md5sum.update(str); + str = md5sum.digest('hex'); + return str; }; security.passwordHashSync = function (password) { - return bcrypt.hashSync(password, bcrypt.genSaltSync(12)); + return bcrypt.hashSync(password, bcrypt.genSaltSync(12)); }; security.passwordVerifySync = function (password, hash) { - return bcrypt.compareSync(password, hash); + return bcrypt.compareSync(password, hash); }; security.randToken = function (num) { - return randToken.generate(num); + return randToken.generate(num); }; security.parseToken = function (token) { - return { identical: token.substr(-9, 9), token: token.substr(0, 28) }; + return { identical: token.substr(-9, 9), token: token.substr(0, 28) }; }; security.fileSha256 = function (file) { - return new Promise((resolve, reject) => { - var rs = fs.createReadStream(file); - var hash = crypto.createHash("sha256"); - rs.on("data", hash.update.bind(hash)); - rs.on("error", (e) => { - reject(e); - }); - rs.on("end", () => { - resolve(hash.digest("hex")); + return new Promise((resolve, reject) => { + var rs = fs.createReadStream(file); + var hash = crypto.createHash('sha256'); + rs.on('data', hash.update.bind(hash)); + rs.on('error', (e) => { + reject(e); + }); + rs.on('end', () => { + resolve(hash.digest('hex')); + }); }); - }); }; security.stringSha256Sync = function (contents) { - var sha256 = crypto.createHash("sha256"); - sha256.update(contents); - return sha256.digest("hex"); + var sha256 = crypto.createHash('sha256'); + sha256.update(contents); + return sha256.digest('hex'); }; security.packageHashSync = function (jsonData) { - var sortedArr = security.sortJsonToArr(jsonData); - var manifestData = _.filter(sortedArr, (v) => { - return !security.isPackageHashIgnored(v.path); - }).map((v) => { - return v.path + ":" + v.hash; - }); - log.debug("packageHashSync manifestData:", manifestData); - var manifestString = JSON.stringify(manifestData.sort()); - manifestString = _.replace(manifestString, /\\\//g, "/"); - log.debug("packageHashSync manifestString:", manifestString); - return security.stringSha256Sync(manifestString); + var sortedArr = security.sortJsonToArr(jsonData); + var manifestData = _.filter(sortedArr, (v) => { + return !security.isPackageHashIgnored(v.path); + }).map((v) => { + return v.path + ':' + v.hash; + }); + log.debug('packageHashSync manifestData:', manifestData); + var manifestString = JSON.stringify(manifestData.sort()); + manifestString = _.replace(manifestString, /\\\//g, '/'); + log.debug('packageHashSync manifestString:', manifestString); + return security.stringSha256Sync(manifestString); }; //参数为buffer或者readableStream或者文件路径 security.qetag = function (buffer) { - if (typeof buffer === "string") { - try { - log.debug(`Check upload file ${buffer} fs.R_OK`); - fs.accessSync(buffer, fs.R_OK); - log.debug(`Pass upload file ${buffer}`); - } catch (e) { - log.error(e); - return Promise.reject(new AppError.AppError(e.message)); + if (typeof buffer === 'string') { + try { + log.debug(`Check upload file ${buffer} fs.R_OK`); + fs.accessSync(buffer, fs.R_OK); + log.debug(`Pass upload file ${buffer}`); + } catch (e) { + log.error(e); + return Promise.reject(new AppError.AppError(e.message)); + } } - } - log.debug(`generate file identical`); - return new Promise((resolve, reject) => { - qetag(buffer, (data) => { - log.debug("identical:", data); - resolve(data); + log.debug(`generate file identical`); + return new Promise((resolve, reject) => { + qetag(buffer, (data) => { + log.debug('identical:', data); + resolve(data); + }); }); - }); }; security.sha256AllFiles = function (files) { - return new Promise((resolve, reject) => { - var results = {}; - var length = files.length; - var count = 0; - files.forEach((file) => { - security.fileSha256(file).then((hash) => { - results[file] = hash; - count++; - if (count == length) { - resolve(results); - } - }); + return new Promise((resolve, reject) => { + var results = {}; + var length = files.length; + var count = 0; + files.forEach((file) => { + security.fileSha256(file).then((hash) => { + results[file] = hash; + count++; + if (count == length) { + resolve(results); + } + }); + }); }); - }); }; security.uploadPackageType = function (directoryPath) { - return new Promise((resolve, reject) => { - var recursive = require("recursive-readdir"); - var path = require("path"); - var slash = require("slash"); - recursive(directoryPath, (err, files) => { - if (err) { - log.error(new AppError.AppError(err.message)); - reject(new AppError.AppError(err.message)); - } else { - if (files.length == 0) { - log.debug(`uploadPackageType empty files`); - reject(new AppError.AppError("empty files")); - } else { - var constName = require("../const"); - const AREGEX = /android\.bundle/; - const AREGEX_IOS = /main\.jsbundle/; - var packageType = 0; - _.forIn(files, function (value) { - if (AREGEX.test(value)) { - packageType = constName.ANDROID; - return false; - } - if (AREGEX_IOS.test(value)) { - packageType = constName.IOS; - return false; + return new Promise((resolve, reject) => { + var recursive = require('recursive-readdir'); + var path = require('path'); + var slash = require('slash'); + recursive(directoryPath, (err, files) => { + if (err) { + log.error(new AppError.AppError(err.message)); + reject(new AppError.AppError(err.message)); + } else { + if (files.length == 0) { + log.debug(`uploadPackageType empty files`); + reject(new AppError.AppError('empty files')); + } else { + var constName = require('../const'); + const AREGEX = /android\.bundle/; + const AREGEX_IOS = /main\.jsbundle/; + var packageType = 0; + _.forIn(files, function (value) { + if (AREGEX.test(value)) { + packageType = constName.ANDROID; + return false; + } + if (AREGEX_IOS.test(value)) { + packageType = constName.IOS; + return false; + } + }); + log.debug(`uploadPackageType packageType: ${packageType}`); + resolve(packageType); + } } - }); - log.debug(`uploadPackageType packageType: ${packageType}`); - resolve(packageType); - } - } + }); }); - }); }; // some files are ignored in calc hash in client sdk // https://github.com/Microsoft/react-native-code-push/pull/974/files#diff-21b650f88429c071b217d46243875987R15 security.isHashIgnored = function (relativePath) { - if (!relativePath) { - return true; - } - - const IgnoreMacOSX = "__MACOSX/"; - const IgnoreDSStore = ".DS_Store"; - - return ( - relativePath.startsWith(IgnoreMacOSX) || - relativePath === IgnoreDSStore || - relativePath.endsWith(IgnoreDSStore) - ); + if (!relativePath) { + return true; + } + + const IgnoreMacOSX = '__MACOSX/'; + const IgnoreDSStore = '.DS_Store'; + + return ( + relativePath.startsWith(IgnoreMacOSX) || + relativePath === IgnoreDSStore || + relativePath.endsWith(IgnoreDSStore) + ); }; security.isPackageHashIgnored = function (relativePath) { - if (!relativePath) { - return true; - } - - // .codepushrelease contains code sign JWT - // it should be ignored in package hash but need to be included in package manifest - const IgnoreCodePushMetadata = ".codepushrelease"; - return ( - relativePath === IgnoreCodePushMetadata || - relativePath.endsWith(IgnoreCodePushMetadata) || - security.isHashIgnored(relativePath) - ); + if (!relativePath) { + return true; + } + + // .codepushrelease contains code sign JWT + // it should be ignored in package hash but need to be included in package manifest + const IgnoreCodePushMetadata = '.codepushrelease'; + return ( + relativePath === IgnoreCodePushMetadata || + relativePath.endsWith(IgnoreCodePushMetadata) || + security.isHashIgnored(relativePath) + ); }; security.calcAllFileSha256 = function (directoryPath) { - return new Promise((resolve, reject) => { - var recursive = require("recursive-readdir"); - var path = require("path"); - var slash = require("slash"); - recursive(directoryPath, (error, files) => { - if (error) { - log.error(error); - reject(new AppError.AppError(error.message)); - } else { - // filter files that should be ignored - files = files.filter((file) => { - var relative = path.relative(directoryPath, file); - return !security.isHashIgnored(relative); + return new Promise((resolve, reject) => { + var recursive = require('recursive-readdir'); + var path = require('path'); + var slash = require('slash'); + recursive(directoryPath, (error, files) => { + if (error) { + log.error(error); + reject(new AppError.AppError(error.message)); + } else { + // filter files that should be ignored + files = files.filter((file) => { + var relative = path.relative(directoryPath, file); + return !security.isHashIgnored(relative); + }); + + if (files.length == 0) { + log.debug(`calcAllFileSha256 empty files in directoryPath:`, directoryPath); + reject(new AppError.AppError('empty files')); + } else { + security.sha256AllFiles(files).then((results) => { + var data = {}; + _.forIn(results, (value, key) => { + var relativePath = path.relative(directoryPath, key); + var matchresult = relativePath.match(/(\/|\\).*/); + if (matchresult) { + relativePath = path.join('CodePush', matchresult[0]); + } + relativePath = slash(relativePath); + data[relativePath] = value; + }); + log.debug(`calcAllFileSha256 files:`, data); + resolve(data); + }); + } + } }); - - if (files.length == 0) { - log.debug( - `calcAllFileSha256 empty files in directoryPath:`, - directoryPath - ); - reject(new AppError.AppError("empty files")); - } else { - security.sha256AllFiles(files).then((results) => { - var data = {}; - _.forIn(results, (value, key) => { - var relativePath = path.relative(directoryPath, key); - var matchresult = relativePath.match(/(\/|\\).*/); - if (matchresult) { - relativePath = path.join("CodePush", matchresult[0]); - } - relativePath = slash(relativePath); - data[relativePath] = value; - }); - log.debug(`calcAllFileSha256 files:`, data); - resolve(data); - }); - } - } }); - }); }; security.sortJsonToArr = function (json) { - var rs = []; - _.forIn(json, (value, key) => { - rs.push({ path: key, hash: value }); - }); - return _.sortBy(rs, (o) => o.path); + var rs = []; + _.forIn(json, (value, key) => { + rs.push({ path: key, hash: value }); + }); + return _.sortBy(rs, (o) => o.path); }; diff --git a/docker-compose.yml b/docker-compose.yml index 39dfd396..d97b720f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: "3.7" +version: '3.7' services: server: image: shmopen/code-push-server:latest @@ -6,18 +6,18 @@ services: - data-storage:/data/storage - data-tmp:/data/tmp environment: - DOWNLOAD_URL: "http://YOUR_MACHINE_IP:3000/download" - TOKEN_SECRET: "YOUR_JWT_TOKEN_SECRET" - RDS_HOST: "mysql" - RDS_USERNAME: "codepush" - RDS_PASSWORD: "123456" - RDS_DATABASE: "codepush" - STORAGE_DIR: "/data/storage" - DATA_DIR: "/data/tmp" - NODE_ENV: "production" - REDIS_HOST: "redis" + DOWNLOAD_URL: 'http://YOUR_MACHINE_IP:3000/download' + TOKEN_SECRET: 'YOUR_JWT_TOKEN_SECRET' + RDS_HOST: 'mysql' + RDS_USERNAME: 'codepush' + RDS_PASSWORD: '123456' + RDS_DATABASE: 'codepush' + STORAGE_DIR: '/data/storage' + DATA_DIR: '/data/tmp' + NODE_ENV: 'production' + REDIS_HOST: 'redis' ports: - - "3000:3000" + - '3000:3000' depends_on: - mysql - redis @@ -27,7 +27,7 @@ services: - data-mysql:/var/lib/mysql - ./sql/codepush-all-docker.sql:/docker-entrypoint-initdb.d/codepush-all.sql environment: - MYSQL_ALLOW_EMPTY_PASSWORD: "On" + MYSQL_ALLOW_EMPTY_PASSWORD: 'On' redis: image: redis:latest volumes: diff --git a/docs/react-native-code-push.md b/docs/react-native-code-push.md index 1a81a895..e9abc015 100644 --- a/docs/react-native-code-push.md +++ b/docs/react-native-code-push.md @@ -116,7 +116,7 @@ CodePush.sync({ 不要忘记头部引入 ```javascript -import CodePush from "react-native-code-push"; +import CodePush from 'react-native-code-push'; ``` ## 运行 CodePushDemo react-native 项目 diff --git a/models/apps.js b/models/apps.js index 00e0372f..94f36270 100644 --- a/models/apps.js +++ b/models/apps.js @@ -1,24 +1,28 @@ -"use strict"; +'use strict'; -module.exports = function(sequelize, DataTypes) { - var Apps = sequelize.define("Apps", { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - name: DataTypes.STRING, - uid: DataTypes.BIGINT(20), - os: DataTypes.INTEGER(3), - platform: DataTypes.INTEGER(3), - is_use_diff_text: DataTypes.INTEGER(3), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, { - tableName: 'apps', - underscored: true, - paranoid: true, - }); - return Apps; +module.exports = function (sequelize, DataTypes) { + var Apps = sequelize.define( + 'Apps', + { + id: { + type: DataTypes.INTEGER(10), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + name: DataTypes.STRING, + uid: DataTypes.BIGINT(20), + os: DataTypes.INTEGER(3), + platform: DataTypes.INTEGER(3), + is_use_diff_text: DataTypes.INTEGER(3), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'apps', + underscored: true, + paranoid: true, + }, + ); + return Apps; }; diff --git a/models/collaborators.js b/models/collaborators.js index c5f8d268..12bc7a8a 100644 --- a/models/collaborators.js +++ b/models/collaborators.js @@ -1,29 +1,35 @@ -"use strict"; +'use strict'; -module.exports = function(sequelize, DataTypes) { - var Collaborators = sequelize.define("Collaborators", { - id: { - type: DataTypes.BIGINT(20), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - appid: DataTypes.INTEGER(10), - uid: DataTypes.BIGINT(20), - roles : DataTypes.STRING, - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, { - tableName: 'collaborators', - underscored: true, - paranoid: true - }); - Collaborators.findByAppNameAndUid = function (uid, appName) { - var sql = "SELECT b.* FROM `apps` as a left join `collaborators` as b on (a.id = b.appid) where a.name= :appName and b.uid = :uid and a.`deleted_at` IS NULL and b.`deleted_at` IS NULL limit 0,1"; - return sequelize.query(sql, { replacements: { appName: appName, uid: uid }, model: Collaborators}) - .then(function(data) { - return data.pop(); - }); - }; - return Collaborators; +module.exports = function (sequelize, DataTypes) { + var Collaborators = sequelize.define( + 'Collaborators', + { + id: { + type: DataTypes.BIGINT(20), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + appid: DataTypes.INTEGER(10), + uid: DataTypes.BIGINT(20), + roles: DataTypes.STRING, + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'collaborators', + underscored: true, + paranoid: true, + }, + ); + Collaborators.findByAppNameAndUid = function (uid, appName) { + var sql = + 'SELECT b.* FROM `apps` as a left join `collaborators` as b on (a.id = b.appid) where a.name= :appName and b.uid = :uid and a.`deleted_at` IS NULL and b.`deleted_at` IS NULL limit 0,1'; + return sequelize + .query(sql, { replacements: { appName: appName, uid: uid }, model: Collaborators }) + .then(function (data) { + return data.pop(); + }); + }; + return Collaborators; }; diff --git a/models/deployments.js b/models/deployments.js index fade4b93..25b726a8 100644 --- a/models/deployments.js +++ b/models/deployments.js @@ -1,45 +1,50 @@ -"use strict"; +'use strict'; var _ = require('lodash'); var AppError = require('../core/app-error'); -module.exports = function(sequelize, DataTypes) { - var Deployments = sequelize.define("Deployments", { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - appid: DataTypes.INTEGER(10), - name: DataTypes.STRING, - description: DataTypes.STRING, - deployment_key: DataTypes.STRING, - last_deployment_version_id: DataTypes.INTEGER(10), - label_id: DataTypes.INTEGER(10), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, { - tableName: 'deployments', - underscored: true, - paranoid: true - }); +module.exports = function (sequelize, DataTypes) { + var Deployments = sequelize.define( + 'Deployments', + { + id: { + type: DataTypes.INTEGER(10), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + appid: DataTypes.INTEGER(10), + name: DataTypes.STRING, + description: DataTypes.STRING, + deployment_key: DataTypes.STRING, + last_deployment_version_id: DataTypes.INTEGER(10), + label_id: DataTypes.INTEGER(10), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'deployments', + underscored: true, + paranoid: true, + }, + ); - Deployments.generateLabelId = function(deploymentId) { - var self = this; - return sequelize.transaction(function (t) { - return self.findById(deploymentId, {transaction: t,lock: t.LOCK.UPDATE}).then(function (data) { - if (_.isEmpty(data)){ - throw new AppError.AppError("does not find deployment"); - } - data.label_id = data.label_id + 1; - return data.save({transaction: t}) - .then(function (data) { - return data.label_id; + Deployments.generateLabelId = function (deploymentId) { + var self = this; + return sequelize.transaction(function (t) { + return self + .findById(deploymentId, { transaction: t, lock: t.LOCK.UPDATE }) + .then(function (data) { + if (_.isEmpty(data)) { + throw new AppError.AppError('does not find deployment'); + } + data.label_id = data.label_id + 1; + return data.save({ transaction: t }).then(function (data) { + return data.label_id; + }); + }); }); - }); - }); - }; + }; - return Deployments; + return Deployments; }; diff --git a/models/deployments_history.js b/models/deployments_history.js index 18a1bcd4..c16453bb 100644 --- a/models/deployments_history.js +++ b/models/deployments_history.js @@ -1,21 +1,25 @@ -"use strict"; -module.exports = function(sequelize, DataTypes) { - var DeploymentsHistory = sequelize.define("DeploymentsHistory", { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - deployment_id: DataTypes.INTEGER(10), - package_id: DataTypes.INTEGER(10), - created_at: DataTypes.DATE - }, { - tableName: 'deployments_history', - underscored: true, - updatedAt: false, - paranoid: true - }); +'use strict'; +module.exports = function (sequelize, DataTypes) { + var DeploymentsHistory = sequelize.define( + 'DeploymentsHistory', + { + id: { + type: DataTypes.INTEGER(10), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + deployment_id: DataTypes.INTEGER(10), + package_id: DataTypes.INTEGER(10), + created_at: DataTypes.DATE, + }, + { + tableName: 'deployments_history', + underscored: true, + updatedAt: false, + paranoid: true, + }, + ); - return DeploymentsHistory; + return DeploymentsHistory; }; diff --git a/models/deployments_versions.js b/models/deployments_versions.js index 41105ec8..74fa02e9 100644 --- a/models/deployments_versions.js +++ b/models/deployments_versions.js @@ -1,25 +1,29 @@ -"use strict"; +'use strict'; -module.exports = function(sequelize, DataTypes) { - var DeploymentsVersions = sequelize.define("DeploymentsVersions", { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - deployment_id: DataTypes.INTEGER(10), - app_version: DataTypes.STRING, - current_package_id: DataTypes.INTEGER(10), - min_version: DataTypes.BIGINT(20), - max_version: DataTypes.BIGINT(20), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, { - tableName: 'deployments_versions', - underscored: true, - paranoid: true - }); +module.exports = function (sequelize, DataTypes) { + var DeploymentsVersions = sequelize.define( + 'DeploymentsVersions', + { + id: { + type: DataTypes.INTEGER(10), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + deployment_id: DataTypes.INTEGER(10), + app_version: DataTypes.STRING, + current_package_id: DataTypes.INTEGER(10), + min_version: DataTypes.BIGINT(20), + max_version: DataTypes.BIGINT(20), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'deployments_versions', + underscored: true, + paranoid: true, + }, + ); - return DeploymentsVersions; + return DeploymentsVersions; }; diff --git a/models/index.js b/models/index.js index aa789b5d..42375bf7 100644 --- a/models/index.js +++ b/models/index.js @@ -1,29 +1,28 @@ 'use strict'; -var fs = require('fs'); -var path = require('path'); +var fs = require('fs'); +var path = require('path'); var Sequelize = require('sequelize'); -var basename = path.basename(module.filename); -var _ = require('lodash'); -var config = _.get(require(__dirname + '/../core/config'), 'db', {}); -var db = {}; +var basename = path.basename(module.filename); +var _ = require('lodash'); +var config = _.get(require(__dirname + '/../core/config'), 'db', {}); +var db = {}; var sequelize = new Sequelize(config.database, config.username, config.password, config); -fs - .readdirSync(__dirname) - .filter(function(file) { - return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); - }) - .forEach(function(file) { - var model = sequelize['import'](path.join(__dirname, file)); - db[model.name] = model; - }); +fs.readdirSync(__dirname) + .filter(function (file) { + return file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js'; + }) + .forEach(function (file) { + var model = sequelize['import'](path.join(__dirname, file)); + db[model.name] = model; + }); -Object.keys(db).forEach(function(modelName) { - if (db[modelName].associate) { - db[modelName].associate(db); - } +Object.keys(db).forEach(function (modelName) { + if (db[modelName].associate) { + db[modelName].associate(db); + } }); db.sequelize = sequelize; diff --git a/models/log_report_deploy.js b/models/log_report_deploy.js index f8c39d5e..e124eb5a 100644 --- a/models/log_report_deploy.js +++ b/models/log_report_deploy.js @@ -1,24 +1,28 @@ -"use strict"; +'use strict'; -module.exports = function(sequelize, DataTypes) { - var LogReportDeploy = sequelize.define("LogReportDeploy", { - id: { - type: DataTypes.BIGINT(20), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - status: DataTypes.INTEGER(3), - package_id : DataTypes.INTEGER(10), - client_unique_id : DataTypes.STRING, - previous_label : DataTypes.STRING, - previous_deployment_key : DataTypes.STRING, - created_at: DataTypes.DATE, - }, { - tableName: 'log_report_deploy', - underscored: true, - updatedAt: false, - paranoid: true - }); - return LogReportDeploy; +module.exports = function (sequelize, DataTypes) { + var LogReportDeploy = sequelize.define( + 'LogReportDeploy', + { + id: { + type: DataTypes.BIGINT(20), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + status: DataTypes.INTEGER(3), + package_id: DataTypes.INTEGER(10), + client_unique_id: DataTypes.STRING, + previous_label: DataTypes.STRING, + previous_deployment_key: DataTypes.STRING, + created_at: DataTypes.DATE, + }, + { + tableName: 'log_report_deploy', + underscored: true, + updatedAt: false, + paranoid: true, + }, + ); + return LogReportDeploy; }; diff --git a/models/log_report_download.js b/models/log_report_download.js index 62966cf9..39a61198 100644 --- a/models/log_report_download.js +++ b/models/log_report_download.js @@ -1,21 +1,25 @@ -"use strict"; +'use strict'; -module.exports = function(sequelize, DataTypes) { - var LogReportDownload = sequelize.define("LogReportDownload", { - id: { - type: DataTypes.BIGINT(20), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - package_id : DataTypes.INTEGER(10), - client_unique_id : DataTypes.STRING, - created_at: DataTypes.DATE, - }, { - tableName: 'log_report_download', - underscored: true, - updatedAt: false, - paranoid: true - }); - return LogReportDownload; +module.exports = function (sequelize, DataTypes) { + var LogReportDownload = sequelize.define( + 'LogReportDownload', + { + id: { + type: DataTypes.BIGINT(20), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + package_id: DataTypes.INTEGER(10), + client_unique_id: DataTypes.STRING, + created_at: DataTypes.DATE, + }, + { + tableName: 'log_report_download', + underscored: true, + updatedAt: false, + paranoid: true, + }, + ); + return LogReportDownload; }; diff --git a/models/packages.js b/models/packages.js index 989eb32a..677f8eda 100644 --- a/models/packages.js +++ b/models/packages.js @@ -1,35 +1,39 @@ -"use strict"; +'use strict'; -module.exports = function(sequelize, DataTypes) { - var Packages = sequelize.define("Packages", { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - deployment_version_id: DataTypes.INTEGER(10), - deployment_id: DataTypes.INTEGER(10), - description: DataTypes.STRING, - package_hash: DataTypes.STRING, - blob_url: DataTypes.STRING, - size: DataTypes.INTEGER(10), - manifest_blob_url: DataTypes.STRING, - release_method: DataTypes.STRING, - label: DataTypes.STRING, - original_label: DataTypes.STRING, - original_deployment: DataTypes.STRING, - released_by: DataTypes.STRING, - is_mandatory: DataTypes.INTEGER(3), - is_disabled: DataTypes.INTEGER(3), - rollout: DataTypes.INTEGER(3), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, { - tableName: 'packages', - underscored: true, - paranoid: true - }); +module.exports = function (sequelize, DataTypes) { + var Packages = sequelize.define( + 'Packages', + { + id: { + type: DataTypes.INTEGER(10), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + deployment_version_id: DataTypes.INTEGER(10), + deployment_id: DataTypes.INTEGER(10), + description: DataTypes.STRING, + package_hash: DataTypes.STRING, + blob_url: DataTypes.STRING, + size: DataTypes.INTEGER(10), + manifest_blob_url: DataTypes.STRING, + release_method: DataTypes.STRING, + label: DataTypes.STRING, + original_label: DataTypes.STRING, + original_deployment: DataTypes.STRING, + released_by: DataTypes.STRING, + is_mandatory: DataTypes.INTEGER(3), + is_disabled: DataTypes.INTEGER(3), + rollout: DataTypes.INTEGER(3), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'packages', + underscored: true, + paranoid: true, + }, + ); - return Packages; + return Packages; }; diff --git a/models/packages_diff.js b/models/packages_diff.js index 869a320b..76a57bcf 100644 --- a/models/packages_diff.js +++ b/models/packages_diff.js @@ -1,24 +1,28 @@ -"use strict"; +'use strict'; -module.exports = function(sequelize, DataTypes) { - var PackagesDiff = sequelize.define("PackagesDiff", { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - package_id: DataTypes.INTEGER(10), - diff_against_package_hash: DataTypes.STRING, - diff_blob_url: DataTypes.STRING, - diff_size: DataTypes.INTEGER(10), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, { - tableName: 'packages_diff', - underscored: true, - paranoid: true - }); +module.exports = function (sequelize, DataTypes) { + var PackagesDiff = sequelize.define( + 'PackagesDiff', + { + id: { + type: DataTypes.INTEGER(10), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + package_id: DataTypes.INTEGER(10), + diff_against_package_hash: DataTypes.STRING, + diff_blob_url: DataTypes.STRING, + diff_size: DataTypes.INTEGER(10), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'packages_diff', + underscored: true, + paranoid: true, + }, + ); - return PackagesDiff; + return PackagesDiff; }; diff --git a/models/packages_metrics.js b/models/packages_metrics.js index d95bce92..561614cf 100644 --- a/models/packages_metrics.js +++ b/models/packages_metrics.js @@ -1,26 +1,30 @@ -"use strict"; +'use strict'; var _ = require('lodash'); -module.exports = function(sequelize, DataTypes) { - var PackagesMetrics = sequelize.define("PackagesMetrics", { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - package_id: DataTypes.INTEGER(10), - active: DataTypes.INTEGER(10), - downloaded: DataTypes.INTEGER(10), - failed: DataTypes.INTEGER(10), - installed: DataTypes.INTEGER(10), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, { - tableName: 'packages_metrics', - underscored: true, - paranoid: true - }); - return PackagesMetrics; +module.exports = function (sequelize, DataTypes) { + var PackagesMetrics = sequelize.define( + 'PackagesMetrics', + { + id: { + type: DataTypes.INTEGER(10), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + package_id: DataTypes.INTEGER(10), + active: DataTypes.INTEGER(10), + downloaded: DataTypes.INTEGER(10), + failed: DataTypes.INTEGER(10), + installed: DataTypes.INTEGER(10), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'packages_metrics', + underscored: true, + paranoid: true, + }, + ); + return PackagesMetrics; }; diff --git a/models/user_tokens.js b/models/user_tokens.js index e3766670..81e38bbb 100644 --- a/models/user_tokens.js +++ b/models/user_tokens.js @@ -1,27 +1,31 @@ -"use strict"; +'use strict'; -module.exports = function(sequelize, DataTypes) { - var UserTokens = sequelize.define("UserTokens", { - id:{ - type: DataTypes.BIGINT(20), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - uid: DataTypes.BIGINT(20), - name: DataTypes.STRING, - tokens: DataTypes.STRING, - description: DataTypes.STRING, - is_session: DataTypes.INTEGER(3), - created_by: DataTypes.STRING, - created_at: DataTypes.DATE, - expires_at : DataTypes.DATE - }, { - updatedAt: false, - tableName: 'user_tokens', - underscored: true, - paranoid: true - }); +module.exports = function (sequelize, DataTypes) { + var UserTokens = sequelize.define( + 'UserTokens', + { + id: { + type: DataTypes.BIGINT(20), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + uid: DataTypes.BIGINT(20), + name: DataTypes.STRING, + tokens: DataTypes.STRING, + description: DataTypes.STRING, + is_session: DataTypes.INTEGER(3), + created_by: DataTypes.STRING, + created_at: DataTypes.DATE, + expires_at: DataTypes.DATE, + }, + { + updatedAt: false, + tableName: 'user_tokens', + underscored: true, + paranoid: true, + }, + ); - return UserTokens; + return UserTokens; }; diff --git a/models/users.js b/models/users.js index 6e253f2f..0ecfc3bf 100644 --- a/models/users.js +++ b/models/users.js @@ -1,24 +1,28 @@ -"use strict"; +'use strict'; -module.exports = function(sequelize, DataTypes) { - var Users = sequelize.define("Users", { - id: { - type: DataTypes.BIGINT(20), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - username: DataTypes.STRING, - password: DataTypes.STRING, - email: DataTypes.STRING, - identical: DataTypes.STRING, - ack_code: DataTypes.STRING, - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, { - tableName: 'users', - underscored: true - }); +module.exports = function (sequelize, DataTypes) { + var Users = sequelize.define( + 'Users', + { + id: { + type: DataTypes.BIGINT(20), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + username: DataTypes.STRING, + password: DataTypes.STRING, + email: DataTypes.STRING, + identical: DataTypes.STRING, + ack_code: DataTypes.STRING, + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'users', + underscored: true, + }, + ); - return Users; + return Users; }; diff --git a/models/versions.js b/models/versions.js index 69279d1d..2c5d677e 100644 --- a/models/versions.js +++ b/models/versions.js @@ -1,20 +1,24 @@ -"use strict"; +'use strict'; -module.exports = function(sequelize, DataTypes) { - var Versions = sequelize.define("Versions", { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - type: DataTypes.INTEGER, - version: DataTypes.STRING - }, { - tableName: 'versions', - updatedAt: false, - createdAt: false - }); +module.exports = function (sequelize, DataTypes) { + var Versions = sequelize.define( + 'Versions', + { + id: { + type: DataTypes.INTEGER(10), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + type: DataTypes.INTEGER, + version: DataTypes.STRING, + }, + { + tableName: 'versions', + updatedAt: false, + createdAt: false, + }, + ); - return Versions; + return Versions; }; diff --git a/package-lock.json b/package-lock.json index 2a157757..15c12e8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,63 @@ "@babel/highlight": "^7.14.5" } }, + "@babel/generator": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, "@babel/helper-validator-identifier": { "version": "7.14.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", @@ -30,12 +87,247 @@ "js-tokens": "^4.0.0" } }, + "@babel/parser": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", + "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", + "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + } + } + }, + "@babel/runtime-corejs3": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.3.tgz", + "integrity": "sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==", + "dev": true, + "requires": { + "core-js-pure": "^3.16.0", + "regenerator-runtime": "^0.13.4" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + } + } + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, "@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -90,6 +382,30 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, + "@shm-open/eslint-config-bundle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.4.0.tgz", + "integrity": "sha512-9ndIW4GdwbfB//vZPW7LORW/H7a8nVRGqE3UYXm/r91nfB0Jv+6TJ9Mt9xG9yg/2KYK8jO8h9Apsox/ugm+WXw==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "4.29.0", + "@typescript-eslint/parser": "4.29.0", + "babel-eslint": "10.1.0", + "eslint": "7.32.0", + "eslint-config-airbnb-base": "14.2.1", + "eslint-config-prettier": "8.3.0", + "eslint-import-resolver-typescript": "2.4.0", + "eslint-plugin-deprecation": "1.2.1", + "eslint-plugin-import": "2.23.4", + "eslint-plugin-jsx-a11y": "6.4.1", + "eslint-plugin-prettier": "3.4.0", + "eslint-plugin-react": "7.24.0", + "eslint-plugin-react-hooks": "4.2.0", + "eslint-plugin-react-native": "3.11.0", + "eslint-plugin-taro": "3.3.2", + "prettier": "2.3.2" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -113,6 +429,12 @@ "resolved": "http://registry.npm.taobao.org/@types/geojson/download/@types/geojson-1.0.6.tgz", "integrity": "sha1-PgKXJyjGkkjCrwjWCkjLuGgP/98=" }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", @@ -135,72 +457,259 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "@typescript-eslint/eslint-plugin": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.0.tgz", + "integrity": "sha512-eiREtqWRZ8aVJcNru7cT/AMVnYd9a2UHsfZT8MR1dW3UUEg6jDv9EQ9Cq4CUPZesyQ58YUpoAADGv71jY8RwgA==", "dev": true, "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "@typescript-eslint/experimental-utils": "4.29.0", + "@typescript-eslint/scope-manager": "4.29.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "dependencies": { - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { - "mime-db": "1.49.0" + "yallist": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + "@typescript-eslint/experimental-utils": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.0.tgz", + "integrity": "sha512-FpNVKykfeaIxlArLUP/yQfv/5/3rhl1ov6RWgud4OgbqWLkEq7lqgQU9iiavZRzpzCRQV4XddyFz3wFXdkiX9w==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.29.0", + "@typescript-eslint/types": "4.29.0", + "@typescript-eslint/typescript-estree": "4.29.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "@typescript-eslint/parser": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.0.tgz", + "integrity": "sha512-+92YRNHFdXgq+GhWQPT2bmjX09X7EH36JfgN2/4wmhtwV/HPxozpCNst8jrWcngLtEVd/4zAwA6BKojAlf+YqA==", + "dev": true, "requires": { - "acorn": "^4.0.4" + "@typescript-eslint/scope-manager": "4.29.0", + "@typescript-eslint/types": "4.29.0", + "@typescript-eslint/typescript-estree": "4.29.0", + "debug": "^4.3.1" }, "dependencies": { - "acorn": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.0.tgz", + "integrity": "sha512-HPq7XAaDMM3DpmuijxLV9Io8/6pQnliiXMQUcAdjpJJSR+fdmbD/zHCd7hMkjJn04UQtCQBtshgxClzg6NIS2w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.0", + "@typescript-eslint/visitor-keys": "4.29.0" + } + }, + "@typescript-eslint/types": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.0.tgz", + "integrity": "sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz", + "integrity": "sha512-8ZpNHDIOyqzzgZrQW9+xQ4k5hM62Xy2R4RPO3DQxMc5Rq5QkCdSpk/drka+DL9w6sXNzV5nrdlBmf8+x495QXQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.0", + "@typescript-eslint/visitor-keys": "4.29.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz", + "integrity": "sha512-LoaofO1C/jAJYs0uEpYMXfHboGXzOJeV118X4OsZu9f7rG7Pr9B3+4HTU8+err81rADa4xfQmAxnRnPAI2jp+Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "dependencies": { + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + } + } + }, + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + }, + "acorn-globals": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "requires": { + "acorn": "^4.0.4" + }, + "dependencies": { + "acorn": { "version": "4.0.13", "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" } } }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, "add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", @@ -378,6 +887,16 @@ "sprintf-js": "~1.0.2" } }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -389,6 +908,48 @@ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -418,6 +979,18 @@ "tslib": "^2.0.1" } }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, "async": { "version": "1.5.2", "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", @@ -486,6 +1059,12 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, + "axe-core": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.2.tgz", + "integrity": "sha512-5LMaDRWm8ZFPAEdzTYmgjjEdj1YnQcpfrVajO/sn/LhbpGp0Y0H64c2hLZI1gRMxfA+w1S71Uc/nHaOXgcCvGg==", + "dev": true + }, "axios": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", @@ -502,6 +1081,34 @@ } } }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "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==", + "dev": true + } + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -713,6 +1320,12 @@ "get-intrinsic": "^1.0.2" } }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -968,6 +1581,12 @@ } } }, + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true + }, "constantinople": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", @@ -1315,6 +1934,12 @@ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" }, + "core-js-pure": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.2.tgz", + "integrity": "sha512-oxKe64UH049mJqrKkynWp6Vu0Rlm/BTXO/bJZuN2mmR3RtOFNepLlSWDd1eo16PzHpQAoNG97rLU1V/YxesJjw==", + "dev": true + }, "core-util-is": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", @@ -1472,11 +2097,39 @@ "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz", "integrity": "sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo=" }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "crypt": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" }, + "damerau-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", + "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", + "dev": true + }, "dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -1564,6 +2217,15 @@ "os-name": "~1.0.3" } }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "degenerator": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", @@ -1642,6 +2304,32 @@ } } }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -1707,64 +2395,862 @@ "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "http://registry.npm.taobao.org/escodegen/download/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "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==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "eslint-import-resolver-typescript": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz", + "integrity": "sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", + "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "eslint-plugin-deprecation": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.2.1.tgz", + "integrity": "sha512-8KFAWPO3AvF0szxIh1ivRtHotd1fzxVOuNR3NI8dfCsQKgcxu9fAgEY+eTKvCRLAwwI8kaDDfImMt+498+EgRw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^2.19.2 || ^3.0.0", + "tslib": "^1.10.0", + "tsutils": "^3.0.0" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "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==", + "dev": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.23.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", + "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.1", + "find-up": "^2.0.0", + "has": "^1.0.3", + "is-core-module": "^2.4.0", + "minimatch": "^3.0.4", + "object.values": "^1.1.3", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", + "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.11.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.0.2", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", + "has": "^1.0.3", + "jsx-ast-utils": "^3.1.0", + "language-tags": "^1.0.5" + }, + "dependencies": { + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.5" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", + "dev": true + }, + "eslint-plugin-react-native": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.11.0.tgz", + "integrity": "sha512-7F3OTwrtQPfPFd+VygqKA2VZ0f2fz0M4gJmry/TRE18JBb94/OtMxwbL7Oqwu7FGyrdeIOWnXQbBAveMcSTZIA==", + "dev": true, "requires": { - "once": "^1.4.0" + "@babel/traverse": "^7.7.4", + "eslint-plugin-react-native-globals": "^0.1.1" } }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "eslint-plugin-react-native-globals": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", + "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", + "dev": true }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "eslint-plugin-taro": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.2.tgz", + "integrity": "sha512-1lkktePhjOuI0XM8Rc+RmV3YN12cUx1c8orE14DBMfljJgXU0oSiZY7YQbdGFbVFatiTP5XhSkUkH235ResgaQ==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "has": "^1.0.1" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, - "escodegen": { - "version": "1.8.1", - "resolved": "http://registry.npm.taobao.org/escodegen/download/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, "dependencies": { - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "eslint-visitor-keys": { + "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==", + "dev": true } } }, @@ -1773,6 +3259,40 @@ "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, "estraverse": { "version": "1.9.3", "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-1.9.3.tgz", @@ -1936,6 +3456,25 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", @@ -1952,6 +3491,15 @@ "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==", "dev": true }, + "fastq": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", + "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -1974,6 +3522,15 @@ "escape-string-regexp": "^1.0.5" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "file-uri-to-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", @@ -2036,6 +3593,24 @@ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + } + } + }, "flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", @@ -2165,6 +3740,12 @@ "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "generate-function": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", @@ -2501,6 +4082,26 @@ "is-glob": "^4.0.1" } }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", @@ -2552,6 +4153,12 @@ "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", @@ -2773,6 +4380,28 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -2805,6 +4434,17 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -2821,6 +4461,15 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2835,11 +4484,27 @@ "resolved": "http://registry.npm.taobao.org/is-bluebird/download/is-bluebird-1.0.2.tgz", "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, "is-core-module": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", @@ -2848,6 +4513,15 @@ "has": "^1.0.3" } }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-expression": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", @@ -2889,12 +4563,27 @@ "is-extglob": "^2.1.1" } }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -2925,6 +4614,24 @@ "has-tostringtag": "^1.0.0" } }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", @@ -3049,6 +4756,12 @@ "resolved": "http://registry.npm.taobao.org/jschardet/download/jschardet-1.6.0.tgz", "integrity": "sha1-x9GnHtz/KDnbL57DD8XV69PBpng=" }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -3076,11 +4789,34 @@ "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } + } + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -3144,6 +4880,16 @@ "promise": "^7.0.1" } }, + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + } + }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -3171,6 +4917,21 @@ "is-buffer": "^1.1.5" } }, + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, "lazy-cache": { "version": "1.0.4", "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", @@ -3235,6 +4996,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -3271,11 +5038,23 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -3374,6 +5153,15 @@ "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "lru-cache": { "version": "4.1.3", "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.3.tgz", @@ -3545,11 +5333,27 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, "mime": { "version": "1.6.0", "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", @@ -3888,6 +5692,12 @@ "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "dev": true }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -4001,11 +5811,63 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } }, "on-finished": { "version": "2.3.0", @@ -4155,6 +6017,15 @@ "netmask": "^2.0.1" } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -4183,6 +6054,12 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -4240,6 +6117,60 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, "pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -4258,11 +6189,32 @@ "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, + "prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "process-nextick-args": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz", "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -4271,6 +6223,17 @@ "asap": "~2.0.3" } }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, "protobufjs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", @@ -4533,6 +6496,12 @@ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -4579,6 +6548,12 @@ } } }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -4745,6 +6720,22 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "repeat-string": { "version": "1.6.1", "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", @@ -4826,6 +6817,12 @@ "path-parse": "^1.0.6" } }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, "retry-as-promised": { "version": "2.3.2", "resolved": "http://registry.npm.taobao.org/retry-as-promised/download/retry-as-promised-2.3.2.tgz", @@ -4845,6 +6842,12 @@ } } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", @@ -4858,6 +6861,40 @@ "align-text": "^0.1.1" } }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", @@ -5021,6 +7058,21 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, "shimmer": { "version": "1.2.0", "resolved": "http://registry.npm.taobao.org/shimmer/download/shimmer-1.2.0.tgz", @@ -5096,6 +7148,43 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -5435,6 +7524,42 @@ "strip-ansi": "^6.0.0" } }, + "string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "string_decoder": { "version": "1.0.3", "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", @@ -5624,6 +7749,40 @@ "has-flag": "^1.0.0" } }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, "terraformer": { "version": "1.0.8", "resolved": "http://registry.npm.taobao.org/terraformer/download/terraformer-1.0.8.tgz", @@ -5646,6 +7805,12 @@ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -5761,11 +7926,47 @@ "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", "dev": true }, + "tsconfig-paths": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", + "integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==", + "dev": true, + "requires": { + "json5": "^2.2.0", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } + } + }, "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", @@ -5877,6 +8078,18 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "unescape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", @@ -6007,6 +8220,12 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -6051,6 +8270,19 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -6123,6 +8355,12 @@ "@types/node": "*" } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", diff --git a/package.json b/package.json index 5b0c1bea..bb07d869 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "yazl": "2.4.3" }, "devDependencies": { + "@shm-open/eslint-config-bundle": "1.4.0", "istanbul": "0.4.5", "mocha": "9.0.3", "should": "13.2.3", diff --git a/renovate.json b/renovate.json index f45d8f11..4f39080e 100644 --- a/renovate.json +++ b/renovate.json @@ -1,5 +1,3 @@ { - "extends": [ - "config:base" - ] + "extends": ["config:base"] } diff --git a/routes/accessKeys.js b/routes/accessKeys.js index 34ddd81c..259bf2e6 100644 --- a/routes/accessKeys.js +++ b/routes/accessKeys.js @@ -1,94 +1,92 @@ -var express = require("express"); +var express = require('express'); var router = express.Router(); -var _ = require("lodash"); -var security = require("../core/utils/security"); -var models = require("../models"); -var middleware = require("../core/middleware"); -var accountManager = require("../core/services/account-manager")(); -var AppError = require("../core/app-error"); -var log4js = require("log4js"); -var log = log4js.getLogger("cps:accessKey"); +var _ = require('lodash'); +var security = require('../core/utils/security'); +var models = require('../models'); +var middleware = require('../core/middleware'); +var accountManager = require('../core/services/account-manager')(); +var AppError = require('../core/app-error'); +var log4js = require('log4js'); +var log = log4js.getLogger('cps:accessKey'); -router.get("/", middleware.checkToken, (req, res, next) => { - log.debug("request get acceesKeys"); - var uid = req.users.id; - accountManager - .getAllAccessKeyByUid(uid) - .then((accessKeys) => { - log.debug("acceesKeys:", accessKeys); - res.send({ accessKeys: accessKeys }); - }) - .catch((e) => { - next(e); - }); +router.get('/', middleware.checkToken, (req, res, next) => { + log.debug('request get acceesKeys'); + var uid = req.users.id; + accountManager + .getAllAccessKeyByUid(uid) + .then((accessKeys) => { + log.debug('acceesKeys:', accessKeys); + res.send({ accessKeys: accessKeys }); + }) + .catch((e) => { + next(e); + }); }); -router.post("/", middleware.checkToken, (req, res, next) => { - var uid = req.users.id; - var identical = req.users.identical; - var createdBy = _.trim(req.body.createdBy); - var friendlyName = _.trim(req.body.friendlyName); - var ttl = parseInt(req.body.ttl); - var description = _.trim(req.body.description); - log.debug(req.body); - var newAccessKey = security.randToken(28).concat(identical); - return accountManager - .isExsitAccessKeyName(uid, friendlyName) - .then((data) => { - if (!_.isEmpty(data)) { - throw new AppError.AppError( - `The access key "${friendlyName}" already exists.` - ); - } - }) - .then(() => { - return accountManager.createAccessKey( - uid, - newAccessKey, - ttl, - friendlyName, - createdBy, - description - ); - }) - .then((newToken) => { - var moment = require("moment"); - var info = { - name: newToken.tokens, - createdTime: parseInt(moment(newToken.created_at).format("x")), - createdBy: newToken.created_by, - expires: parseInt(moment(newToken.expires_at).format("x")), - description: newToken.description, - friendlyName: newToken.name, - }; - log.debug(info); - res.send({ accessKey: info }); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - log.debug(e); - res.status(406).send(e.message); - } else { - next(e); - } - }); +router.post('/', middleware.checkToken, (req, res, next) => { + var uid = req.users.id; + var identical = req.users.identical; + var createdBy = _.trim(req.body.createdBy); + var friendlyName = _.trim(req.body.friendlyName); + var ttl = parseInt(req.body.ttl); + var description = _.trim(req.body.description); + log.debug(req.body); + var newAccessKey = security.randToken(28).concat(identical); + return accountManager + .isExsitAccessKeyName(uid, friendlyName) + .then((data) => { + if (!_.isEmpty(data)) { + throw new AppError.AppError(`The access key "${friendlyName}" already exists.`); + } + }) + .then(() => { + return accountManager.createAccessKey( + uid, + newAccessKey, + ttl, + friendlyName, + createdBy, + description, + ); + }) + .then((newToken) => { + var moment = require('moment'); + var info = { + name: newToken.tokens, + createdTime: parseInt(moment(newToken.created_at).format('x')), + createdBy: newToken.created_by, + expires: parseInt(moment(newToken.expires_at).format('x')), + description: newToken.description, + friendlyName: newToken.name, + }; + log.debug(info); + res.send({ accessKey: info }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + log.debug(e); + res.status(406).send(e.message); + } else { + next(e); + } + }); }); -router.delete("/:name", middleware.checkToken, (req, res, next) => { - var name = _.trim(decodeURI(req.params.name)); - var uid = req.users.id; - return models.UserTokens.destroy({ where: { name: name, uid: uid } }) - .then((rowNum) => { - log.debug("delete acceesKey:", name); - res.send({ friendlyName: name }); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - log.debug(e); - res.status(406).send(e.message); - } else { - next(e); - } - }); +router.delete('/:name', middleware.checkToken, (req, res, next) => { + var name = _.trim(decodeURI(req.params.name)); + var uid = req.users.id; + return models.UserTokens.destroy({ where: { name: name, uid: uid } }) + .then((rowNum) => { + log.debug('delete acceesKey:', name); + res.send({ friendlyName: name }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + log.debug(e); + res.status(406).send(e.message); + } else { + next(e); + } + }); }); module.exports = router; diff --git a/routes/account.js b/routes/account.js index edae56f1..1ad43c4e 100644 --- a/routes/account.js +++ b/routes/account.js @@ -5,16 +5,16 @@ var _ = require('lodash'); var security = require('../core/utils/security'); var middleware = require('../core/middleware'); var log4js = require('log4js'); -var log = log4js.getLogger("cps:account"); +var log = log4js.getLogger('cps:account'); router.get('/', middleware.checkToken, (req, res) => { - var userInfo = { - email:req.users.email, - linkedProviders: [], - name:req.users.username, - }; - log.debug(userInfo); - res.send({account:userInfo}); + var userInfo = { + email: req.users.email, + linkedProviders: [], + name: req.users.username, + }; + log.debug(userInfo); + res.send({ account: userInfo }); }); module.exports = router; diff --git a/routes/apps.js b/routes/apps.js index 8fd7d832..8386bc04 100644 --- a/routes/apps.js +++ b/routes/apps.js @@ -11,717 +11,794 @@ var AppManager = require('../core/services/app-manager'); var PackageManager = require('../core/services/package-manager'); var AppError = require('../core/app-error'); var common = require('../core/utils/common'); -var config = require('../core/config'); +var config = require('../core/config'); const REGEX = /^(\w+)(-android|-ios)$/; const REGEX_ANDROID = /^(\w+)(-android)$/; const REGEX_IOS = /^(\w+)(-ios)$/; var log4js = require('log4js'); -var log = log4js.getLogger("cps:apps"); +var log = log4js.getLogger('cps:apps'); router.get('/', middleware.checkToken, (req, res, next) => { - var uid = req.users.id; - var appManager = new AppManager(); - appManager.listApps(uid) - .then((data) => { - res.send({apps: data}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.get('/:appName/deployments', - middleware.checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deployments = new Deployments(); - accountManager.collaboratorCan(uid, appName) - .then((col) => { - return deployments.listDeloyments(col.appid); - }) - .then((data) => { - res.send({deployments: data}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.get('/:appName/deployments/:deploymentName', - middleware.checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var deployments = new Deployments(); - accountManager.collaboratorCan(uid, appName) - .then((col) => { - return deployments.findDeloymentByName(deploymentName, col.appid) - }) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError.AppError("does not find the deployment"); - } - res.send({deployment: deployments.listDeloyment(deploymentInfo)}); - return true; - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.post('/:appName/deployments', - middleware.checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var name = req.body.name; - var deployments = new Deployments(); - accountManager.ownerCan(uid, appName) - .then((col) => { - return deployments.addDeloyment(name, col.appid, uid); - }) - .then((data) => { - res.send({deployment: {name: data.name, key: data.deployment_key}}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); + var uid = req.users.id; + var appManager = new AppManager(); + appManager + .listApps(uid) + .then((data) => { + res.send({ apps: data }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); }); -router.get('/:appName/deployments/:deploymentName/metrics', - middleware.checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var deployments = new Deployments(); - var packageManager = new PackageManager(); - accountManager.collaboratorCan(uid, appName) - .then((col) => { - return deployments.findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError.AppError("does not find the deployment"); - } - return deploymentInfo; - }) - }) - .then((deploymentInfo) => { - return deployments.getAllPackageIdsByDeploymentsId(deploymentInfo.id); - }) - .then((packagesInfos) => { - return Promise.reduce(packagesInfos, (result, v) => { - return packageManager.getMetricsbyPackageId(v.get('id')) - .then((metrics) => { - if (metrics) { - result[v.get('label')] = { - active: metrics.get('active'), - downloaded: metrics.get('downloaded'), - failed: metrics.get('failed'), - installed: metrics.get('installed'), - }; - } - return result; - }); - }, {}); - }) - .then((rs) => { - res.send({"metrics": rs}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.send({"metrics": null}); - } else { - next(e); - } - }); +router.get('/:appName/deployments', middleware.checkToken, (req, res, next) => { + var uid = req.users.id; + var appName = _.trim(req.params.appName); + var deployments = new Deployments(); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deployments.listDeloyments(col.appid); + }) + .then((data) => { + res.send({ deployments: data }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); }); -router.get('/:appName/deployments/:deploymentName/history', - middleware.checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var deployments = new Deployments(); - accountManager.collaboratorCan(uid, appName) - .then((col) => { - return deployments.findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError.AppError("does not find the deployment"); - } - return deploymentInfo; - }); - }) - .then((deploymentInfo) => { - return deployments.getDeploymentHistory(deploymentInfo.id); - }) - .then((rs) => { - res.send({history: _.pullAll(rs, [null, false])}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); +router.get('/:appName/deployments/:deploymentName', middleware.checkToken, (req, res, next) => { + var uid = req.users.id; + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + var deployments = new Deployments(); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deployments.findDeloymentByName(deploymentName, col.appid); + }) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError.AppError('does not find the deployment'); + } + res.send({ deployment: deployments.listDeloyment(deploymentInfo) }); + return true; + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); }); -router.delete('/:appName/deployments/:deploymentName/history', - middleware.checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var deployments = new Deployments(); - accountManager.ownerCan(uid, appName) - .then((col) => { - return deployments.findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError.AppError("does not find the deployment"); - } - return deploymentInfo; - }); - }) - .then((deploymentInfo) => { - return deployments.deleteDeploymentHistory(deploymentInfo.id); - }) - .then((rs) => { - res.send("ok"); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); +router.post('/:appName/deployments', middleware.checkToken, (req, res, next) => { + var uid = req.users.id; + var appName = _.trim(req.params.appName); + var name = req.body.name; + var deployments = new Deployments(); + accountManager + .ownerCan(uid, appName) + .then((col) => { + return deployments.addDeloyment(name, col.appid, uid); + }) + .then((data) => { + res.send({ deployment: { name: data.name, key: data.deployment_key } }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); }); -router.patch('/:appName/deployments/:deploymentName', - middleware.checkToken, (req, res, next) => { - var name = req.body.name; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - var deployments = new Deployments(); - accountManager.ownerCan(uid, appName) - .then((col) => { - return deployments.renameDeloymentByName(deploymentName, col.appid, name); - }) - .then((data) => { - res.send({deployment: data}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); +router.get( + '/:appName/deployments/:deploymentName/metrics', + middleware.checkToken, + (req, res, next) => { + var uid = req.users.id; + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + var deployments = new Deployments(); + var packageManager = new PackageManager(); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deployments + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError.AppError('does not find the deployment'); + } + return deploymentInfo; + }); + }) + .then((deploymentInfo) => { + return deployments.getAllPackageIdsByDeploymentsId(deploymentInfo.id); + }) + .then((packagesInfos) => { + return Promise.reduce( + packagesInfos, + (result, v) => { + return packageManager.getMetricsbyPackageId(v.get('id')).then((metrics) => { + if (metrics) { + result[v.get('label')] = { + active: metrics.get('active'), + downloaded: metrics.get('downloaded'), + failed: metrics.get('failed'), + installed: metrics.get('installed'), + }; + } + return result; + }); + }, + {}, + ); + }) + .then((rs) => { + res.send({ metrics: rs }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.send({ metrics: null }); + } else { + next(e); + } + }); + }, +); -router.delete('/:appName/deployments/:deploymentName', - middleware.checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - var deployments = new Deployments(); - accountManager.ownerCan(uid, appName) - .then((col) => { - return deployments.deleteDeloymentByName(deploymentName, col.appid); - }) - .then((data) => { - res.send({deployment: data}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); +router.get( + '/:appName/deployments/:deploymentName/history', + middleware.checkToken, + (req, res, next) => { + var uid = req.users.id; + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + var deployments = new Deployments(); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deployments + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError.AppError('does not find the deployment'); + } + return deploymentInfo; + }); + }) + .then((deploymentInfo) => { + return deployments.getDeploymentHistory(deploymentInfo.id); + }) + .then((rs) => { + res.send({ history: _.pullAll(rs, [null, false]) }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); -router.post('/:appName/deployments/:deploymentName/release', - middleware.checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - var deployments = new Deployments(); - var packageManager = new PackageManager(); - accountManager.collaboratorCan(uid, appName) - .then((col) => { - log.debug(col); - return deployments.findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - log.debug(`does not find the deployment`); - throw new AppError.AppError("does not find the deployment"); - } - return packageManager.parseReqFile(req) - .then((data) => { - if (data.package.type != "application/zip") { - log.debug(`upload file type is invlidate`, data.package); - throw new AppError.AppError("upload file type is invalidate"); - } - log.debug('packageInfo:', data.packageInfo); - return packageManager.releasePackage(deploymentInfo.appid, deploymentInfo.id, data.packageInfo, data.package.path, uid) - .finally(() => { - common.deleteFolderSync(data.package.path); - }); - }) - .then((packages) => { - if (packages) { - Promise.delay(1000) - .then(() => { - packageManager.createDiffPackagesByLastNums(deploymentInfo.appid, packages, _.get(config, 'common.diffNums', 1)) +router.delete( + '/:appName/deployments/:deploymentName/history', + middleware.checkToken, + (req, res, next) => { + var uid = req.users.id; + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + var deployments = new Deployments(); + accountManager + .ownerCan(uid, appName) + .then((col) => { + return deployments + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError.AppError('does not find the deployment'); + } + return deploymentInfo; + }); + }) + .then((deploymentInfo) => { + return deployments.deleteDeploymentHistory(deploymentInfo.id); + }) + .then((rs) => { + res.send('ok'); + }) .catch((e) => { - log.error(e); + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } }); - }); - } - //clear cache if exists. - if (_.get(config, 'common.updateCheckCache', false) !== false) { - Promise.delay(2500) - .then(() => { - var ClientManager = require('../core/services/client-manager'); - var clientManager = new ClientManager(); - clientManager.clearUpdateCheckCache(deploymentInfo.deployment_key, '*', '*', '*'); - }); - } - return null; - }); - }); - }) - .then(() => { - res.send('{"msg": "succeed"}'); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); + }, +); -router.patch('/:appName/deployments/:deploymentName/release', - middleware.checkToken, (req, res, next) => { - log.debug('req.body', req.body); +router.patch('/:appName/deployments/:deploymentName', middleware.checkToken, (req, res, next) => { + var name = req.body.name; var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); var uid = req.users.id; var deployments = new Deployments(); - var packageManager = new PackageManager(); - var label = _.get(req, 'body.packageInfo.label'); - accountManager.collaboratorCan(uid, appName) - .then((col) => { - return deployments.findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError.AppError("does not find the deployment"); - } - if (label) { - return packageManager.findPackageInfoByDeploymentIdAndLabel(deploymentInfo.id, label) - .then((data)=>{ - return [deploymentInfo, data]; - }); - } else { - var deploymentVersionId = deploymentInfo.last_deployment_version_id; - return packageManager.findLatestPackageInfoByDeployVersion(deploymentVersionId) - .then((data)=>{ - return [deploymentInfo, data]; - });; - } - }) - .spread((deploymentInfo, packageInfo)=>{ - if (!packageInfo) { - throw new AppError.AppError("does not find the packageInfo"); - } - return packageManager.modifyReleasePackage(packageInfo.id, _.get(req, 'body.packageInfo')) - .then(()=>{ - //clear cache if exists. - if (_.get(config, 'common.updateCheckCache', false) !== false) { - Promise.delay(2500) - .then(() => { - var ClientManager = require('../core/services/client-manager'); - var clientManager = new ClientManager(); - clientManager.clearUpdateCheckCache(deploymentInfo.deployment_key, '*', '*', '*'); - }); - } + accountManager + .ownerCan(uid, appName) + .then((col) => { + return deployments.renameDeloymentByName(deploymentName, col.appid, name); + }) + .then((data) => { + res.send({ deployment: data }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } }); - }); - }).then((data) => { - res.send(""); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); }); - -router.post('/:appName/deployments/:sourceDeploymentName/promote/:destDeploymentName', - middleware.checkToken, (req, res, next) => { - log.debug('req.body:', req.body); - var appName = _.trim(req.params.appName); - var sourceDeploymentName = _.trim(req.params.sourceDeploymentName); - var destDeploymentName = _.trim(req.params.destDeploymentName); - var uid = req.users.id; - var packageManager = new PackageManager(); - var deployments = new Deployments(); - accountManager.collaboratorCan(uid, appName) - .then((col) => { - var appId = col.appid; - return Promise.all([ - deployments.findDeloymentByName(sourceDeploymentName, appId), - deployments.findDeloymentByName(destDeploymentName, appId) - ]) - .spread((sourceDeploymentInfo, destDeploymentInfo) => { - if (!sourceDeploymentInfo) { - throw new AppError.AppError(`${sourceDeploymentName} does not exist.`); - } - if (!destDeploymentInfo) { - throw new AppError.AppError(`${destDeploymentName} does not exist.`); - } - return [sourceDeploymentInfo, destDeploymentInfo]; - }) - .spread((sourceDeploymentInfo, destDeploymentInfo) => { - var params = _.get(req.body, 'packageInfo', {}); - _.set(params, 'promoteUid', uid); - return [packageManager.promotePackage(sourceDeploymentInfo, destDeploymentInfo, params),destDeploymentInfo]; - }) - .spread((packages, destDeploymentInfo) => { - if (packages) { - Promise.delay(1000) - .then(() => { - packageManager.createDiffPackagesByLastNums(destDeploymentInfo.appid, packages, _.get(config, 'common.diffNums', 1)) - .catch((e) => { - log.error(e); - }); - }); - } - //clear cache if exists. - if (_.get(config, 'common.updateCheckCache', false) !== false) { - Promise.delay(2500) - .then(() => { - var ClientManager = require('../core/services/client-manager'); - var clientManager = new ClientManager(); - clientManager.clearUpdateCheckCache(destDeploymentInfo.deployment_key, '*', '*', '*'); +router.delete('/:appName/deployments/:deploymentName', middleware.checkToken, (req, res, next) => { + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + var uid = req.users.id; + var deployments = new Deployments(); + accountManager + .ownerCan(uid, appName) + .then((col) => { + return deployments.deleteDeloymentByName(deploymentName, col.appid); + }) + .then((data) => { + res.send({ deployment: data }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } }); - } - return packages; - }) - }) - .then((packages) => { - res.send({package:packages}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); }); +router.post( + '/:appName/deployments/:deploymentName/release', + middleware.checkToken, + (req, res, next) => { + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + var uid = req.users.id; + var deployments = new Deployments(); + var packageManager = new PackageManager(); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + log.debug(col); + return deployments + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + log.debug(`does not find the deployment`); + throw new AppError.AppError('does not find the deployment'); + } + return packageManager + .parseReqFile(req) + .then((data) => { + if (data.package.type != 'application/zip') { + log.debug(`upload file type is invlidate`, data.package); + throw new AppError.AppError('upload file type is invalidate'); + } + log.debug('packageInfo:', data.packageInfo); + return packageManager + .releasePackage( + deploymentInfo.appid, + deploymentInfo.id, + data.packageInfo, + data.package.path, + uid, + ) + .finally(() => { + common.deleteFolderSync(data.package.path); + }); + }) + .then((packages) => { + if (packages) { + Promise.delay(1000).then(() => { + packageManager + .createDiffPackagesByLastNums( + deploymentInfo.appid, + packages, + _.get(config, 'common.diffNums', 1), + ) + .catch((e) => { + log.error(e); + }); + }); + } + //clear cache if exists. + if (_.get(config, 'common.updateCheckCache', false) !== false) { + Promise.delay(2500).then(() => { + var ClientManager = require('../core/services/client-manager'); + var clientManager = new ClientManager(); + clientManager.clearUpdateCheckCache( + deploymentInfo.deployment_key, + '*', + '*', + '*', + ); + }); + } + return null; + }); + }); + }) + .then(() => { + res.send('{"msg": "succeed"}'); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +router.patch( + '/:appName/deployments/:deploymentName/release', + middleware.checkToken, + (req, res, next) => { + log.debug('req.body', req.body); + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + var uid = req.users.id; + var deployments = new Deployments(); + var packageManager = new PackageManager(); + var label = _.get(req, 'body.packageInfo.label'); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deployments + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError.AppError('does not find the deployment'); + } + if (label) { + return packageManager + .findPackageInfoByDeploymentIdAndLabel(deploymentInfo.id, label) + .then((data) => { + return [deploymentInfo, data]; + }); + } else { + var deploymentVersionId = deploymentInfo.last_deployment_version_id; + return packageManager + .findLatestPackageInfoByDeployVersion(deploymentVersionId) + .then((data) => { + return [deploymentInfo, data]; + }); + } + }) + .spread((deploymentInfo, packageInfo) => { + if (!packageInfo) { + throw new AppError.AppError('does not find the packageInfo'); + } + return packageManager + .modifyReleasePackage(packageInfo.id, _.get(req, 'body.packageInfo')) + .then(() => { + //clear cache if exists. + if (_.get(config, 'common.updateCheckCache', false) !== false) { + Promise.delay(2500).then(() => { + var ClientManager = require('../core/services/client-manager'); + var clientManager = new ClientManager(); + clientManager.clearUpdateCheckCache( + deploymentInfo.deployment_key, + '*', + '*', + '*', + ); + }); + } + }); + }); + }) + .then((data) => { + res.send(''); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +router.post( + '/:appName/deployments/:sourceDeploymentName/promote/:destDeploymentName', + middleware.checkToken, + (req, res, next) => { + log.debug('req.body:', req.body); + var appName = _.trim(req.params.appName); + var sourceDeploymentName = _.trim(req.params.sourceDeploymentName); + var destDeploymentName = _.trim(req.params.destDeploymentName); + var uid = req.users.id; + var packageManager = new PackageManager(); + var deployments = new Deployments(); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + var appId = col.appid; + return Promise.all([ + deployments.findDeloymentByName(sourceDeploymentName, appId), + deployments.findDeloymentByName(destDeploymentName, appId), + ]) + .spread((sourceDeploymentInfo, destDeploymentInfo) => { + if (!sourceDeploymentInfo) { + throw new AppError.AppError(`${sourceDeploymentName} does not exist.`); + } + if (!destDeploymentInfo) { + throw new AppError.AppError(`${destDeploymentName} does not exist.`); + } + return [sourceDeploymentInfo, destDeploymentInfo]; + }) + .spread((sourceDeploymentInfo, destDeploymentInfo) => { + var params = _.get(req.body, 'packageInfo', {}); + _.set(params, 'promoteUid', uid); + return [ + packageManager.promotePackage( + sourceDeploymentInfo, + destDeploymentInfo, + params, + ), + destDeploymentInfo, + ]; + }) + .spread((packages, destDeploymentInfo) => { + if (packages) { + Promise.delay(1000).then(() => { + packageManager + .createDiffPackagesByLastNums( + destDeploymentInfo.appid, + packages, + _.get(config, 'common.diffNums', 1), + ) + .catch((e) => { + log.error(e); + }); + }); + } + //clear cache if exists. + if (_.get(config, 'common.updateCheckCache', false) !== false) { + Promise.delay(2500).then(() => { + var ClientManager = require('../core/services/client-manager'); + var clientManager = new ClientManager(); + clientManager.clearUpdateCheckCache( + destDeploymentInfo.deployment_key, + '*', + '*', + '*', + ); + }); + } + return packages; + }); + }) + .then((packages) => { + res.send({ package: packages }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + var rollbackCb = function (req, res, next) { - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - var targetLabel = _.trim(_.get(req, 'params.label')); - var deployments = new Deployments(); - var packageManager = new PackageManager(); - accountManager.collaboratorCan(uid, appName) - .then((col) => { - return deployments.findDeloymentByName(deploymentName, col.appid); - }) - .then((dep) => { - return packageManager.rollbackPackage(dep.last_deployment_version_id, targetLabel, uid) - .then((packageInfo)=>{ - if (packageInfo) { - Promise.delay(1000) - .then(() => { - packageManager.createDiffPackagesByLastNums(dep.appid, packageInfo, 1) - .catch((e) => { - log.error(e); - }); - }); - } - //clear cache if exists. - if (_.get(config, 'common.updateCheckCache', false) !== false) { - Promise.delay(2500) + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + var uid = req.users.id; + var targetLabel = _.trim(_.get(req, 'params.label')); + var deployments = new Deployments(); + var packageManager = new PackageManager(); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deployments.findDeloymentByName(deploymentName, col.appid); + }) + .then((dep) => { + return packageManager + .rollbackPackage(dep.last_deployment_version_id, targetLabel, uid) + .then((packageInfo) => { + if (packageInfo) { + Promise.delay(1000).then(() => { + packageManager + .createDiffPackagesByLastNums(dep.appid, packageInfo, 1) + .catch((e) => { + log.error(e); + }); + }); + } + //clear cache if exists. + if (_.get(config, 'common.updateCheckCache', false) !== false) { + Promise.delay(2500).then(() => { + var ClientManager = require('../core/services/client-manager'); + var clientManager = new ClientManager(); + clientManager.clearUpdateCheckCache(dep.deployment_key, '*', '*', '*'); + }); + } + return packageInfo; + }); + }) .then(() => { - var ClientManager = require('../core/services/client-manager'); - var clientManager = new ClientManager(); - clientManager.clearUpdateCheckCache(dep.deployment_key, '*', '*', '*'); + res.send('ok'); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } }); - } - return packageInfo; - }); - }) - .then(() => { - res.send('ok'); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); }; -router.post('/:appName/deployments/:deploymentName/rollback', - middleware.checkToken, rollbackCb); +router.post('/:appName/deployments/:deploymentName/rollback', middleware.checkToken, rollbackCb); -router.post('/:appName/deployments/:deploymentName/rollback/:label', - middleware.checkToken, rollbackCb); - -router.get('/:appName/collaborators', - middleware.checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var uid = req.users.id; - var collaborators = new Collaborators(); - accountManager.collaboratorCan(uid, appName) - .then((col) => { - return collaborators.listCollaborators(col.appid); - }) - .then((data) => { - rs = _.reduce(data, (result, value, key) => { - if (_.eq(key, req.users.email)) { - value.isCurrentAccount = true; - }else { - value.isCurrentAccount = false; - } - result[key] = value; - return result; - },{}); - res.send({collaborators: rs}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); +router.post( + '/:appName/deployments/:deploymentName/rollback/:label', + middleware.checkToken, + rollbackCb, +); -router.post('/:appName/collaborators/:email', - middleware.checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var email = _.trim(req.params.email); - var uid = req.users.id; - if (!validator.isEmail(email)){ - return res.status(406).send("Invalid Email!"); - } - var collaborators = new Collaborators(); - accountManager.ownerCan(uid, appName) - .then((col) => { - return accountManager.findUserByEmail(email) - .then((data) => { - return collaborators.addCollaborator(col.appid, data.id); - }); - }) - .then((data) => { - res.send(data); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); +router.get('/:appName/collaborators', middleware.checkToken, (req, res, next) => { + var appName = _.trim(req.params.appName); + var uid = req.users.id; + var collaborators = new Collaborators(); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return collaborators.listCollaborators(col.appid); + }) + .then((data) => { + rs = _.reduce( + data, + (result, value, key) => { + if (_.eq(key, req.users.email)) { + value.isCurrentAccount = true; + } else { + value.isCurrentAccount = false; + } + result[key] = value; + return result; + }, + {}, + ); + res.send({ collaborators: rs }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); }); -router.delete('/:appName/collaborators/:email', - middleware.checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var email = _.trim(decodeURI(req.params.email)); - var uid = req.users.id; - if (!validator.isEmail(email)){ - return res.status(406).send("Invalid Email!"); - } - var collaborators = new Collaborators(); - accountManager.ownerCan(uid, appName) - .then((col) => { - return accountManager.findUserByEmail(email) - .then((data) => { - if (_.eq(data.id, uid)) { - throw new AppError.AppError("can't delete yourself!"); - } else { - return collaborators.deleteCollaborator(col.appid, data.id); - } - }); - }) - .then(() => { - res.send(""); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); +router.post('/:appName/collaborators/:email', middleware.checkToken, (req, res, next) => { + var appName = _.trim(req.params.appName); + var email = _.trim(req.params.email); + var uid = req.users.id; + if (!validator.isEmail(email)) { + return res.status(406).send('Invalid Email!'); } - }); + var collaborators = new Collaborators(); + accountManager + .ownerCan(uid, appName) + .then((col) => { + return accountManager.findUserByEmail(email).then((data) => { + return collaborators.addCollaborator(col.appid, data.id); + }); + }) + .then((data) => { + res.send(data); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); }); -router.delete('/:appName', - middleware.checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var uid = req.users.id; - var appManager = new AppManager(); - accountManager.ownerCan(uid, appName) - .then((col) => { - return appManager.deleteApp(col.appid); - }) - .then((data) => { - res.send(data); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); +router.delete('/:appName/collaborators/:email', middleware.checkToken, (req, res, next) => { + var appName = _.trim(req.params.appName); + var email = _.trim(decodeURI(req.params.email)); + var uid = req.users.id; + if (!validator.isEmail(email)) { + return res.status(406).send('Invalid Email!'); } - }); + var collaborators = new Collaborators(); + accountManager + .ownerCan(uid, appName) + .then((col) => { + return accountManager.findUserByEmail(email).then((data) => { + if (_.eq(data.id, uid)) { + throw new AppError.AppError("can't delete yourself!"); + } else { + return collaborators.deleteCollaborator(col.appid, data.id); + } + }); + }) + .then(() => { + res.send(''); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); }); -router.patch('/:appName', - middleware.checkToken, (req, res, next) => { - var newAppName = _.trim(req.body.name); - var appName = _.trim(req.params.appName); - var uid = req.users.id; - if (_.isEmpty(newAppName)) { - return res.status(406).send("Please input name!"); - } else { +router.delete('/:appName', middleware.checkToken, (req, res, next) => { + var appName = _.trim(req.params.appName); + var uid = req.users.id; var appManager = new AppManager(); - return accountManager.ownerCan(uid, appName) - .then((col) => { - return appManager.findAppByName(uid, newAppName) - .then((appInfo) => { - if (!_.isEmpty(appInfo)){ - throw new AppError.AppError(newAppName + " Exist!"); - } - return appManager.modifyApp(col.appid, {name: newAppName}); - }); - }) - .then(() => { - res.send(""); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); - } + accountManager + .ownerCan(uid, appName) + .then((col) => { + return appManager.deleteApp(col.appid); + }) + .then((data) => { + res.send(data); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); }); -router.post('/:appName/transfer/:email', - middleware.checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var email = _.trim(req.params.email); - var uid = req.users.id; - if (!validator.isEmail(email)){ - return res.status(406).send("Invalid Email!"); - } - return accountManager.ownerCan(uid, appName) - .then((col) => { - return accountManager.findUserByEmail(email) - .then((data) => { - if (_.eq(data.id, uid)) { - throw new AppError.AppError("You can't transfer to yourself!"); - } - var appManager = new AppManager(); - return appManager.transferApp(col.appid, uid, data.id); - }); - }) - .then((data) => { - res.send(data); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); +router.patch('/:appName', middleware.checkToken, (req, res, next) => { + var newAppName = _.trim(req.body.name); + var appName = _.trim(req.params.appName); + var uid = req.users.id; + if (_.isEmpty(newAppName)) { + return res.status(406).send('Please input name!'); } else { - next(e); + var appManager = new AppManager(); + return accountManager + .ownerCan(uid, appName) + .then((col) => { + return appManager.findAppByName(uid, newAppName).then((appInfo) => { + if (!_.isEmpty(appInfo)) { + throw new AppError.AppError(newAppName + ' Exist!'); + } + return appManager.modifyApp(col.appid, { name: newAppName }); + }); + }) + .then(() => { + res.send(''); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); } - }); }); -router.post('/', middleware.checkToken, (req, res, next) => { - log.debug("addApp params:",req.body); - var constName = require('../core/const'); - var appName = req.body.name; - if (_.isEmpty(appName)) { - return res.status(406).send("Please input name!"); - } - var osName = _.toLower(req.body.os); - var os; - if (osName == _.toLower(constName.IOS_NAME)) { - os = constName.IOS; - } else if (osName == _.toLower(constName.ANDROID_NAME)) { - os = constName.ANDROID; - } else if (osName == _.toLower(constName.WINDOWS_NAME)) { - os = constName.WINDOWS; - } else { - return res.status(406).send("Please input os [iOS|Android|Windows]!"); - } - var platformName = _.toLower(req.body.platform); - var platform; - if (platformName == _.toLower(constName.REACT_NATIVE_NAME)) { - platform = constName.REACT_NATIVE; - } else if (platformName == _.toLower(constName.CORDOVA_NAME)) { - platform = constName.CORDOVA; - } else { - return res.status(406).send("Please input platform [React-Native|Cordova]!"); - } - var manuallyProvisionDeployments = req.body.manuallyProvisionDeployments; - var uid = req.users.id; - var appManager = new AppManager(); +router.post('/:appName/transfer/:email', middleware.checkToken, (req, res, next) => { + var appName = _.trim(req.params.appName); + var email = _.trim(req.params.email); + var uid = req.users.id; + if (!validator.isEmail(email)) { + return res.status(406).send('Invalid Email!'); + } + return accountManager + .ownerCan(uid, appName) + .then((col) => { + return accountManager.findUserByEmail(email).then((data) => { + if (_.eq(data.id, uid)) { + throw new AppError.AppError("You can't transfer to yourself!"); + } + var appManager = new AppManager(); + return appManager.transferApp(col.appid, uid, data.id); + }); + }) + .then((data) => { + res.send(data); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); +}); - appManager.findAppByName(uid, appName) - .then((appInfo) => { - if (!_.isEmpty(appInfo)){ - throw new AppError.AppError(appName + " Exist!"); +router.post('/', middleware.checkToken, (req, res, next) => { + log.debug('addApp params:', req.body); + var constName = require('../core/const'); + var appName = req.body.name; + if (_.isEmpty(appName)) { + return res.status(406).send('Please input name!'); } - return appManager.addApp(uid, appName, os, platform, req.users.identical) - .then(() => { - return {name: appName, collaborators: {[req.users.email]: {permission: "Owner"}}}; - }); - }) - .then((data) => { - res.send({app: data}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(406).send(e.message); + var osName = _.toLower(req.body.os); + var os; + if (osName == _.toLower(constName.IOS_NAME)) { + os = constName.IOS; + } else if (osName == _.toLower(constName.ANDROID_NAME)) { + os = constName.ANDROID; + } else if (osName == _.toLower(constName.WINDOWS_NAME)) { + os = constName.WINDOWS; } else { - next(e); + return res.status(406).send('Please input os [iOS|Android|Windows]!'); } - }); + var platformName = _.toLower(req.body.platform); + var platform; + if (platformName == _.toLower(constName.REACT_NATIVE_NAME)) { + platform = constName.REACT_NATIVE; + } else if (platformName == _.toLower(constName.CORDOVA_NAME)) { + platform = constName.CORDOVA; + } else { + return res.status(406).send('Please input platform [React-Native|Cordova]!'); + } + var manuallyProvisionDeployments = req.body.manuallyProvisionDeployments; + var uid = req.users.id; + var appManager = new AppManager(); + + appManager + .findAppByName(uid, appName) + .then((appInfo) => { + if (!_.isEmpty(appInfo)) { + throw new AppError.AppError(appName + ' Exist!'); + } + return appManager.addApp(uid, appName, os, platform, req.users.identical).then(() => { + return { + name: appName, + collaborators: { [req.users.email]: { permission: 'Owner' } }, + }; + }); + }) + .then((data) => { + res.send({ app: data }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); }); module.exports = router; diff --git a/routes/auth.js b/routes/auth.js index 7bdd96c2..e3bb5c02 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -4,66 +4,70 @@ var _ = require('lodash'); var config = require('../core/config'); var validator = require('validator'); var log4js = require('log4js'); -var log = log4js.getLogger("cps:auth"); +var log = log4js.getLogger('cps:auth'); router.get('/password', (req, res) => { - res.render('auth/password', { title: 'CodePushServer' }); + res.render('auth/password', { title: 'CodePushServer' }); }); router.get('/login', (req, res) => { - var codePushWebUrl = _.get(config, 'common.codePushWebUrl'); - if (codePushWebUrl && validator.isURL(codePushWebUrl)) { - log.debug(`login redirect:${codePushWebUrl}`); - res.redirect(`${codePushWebUrl}/login`); - } else { - res.render('auth/login', { title: 'CodePushServer' }); - } + var codePushWebUrl = _.get(config, 'common.codePushWebUrl'); + if (codePushWebUrl && validator.isURL(codePushWebUrl)) { + log.debug(`login redirect:${codePushWebUrl}`); + res.redirect(`${codePushWebUrl}/login`); + } else { + res.render('auth/login', { title: 'CodePushServer' }); + } }); router.get('/link', (req, res) => { - res.redirect(`/auth/login`); + res.redirect(`/auth/login`); }); router.get('/register', (req, res) => { - var codePushWebUrl = _.get(config, 'common.codePushWebUrl'); - var isRedirect = false; - if (codePushWebUrl && validator.isURL(codePushWebUrl)) { - log.debug(`register redirect:${codePushWebUrl}`); - res.redirect(`${codePushWebUrl}/register`); - } else { - res.render('auth/login', { title: 'CodePushServer' }); - } + var codePushWebUrl = _.get(config, 'common.codePushWebUrl'); + var isRedirect = false; + if (codePushWebUrl && validator.isURL(codePushWebUrl)) { + log.debug(`register redirect:${codePushWebUrl}`); + res.redirect(`${codePushWebUrl}/register`); + } else { + res.render('auth/login', { title: 'CodePushServer' }); + } }); router.post('/logout', (req, res) => { - res.send("ok"); + res.send('ok'); }); router.post('/login', (req, res, next) => { - var AppError = require('../core/app-error'); - var accountManager = require('../core/services/account-manager')(); - var security = require('../core/utils/security'); - var account = _.trim(req.body.account); - var password = _.trim(req.body.password); - var tokenSecret = _.get(config, 'jwt.tokenSecret'); - log.debug(`login:${account}`); - accountManager.login(account, password) - .then((users) => { - var jwt = require('jsonwebtoken'); - return jwt.sign({ uid: users.id, hash: security.md5(users.ack_code), expiredIn: 7200 }, tokenSecret); - }) - .then((token) => { - log.debug(token); - res.send({status:'OK', results: {tokens: token}}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - log.debug(e); - res.send({status:'ERROR', errorMessage: e.message}); - } else { - next(e); - } - }); + var AppError = require('../core/app-error'); + var accountManager = require('../core/services/account-manager')(); + var security = require('../core/utils/security'); + var account = _.trim(req.body.account); + var password = _.trim(req.body.password); + var tokenSecret = _.get(config, 'jwt.tokenSecret'); + log.debug(`login:${account}`); + accountManager + .login(account, password) + .then((users) => { + var jwt = require('jsonwebtoken'); + return jwt.sign( + { uid: users.id, hash: security.md5(users.ack_code), expiredIn: 7200 }, + tokenSecret, + ); + }) + .then((token) => { + log.debug(token); + res.send({ status: 'OK', results: { tokens: token } }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + log.debug(e); + res.send({ status: 'ERROR', errorMessage: e.message }); + } else { + next(e); + } + }); }); module.exports = router; diff --git a/routes/index.js b/routes/index.js index 7ab46e88..09745e5f 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,96 +1,88 @@ -var express = require("express"); +var express = require('express'); var router = express.Router(); -var AppError = require("../core/app-error"); -var middleware = require("../core/middleware"); -var ClientManager = require("../core/services/client-manager"); -var _ = require("lodash"); -var log4js = require("log4js"); -var log = log4js.getLogger("cps:index"); +var AppError = require('../core/app-error'); +var middleware = require('../core/middleware'); +var ClientManager = require('../core/services/client-manager'); +var _ = require('lodash'); +var log4js = require('log4js'); +var log = log4js.getLogger('cps:index'); -router.get("/", (req, res, next) => { - res.render("index", { title: "CodePushServer" }); +router.get('/', (req, res, next) => { + res.render('index', { title: 'CodePushServer' }); }); -router.get("/tokens", (req, res) => { - res.render("tokens", { title: "获取token" }); +router.get('/tokens', (req, res) => { + res.render('tokens', { title: '获取token' }); }); -router.get("/updateCheck", (req, res, next) => { - var deploymentKey = _.get(req, "query.deploymentKey"); - var appVersion = _.get(req, "query.appVersion"); - var label = _.get(req, "query.label"); - var packageHash = _.get(req, "query.packageHash"); - var clientUniqueId = _.get(req, "query.clientUniqueId"); - var clientManager = new ClientManager(); - log.debug("req.query", req.query); - clientManager - .updateCheckFromCache( - deploymentKey, - appVersion, - label, - packageHash, - clientUniqueId - ) - .then((rs) => { - //灰度检测 - return clientManager - .chosenMan(rs.packageId, rs.rollout, clientUniqueId) - .then((data) => { - if (!data) { - rs.isAvailable = false; - return rs; - } - return rs; +router.get('/updateCheck', (req, res, next) => { + var deploymentKey = _.get(req, 'query.deploymentKey'); + var appVersion = _.get(req, 'query.appVersion'); + var label = _.get(req, 'query.label'); + var packageHash = _.get(req, 'query.packageHash'); + var clientUniqueId = _.get(req, 'query.clientUniqueId'); + var clientManager = new ClientManager(); + log.debug('req.query', req.query); + clientManager + .updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) + .then((rs) => { + //灰度检测 + return clientManager + .chosenMan(rs.packageId, rs.rollout, clientUniqueId) + .then((data) => { + if (!data) { + rs.isAvailable = false; + return rs; + } + return rs; + }); + }) + .then((rs) => { + delete rs.packageId; + delete rs.rollout; + res.send({ updateInfo: rs }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(404).send(e.message); + } else { + next(e); + } }); - }) - .then((rs) => { - delete rs.packageId; - delete rs.rollout; - res.send({ updateInfo: rs }); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(404).send(e.message); - } else { - next(e); - } - }); }); -router.post("/reportStatus/download", (req, res) => { - log.debug("req.body", req.body); - var clientUniqueId = _.get(req, "body.clientUniqueId"); - var label = _.get(req, "body.label"); - var deploymentKey = _.get(req, "body.deploymentKey"); - var clientManager = new ClientManager(); - clientManager - .reportStatusDownload(deploymentKey, label, clientUniqueId) - .catch((err) => { - if (!err instanceof AppError.AppError) { - console.error(err.stack); - } +router.post('/reportStatus/download', (req, res) => { + log.debug('req.body', req.body); + var clientUniqueId = _.get(req, 'body.clientUniqueId'); + var label = _.get(req, 'body.label'); + var deploymentKey = _.get(req, 'body.deploymentKey'); + var clientManager = new ClientManager(); + clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { + if (!err instanceof AppError.AppError) { + console.error(err.stack); + } }); - res.send("OK"); + res.send('OK'); }); -router.post("/reportStatus/deploy", (req, res) => { - log.debug("req.body", req.body); - var clientUniqueId = _.get(req, "body.clientUniqueId"); - var label = _.get(req, "body.label"); - var deploymentKey = _.get(req, "body.deploymentKey"); - var clientManager = new ClientManager(); - clientManager - .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) - .catch((err) => { - if (!err instanceof AppError.AppError) { - console.error(err.stack); - } - }); - res.send("OK"); +router.post('/reportStatus/deploy', (req, res) => { + log.debug('req.body', req.body); + var clientUniqueId = _.get(req, 'body.clientUniqueId'); + var label = _.get(req, 'body.label'); + var deploymentKey = _.get(req, 'body.deploymentKey'); + var clientManager = new ClientManager(); + clientManager + .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) + .catch((err) => { + if (!err instanceof AppError.AppError) { + console.error(err.stack); + } + }); + res.send('OK'); }); -router.get("/authenticated", middleware.checkToken, (req, res) => { - return res.send({ authenticated: true }); +router.get('/authenticated', middleware.checkToken, (req, res) => { + return res.send({ authenticated: true }); }); module.exports = router; diff --git a/routes/indexV1.js b/routes/indexV1.js index bf965e2c..915a92ac 100644 --- a/routes/indexV1.js +++ b/routes/indexV1.js @@ -1,99 +1,91 @@ -var express = require("express"); +var express = require('express'); var router = express.Router(); -var AppError = require("../core/app-error"); -var ClientManager = require("../core/services/client-manager"); -var _ = require("lodash"); -var log4js = require("log4js"); -var log = log4js.getLogger("cps:indexV1"); +var AppError = require('../core/app-error'); +var ClientManager = require('../core/services/client-manager'); +var _ = require('lodash'); +var log4js = require('log4js'); +var log = log4js.getLogger('cps:indexV1'); -router.get("/update_check", (req, res, next) => { - var deploymentKey = _.get(req, "query.deployment_key"); - var appVersion = _.get(req, "query.app_version"); - var label = _.get(req, "query.label"); - var packageHash = _.get(req, "query.package_hash"); - var isCompanion = _.get(req, "query.is_companion"); - var clientUniqueId = _.get(req, "query.client_unique_id"); - var clientManager = new ClientManager(); - log.debug("req.query", req.query); - clientManager - .updateCheckFromCache( - deploymentKey, - appVersion, - label, - packageHash, - clientUniqueId - ) - .then((rs) => { - //灰度检测 - return clientManager - .chosenMan(rs.packageId, rs.rollout, clientUniqueId) - .then((data) => { - if (!data) { - rs.isAvailable = false; - return rs; - } - return rs; +router.get('/update_check', (req, res, next) => { + var deploymentKey = _.get(req, 'query.deployment_key'); + var appVersion = _.get(req, 'query.app_version'); + var label = _.get(req, 'query.label'); + var packageHash = _.get(req, 'query.package_hash'); + var isCompanion = _.get(req, 'query.is_companion'); + var clientUniqueId = _.get(req, 'query.client_unique_id'); + var clientManager = new ClientManager(); + log.debug('req.query', req.query); + clientManager + .updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) + .then((rs) => { + //灰度检测 + return clientManager + .chosenMan(rs.packageId, rs.rollout, clientUniqueId) + .then((data) => { + if (!data) { + rs.isAvailable = false; + return rs; + } + return rs; + }); + }) + .then((rs) => { + delete rs.packageId; + delete rs.rollout; + var update_info = { + download_url: rs.downloadUrl, + description: rs.description, + is_available: rs.isAvailable, + is_disabled: rs.isDisabled, + // Note: need to use appVersion here to get it compatible with client side change... + // https://github.com/microsoft/code-push/commit/7d2ffff395cc54db98aefba7c67889f509e8c249#diff-a937c637a47cbd31cbb52c89bef7d197R138 + target_binary_range: rs.appVersion, + label: rs.label, + package_hash: rs.packageHash, + package_size: rs.packageSize, + should_run_binary_version: rs.shouldRunBinaryVersion, + update_app_version: rs.updateAppVersion, + is_mandatory: rs.isMandatory, + }; + res.send({ update_info: update_info }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.status(404).send(e.message); + } else { + next(e); + } }); - }) - .then((rs) => { - delete rs.packageId; - delete rs.rollout; - var update_info = { - download_url: rs.downloadUrl, - description: rs.description, - is_available: rs.isAvailable, - is_disabled: rs.isDisabled, - // Note: need to use appVersion here to get it compatible with client side change... - // https://github.com/microsoft/code-push/commit/7d2ffff395cc54db98aefba7c67889f509e8c249#diff-a937c637a47cbd31cbb52c89bef7d197R138 - target_binary_range: rs.appVersion, - label: rs.label, - package_hash: rs.packageHash, - package_size: rs.packageSize, - should_run_binary_version: rs.shouldRunBinaryVersion, - update_app_version: rs.updateAppVersion, - is_mandatory: rs.isMandatory, - }; - res.send({ update_info: update_info }); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.status(404).send(e.message); - } else { - next(e); - } - }); }); -router.post("/report_status/download", (req, res) => { - log.debug("req.body", req.body); - var clientUniqueId = _.get(req, "body.client_unique_id"); - var label = _.get(req, "body.label"); - var deploymentKey = _.get(req, "body.deployment_key"); - var clientManager = new ClientManager(); - clientManager - .reportStatusDownload(deploymentKey, label, clientUniqueId) - .catch((err) => { - if (!err instanceof AppError.AppError) { - console.error(err.stack); - } +router.post('/report_status/download', (req, res) => { + log.debug('req.body', req.body); + var clientUniqueId = _.get(req, 'body.client_unique_id'); + var label = _.get(req, 'body.label'); + var deploymentKey = _.get(req, 'body.deployment_key'); + var clientManager = new ClientManager(); + clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { + if (!err instanceof AppError.AppError) { + console.error(err.stack); + } }); - res.send("OK"); + res.send('OK'); }); -router.post("/report_status/deploy", (req, res) => { - log.debug("req.body", req.body); - var clientUniqueId = _.get(req, "body.client_unique_id"); - var label = _.get(req, "body.label"); - var deploymentKey = _.get(req, "body.deployment_key"); - var clientManager = new ClientManager(); - clientManager - .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) - .catch((err) => { - if (!err instanceof AppError.AppError) { - console.error(err.stack); - } - }); - res.send("OK"); +router.post('/report_status/deploy', (req, res) => { + log.debug('req.body', req.body); + var clientUniqueId = _.get(req, 'body.client_unique_id'); + var label = _.get(req, 'body.label'); + var deploymentKey = _.get(req, 'body.deployment_key'); + var clientManager = new ClientManager(); + clientManager + .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) + .catch((err) => { + if (!err instanceof AppError.AppError) { + console.error(err.stack); + } + }); + res.send('OK'); }); module.exports = router; diff --git a/routes/users.js b/routes/users.js index c4664f3f..3cb62972 100644 --- a/routes/users.js +++ b/routes/users.js @@ -5,104 +5,108 @@ var _ = require('lodash'); var models = require('../models'); var middleware = require('../core/middleware'); var AccountManager = require('../core/services/account-manager'); -var AppError = require('../core/app-error') +var AppError = require('../core/app-error'); router.get('/', middleware.checkToken, (req, res) => { - res.send({ title: 'CodePushServer' }); + res.send({ title: 'CodePushServer' }); }); router.post('/', (req, res, next) => { - var email = _.trim(_.get(req, 'body.email')); - var token = _.trim(_.get(req, 'body.token')); - var password = _.trim(_.get(req, 'body.password')); - var accountManager = new AccountManager(); - return accountManager.checkRegisterCode(email, token) - .then((u) => { - if (_.isString(password) && password.length < 6) { - throw new AppError.AppError('请您输入6~20位长度的密码'); - } - return accountManager.register(email, password); - }) - .then(() => { - res.send({status: "OK"}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.send({status: "ERROR", message: e.message}); - } else { - next(e); - } - }); + var email = _.trim(_.get(req, 'body.email')); + var token = _.trim(_.get(req, 'body.token')); + var password = _.trim(_.get(req, 'body.password')); + var accountManager = new AccountManager(); + return accountManager + .checkRegisterCode(email, token) + .then((u) => { + if (_.isString(password) && password.length < 6) { + throw new AppError.AppError('请您输入6~20位长度的密码'); + } + return accountManager.register(email, password); + }) + .then(() => { + res.send({ status: 'OK' }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); }); router.get('/exists', (req, res, next) => { - var email = _.trim(_.get(req, 'query.email')); - models.Users.findOne({where: {email: email}}) - .then((u) => { - if (!email) { - throw new AppError.AppError(`请您输入邮箱地址`); - } - res.send({status: "OK", exists: u ? true : false}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.send({status: "ERROR", message: e.message}); - } else { - next(e); - } - }); + var email = _.trim(_.get(req, 'query.email')); + models.Users.findOne({ where: { email: email } }) + .then((u) => { + if (!email) { + throw new AppError.AppError(`请您输入邮箱地址`); + } + res.send({ status: 'OK', exists: u ? true : false }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); }); router.post('/registerCode', (req, res, next) => { - var email = _.get(req, 'body.email'); - var accountManager = new AccountManager(); - return accountManager.sendRegisterCode(email) - .then(() => { - res.send({status: "OK"}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.send({status: "ERROR", message: e.message}); - } else { - next(e); - } - }); + var email = _.get(req, 'body.email'); + var accountManager = new AccountManager(); + return accountManager + .sendRegisterCode(email) + .then(() => { + res.send({ status: 'OK' }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); }); router.get('/registerCode/exists', (req, res, next) => { - var email = _.trim(_.get(req, 'query.email')); - var token = _.trim(_.get(req, 'query.token')); - var accountManager = new AccountManager(); - return accountManager.checkRegisterCode(email, token) - .then(() => { - res.send({status: "OK"}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.send({status: "ERROR", message: e.message}); - } else { - next(e); - } - }); + var email = _.trim(_.get(req, 'query.email')); + var token = _.trim(_.get(req, 'query.token')); + var accountManager = new AccountManager(); + return accountManager + .checkRegisterCode(email, token) + .then(() => { + res.send({ status: 'OK' }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); }); //修改密码 router.patch('/password', middleware.checkToken, (req, res, next) => { - var oldPassword = _.trim(_.get(req, 'body.oldPassword')); - var newPassword = _.trim(_.get(req, 'body.newPassword')); - var uid = req.users.id; - var accountManager = new AccountManager(); - return accountManager.changePassword(uid, oldPassword, newPassword) - .then(() => { - res.send({status: "OK"}); - }) - .catch((e) => { - if (e instanceof AppError.AppError) { - res.send({status: "ERROR", message: e.message}); - } else { - next(e); - } - }); + var oldPassword = _.trim(_.get(req, 'body.oldPassword')); + var newPassword = _.trim(_.get(req, 'body.newPassword')); + var uid = req.users.id; + var accountManager = new AccountManager(); + return accountManager + .changePassword(uid, oldPassword, newPassword) + .then(() => { + res.send({ status: 'OK' }); + }) + .catch((e) => { + if (e instanceof AppError.AppError) { + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); }); module.exports = router; diff --git a/test/api/accessKeys/accessKeys.test.js b/test/api/accessKeys/accessKeys.test.js index 91392a73..35cb585b 100644 --- a/test/api/accessKeys/accessKeys.test.js +++ b/test/api/accessKeys/accessKeys.test.js @@ -1,121 +1,117 @@ -var app = require("../../../app"); -var request = require("supertest")(app); -var should = require("should"); -var security = require("../../../core/utils/security"); -var factory = require("../../../core/utils/factory"); -var _ = require("lodash"); +var app = require('../../../app'); +var request = require('supertest')(app); +var should = require('should'); +var security = require('../../../core/utils/security'); +var factory = require('../../../core/utils/factory'); +var _ = require('lodash'); -describe("api/accessKeys/accessKeys.test.js", function () { - var account = "522539441@qq.com"; - var password = "123456"; - var authToken; - var friendlyName = "test"; - var newFriendlyName = "newtest"; - before(function (done) { - request - .post("/auth/login") - .send({ - account: account, - password: password, - }) - .end(function (err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({ status: "OK" }); - authToken = Buffer.from(`auth:${_.get(rs, "results.tokens")}`).toString( - "base64" - ); - done(); - }); - }); +describe('api/accessKeys/accessKeys.test.js', function () { + var account = '522539441@qq.com'; + var password = '123456'; + var authToken; + var friendlyName = 'test'; + var newFriendlyName = 'newtest'; + before(function (done) { + request + .post('/auth/login') + .send({ + account: account, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: 'OK' }); + authToken = Buffer.from(`auth:${_.get(rs, 'results.tokens')}`).toString('base64'); + done(); + }); + }); - describe("create accessKeys", function (done) { - it("should create accessKeys successful", function (done) { - request - .post(`/accessKeys`) - .set("Authorization", `Basic ${authToken}`) - .send({ - createdBy: "tablee", - friendlyName: friendlyName, - ttl: 30 * 24 * 60 * 60, - }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("accessKey"); - rs.accessKey.should.have.properties([ - "name", - "createdTime", - "createdBy", - "expires", - "description", - "friendlyName", - ]); - done(); + describe('create accessKeys', function (done) { + it('should create accessKeys successful', function (done) { + request + .post(`/accessKeys`) + .set('Authorization', `Basic ${authToken}`) + .send({ + createdBy: 'tablee', + friendlyName: friendlyName, + ttl: 30 * 24 * 60 * 60, + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('accessKey'); + rs.accessKey.should.have.properties([ + 'name', + 'createdTime', + 'createdBy', + 'expires', + 'description', + 'friendlyName', + ]); + done(); + }); }); - }); - it("should not create accessKeys successful when friendlyName exist", function (done) { - request - .post(`/accessKeys`) - .set("Authorization", `Basic ${authToken}`) - .send({ - createdBy: "tablee", - friendlyName: friendlyName, - ttl: 30 * 24 * 60 * 60, - }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal( - `The access key "${friendlyName}" already exists.` - ); - done(); + it('should not create accessKeys successful when friendlyName exist', function (done) { + request + .post(`/accessKeys`) + .set('Authorization', `Basic ${authToken}`) + .send({ + createdBy: 'tablee', + friendlyName: friendlyName, + ttl: 30 * 24 * 60 * 60, + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`The access key "${friendlyName}" already exists.`); + done(); + }); }); }); - }); - describe("list accessKeys", function (done) { - it("should list accessKeys successful", function (done) { - request - .get(`/accessKeys`) - .set("Authorization", `Basic ${authToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("accessKeys"); - rs.accessKeys.should.be.an.instanceOf(Array); - rs.accessKeys.should.matchEach(function (it) { - return it.should.have.properties([ - "name", - "createdTime", - "createdBy", - "expires", - "description", - "friendlyName", - ]); - }); - done(); + describe('list accessKeys', function (done) { + it('should list accessKeys successful', function (done) { + request + .get(`/accessKeys`) + .set('Authorization', `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('accessKeys'); + rs.accessKeys.should.be.an.instanceOf(Array); + rs.accessKeys.should.matchEach(function (it) { + return it.should.have.properties([ + 'name', + 'createdTime', + 'createdBy', + 'expires', + 'description', + 'friendlyName', + ]); + }); + done(); + }); }); }); - }); - describe("delete accessKeys", function (done) { - it("should delete accessKeys successful", function (done) { - request - .delete(`/accessKeys/${encodeURI(newFriendlyName)}`) - .set("Authorization", `Basic ${authToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("friendlyName"); - done(); + describe('delete accessKeys', function (done) { + it('should delete accessKeys successful', function (done) { + request + .delete(`/accessKeys/${encodeURI(newFriendlyName)}`) + .set('Authorization', `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('friendlyName'); + done(); + }); }); }); - }); }); diff --git a/test/api/account/account.test.js b/test/api/account/account.test.js index d52b9fb0..c6cc1e13 100644 --- a/test/api/account/account.test.js +++ b/test/api/account/account.test.js @@ -1,51 +1,47 @@ -var app = require("../../../app"); -var request = require("supertest")(app); -var should = require("should"); -var security = require("../../../core/utils/security"); -var factory = require("../../../core/utils/factory"); -var _ = require("lodash"); +var app = require('../../../app'); +var request = require('supertest')(app); +var should = require('should'); +var security = require('../../../core/utils/security'); +var factory = require('../../../core/utils/factory'); +var _ = require('lodash'); -describe("api/account/account.test.js", function () { - var account = "522539441@qq.com"; - var password = "123456"; +describe('api/account/account.test.js', function () { + var account = '522539441@qq.com'; + var password = '123456'; - describe("user modules", function (done) { - var authToken; - before(function (done) { - request - .post("/auth/login") - .send({ - account: account, - password: password, - }) - .end(function (err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({ status: "OK" }); - authToken = Buffer.from( - `auth:${_.get(rs, "results.tokens")}` - ).toString("base64"); - done(); + describe('user modules', function (done) { + var authToken; + before(function (done) { + request + .post('/auth/login') + .send({ + account: account, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: 'OK' }); + authToken = Buffer.from(`auth:${_.get(rs, 'results.tokens')}`).toString( + 'base64', + ); + done(); + }); }); - }); - it("should get account info successful", function (done) { - request - .get(`/account`) - .set("Authorization", `Basic ${authToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("account"); - rs.account.should.have.properties([ - "email", - "linkedProviders", - "name", - ]); - done(); + it('should get account info successful', function (done) { + request + .get(`/account`) + .set('Authorization', `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('account'); + rs.account.should.have.properties(['email', 'linkedProviders', 'name']); + done(); + }); }); }); - }); }); diff --git a/test/api/apps/apps.test.js b/test/api/apps/apps.test.js index 95bb77fd..c3315f3f 100644 --- a/test/api/apps/apps.test.js +++ b/test/api/apps/apps.test.js @@ -1,502 +1,492 @@ -var app = require("../../../app"); -var request = require("supertest")(app); -var should = require("should"); -var security = require("../../../core/utils/security"); -var factory = require("../../../core/utils/factory"); -var _ = require("lodash"); - -describe("api/apps/apps.test.js", function () { - var account = "522539441@qq.com"; - var email = "lisong2010@gmail.com"; - var emailInvalid = "lisong2010"; - var password = "123456"; - var authToken; - var machineName = `Login-${Math.random()}`; - var friendlyName = `Login-${Math.random()}`; - var appName = "test"; - var newAppName = "newtest"; - var bearerToken; - var testDeployment = "test"; - var newTestDeployment = "newtest"; - - before(function (done) { - request - .post("/auth/login") - .send({ - account: account, - password: password, - }) - .end(function (err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({ status: "OK" }); - authToken = Buffer.from(`auth:${_.get(rs, "results.tokens")}`).toString( - "base64" - ); - done(); - }); - }); - - describe("create accessKeys", function (done) { - it("should create accessKeys successful", function (done) { - request - .post(`/accessKeys`) - .set("Authorization", `Basic ${authToken}`) - .send({ - createdBy: machineName, - friendlyName: friendlyName, - ttl: 30 * 24 * 60 * 60, - }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("accessKey"); - rs.accessKey.should.have.properties([ - "name", - "createdTime", - "createdBy", - "expires", - "description", - "friendlyName", - ]); - bearerToken = _.get(rs, "accessKey.name"); - done(); - }); +var app = require('../../../app'); +var request = require('supertest')(app); +var should = require('should'); +var security = require('../../../core/utils/security'); +var factory = require('../../../core/utils/factory'); +var _ = require('lodash'); + +describe('api/apps/apps.test.js', function () { + var account = '522539441@qq.com'; + var email = 'lisong2010@gmail.com'; + var emailInvalid = 'lisong2010'; + var password = '123456'; + var authToken; + var machineName = `Login-${Math.random()}`; + var friendlyName = `Login-${Math.random()}`; + var appName = 'test'; + var newAppName = 'newtest'; + var bearerToken; + var testDeployment = 'test'; + var newTestDeployment = 'newtest'; + + before(function (done) { + request + .post('/auth/login') + .send({ + account: account, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: 'OK' }); + authToken = Buffer.from(`auth:${_.get(rs, 'results.tokens')}`).toString('base64'); + done(); + }); }); - }); - - describe("add apps", function (done) { - it("should not add apps successful when appName is empty", function (done) { - request - .post(`/apps`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({}) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`Please input name!`); - done(); + + describe('create accessKeys', function (done) { + it('should create accessKeys successful', function (done) { + request + .post(`/accessKeys`) + .set('Authorization', `Basic ${authToken}`) + .send({ + createdBy: machineName, + friendlyName: friendlyName, + ttl: 30 * 24 * 60 * 60, + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('accessKey'); + rs.accessKey.should.have.properties([ + 'name', + 'createdTime', + 'createdBy', + 'expires', + 'description', + 'friendlyName', + ]); + bearerToken = _.get(rs, 'accessKey.name'); + done(); + }); }); }); - it("should add apps successful", function (done) { - request - .post(`/apps`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({ name: appName, os: "iOS", platform: "React-Native" }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("app"); - rs.app.should.have.properties(["name", "collaborators"]); - done(); + describe('add apps', function (done) { + it('should not add apps successful when appName is empty', function (done) { + request + .post(`/apps`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({}) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`Please input name!`); + done(); + }); }); - }); - it("should not add apps successful when appName exists", function (done) { - request - .post(`/apps`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({ name: appName, os: "iOS", platform: "React-Native" }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`${appName} Exist!`); - done(); + it('should add apps successful', function (done) { + request + .post(`/apps`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({ name: appName, os: 'iOS', platform: 'React-Native' }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('app'); + rs.app.should.have.properties(['name', 'collaborators']); + done(); + }); }); - }); - }); - - describe("list apps", function (done) { - it("should list apps successful", function (done) { - request - .get(`/apps`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("apps"); - rs.apps.should.be.an.instanceOf(Array); - rs.apps.should.matchEach(function (it) { - return it.should.have.properties([ - "collaborators", - "deployments", - "name", - ]); - }); - done(); + + it('should not add apps successful when appName exists', function (done) { + request + .post(`/apps`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({ name: appName, os: 'iOS', platform: 'React-Native' }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`${appName} Exist!`); + done(); + }); }); }); - }); - - describe("list apps all deployments", function (done) { - it("should list apps all deployments successful", function (done) { - request - .get(`/apps/${appName}/deployments`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("deployments"); - rs.deployments.should.be.an.instanceOf(Array); - rs.deployments.should.matchEach(function (it) { - return it.should.have.properties([ - "createdTime", - "id", - "key", - "name", - "package", - ]); - }); - done(); + + describe('list apps', function (done) { + it('should list apps successful', function (done) { + request + .get(`/apps`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('apps'); + rs.apps.should.be.an.instanceOf(Array); + rs.apps.should.matchEach(function (it) { + return it.should.have.properties(['collaborators', 'deployments', 'name']); + }); + done(); + }); }); }); - }); - - describe(`create deployments ${testDeployment}`, function (done) { - it("should create deployments successful", function (done) { - request - .post(`/apps/${appName}/deployments`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({ name: testDeployment }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("deployment"); - rs.deployment.should.have.properties(["key", "name"]); - done(); + + describe('list apps all deployments', function (done) { + it('should list apps all deployments successful', function (done) { + request + .get(`/apps/${appName}/deployments`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('deployments'); + rs.deployments.should.be.an.instanceOf(Array); + rs.deployments.should.matchEach(function (it) { + return it.should.have.properties([ + 'createdTime', + 'id', + 'key', + 'name', + 'package', + ]); + }); + done(); + }); }); }); - it("should not create deployments successful when deployment exists", function (done) { - request - .post(`/apps/${appName}/deployments`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({ name: testDeployment }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`${testDeployment} name does Exist!`); - done(); + describe(`create deployments ${testDeployment}`, function (done) { + it('should create deployments successful', function (done) { + request + .post(`/apps/${appName}/deployments`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({ name: testDeployment }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('deployment'); + rs.deployment.should.have.properties(['key', 'name']); + done(); + }); }); - }); - }); - - describe(`rename deployments ${testDeployment}`, function (done) { - it("should rename deployments successful", function (done) { - request - .patch(`/apps/${appName}/deployments/${testDeployment}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({ name: newTestDeployment }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("deployment"); - rs.deployment.should.have.properties(["name"]); - done(); + + it('should not create deployments successful when deployment exists', function (done) { + request + .post(`/apps/${appName}/deployments`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({ name: testDeployment }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`${testDeployment} name does Exist!`); + done(); + }); }); }); - it("should not rename deployments successful when new deployments name does exists", function (done) { - request - .patch(`/apps/${appName}/deployments/${testDeployment}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({ name: newTestDeployment }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`${newTestDeployment} name does Exist!`); - done(); + describe(`rename deployments ${testDeployment}`, function (done) { + it('should rename deployments successful', function (done) { + request + .patch(`/apps/${appName}/deployments/${testDeployment}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({ name: newTestDeployment }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('deployment'); + rs.deployment.should.have.properties(['name']); + done(); + }); }); - }); - it("should not rename deployments successful when deployments name does not exists", function (done) { - request - .patch(`/apps/${appName}/deployments/${testDeployment}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({ name: "hello" }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal( - `does not find the deployment "${testDeployment}"` - ); - done(); + it('should not rename deployments successful when new deployments name does exists', function (done) { + request + .patch(`/apps/${appName}/deployments/${testDeployment}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({ name: newTestDeployment }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`${newTestDeployment} name does Exist!`); + done(); + }); }); - }); - }); - - describe(`delete deployments ${newTestDeployment}`, function (done) { - it("should delete deployments successful", function (done) { - request - .delete(`/apps/${appName}/deployments/${newTestDeployment}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("deployment"); - rs.deployment.should.have.properties(["name"]); - done(); + + it('should not rename deployments successful when deployments name does not exists', function (done) { + request + .patch(`/apps/${appName}/deployments/${testDeployment}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({ name: 'hello' }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`does not find the deployment "${testDeployment}"`); + done(); + }); }); }); - it(`should not delete deployments successful when ${newTestDeployment} not exists`, function (done) { - request - .delete(`/apps/${appName}/deployments/${newTestDeployment}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal( - `does not find the deployment "${newTestDeployment}"` - ); - done(); + describe(`delete deployments ${newTestDeployment}`, function (done) { + it('should delete deployments successful', function (done) { + request + .delete(`/apps/${appName}/deployments/${newTestDeployment}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('deployment'); + rs.deployment.should.have.properties(['name']); + done(); + }); }); - }); - }); - - describe(`add collaborators`, function (done) { - it(`should not add collaborators successful when ${emailInvalid} invalid`, function (done) { - request - .post(`/apps/${appName}/collaborators/${emailInvalid}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`Invalid Email!`); - done(); + + it(`should not delete deployments successful when ${newTestDeployment} not exists`, function (done) { + request + .delete(`/apps/${appName}/deployments/${newTestDeployment}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`does not find the deployment "${newTestDeployment}"`); + done(); + }); }); }); - it("should add collaborators successful", function (done) { - request - .post(`/apps/${appName}/collaborators/${email}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + describe(`add collaborators`, function (done) { + it(`should not add collaborators successful when ${emailInvalid} invalid`, function (done) { + request + .post(`/apps/${appName}/collaborators/${emailInvalid}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`Invalid Email!`); + done(); + }); }); - }); - it(`should not add collaborators successful when ${email} is already a collaborators`, function (done) { - request - .post(`/apps/${appName}/collaborators/${email}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`user already is Collaborator.`); - done(); + it('should add collaborators successful', function (done) { + request + .post(`/apps/${appName}/collaborators/${email}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); - }); - }); - - describe(`list collaborators`, function (done) { - it("should list collaborators successful", function (done) { - request - .get(`/apps/${appName}/collaborators`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("collaborators"); - done(); + + it(`should not add collaborators successful when ${email} is already a collaborators`, function (done) { + request + .post(`/apps/${appName}/collaborators/${email}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`user already is Collaborator.`); + done(); + }); }); }); - }); - - describe(`delete collaborators`, function (done) { - it(`should not delete collaborators successful when ${emailInvalid} invalid`, function (done) { - request - .delete(`/apps/${appName}/collaborators/${emailInvalid}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`Invalid Email!`); - done(); + + describe(`list collaborators`, function (done) { + it('should list collaborators successful', function (done) { + request + .get(`/apps/${appName}/collaborators`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('collaborators'); + done(); + }); }); }); - it(`should not delete collaborators successful when email is yourself`, function (done) { - request - .delete(`/apps/${appName}/collaborators/${account}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`can't delete yourself!`); - done(); + describe(`delete collaborators`, function (done) { + it(`should not delete collaborators successful when ${emailInvalid} invalid`, function (done) { + request + .delete(`/apps/${appName}/collaborators/${emailInvalid}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`Invalid Email!`); + done(); + }); }); - }); - it("should delete collaborators successful", function (done) { - request - .delete(`/apps/${appName}/collaborators/${email}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + it(`should not delete collaborators successful when email is yourself`, function (done) { + request + .delete(`/apps/${appName}/collaborators/${account}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`can't delete yourself!`); + done(); + }); }); - }); - it(`should not delete collaborators successful when ${email} is not a collaborators`, function (done) { - request - .delete(`/apps/${appName}/collaborators/${email}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`user is not a Collaborator`); - done(); + it('should delete collaborators successful', function (done) { + request + .delete(`/apps/${appName}/collaborators/${email}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); - }); - }); - describe(`transfer apps`, function (done) { - var authTokenOther; - before(function (done) { - request - .post("/auth/login") - .send({ - account: email, - password: password, - }) - .end(function (err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({ status: "OK" }); - authTokenOther = Buffer.from( - `auth:${_.get(rs, "results.tokens")}` - ).toString("base64"); - done(); + it(`should not delete collaborators successful when ${email} is not a collaborators`, function (done) { + request + .delete(`/apps/${appName}/collaborators/${email}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`user is not a Collaborator`); + done(); + }); }); }); - it(`should not transfer apps successful when ${emailInvalid} invalid`, function (done) { - request - .post(`/apps/${appName}/transfer/${emailInvalid}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`Invalid Email!`); - done(); + describe(`transfer apps`, function (done) { + var authTokenOther; + before(function (done) { + request + .post('/auth/login') + .send({ + account: email, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: 'OK' }); + authTokenOther = Buffer.from(`auth:${_.get(rs, 'results.tokens')}`).toString( + 'base64', + ); + done(); + }); }); - }); - it(`should not transfer apps successful when email is yourself`, function (done) { - request - .post(`/apps/${appName}/transfer/${account}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`You can't transfer to yourself!`); - done(); + it(`should not transfer apps successful when ${emailInvalid} invalid`, function (done) { + request + .post(`/apps/${appName}/transfer/${emailInvalid}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`Invalid Email!`); + done(); + }); }); - }); - it(`should transfer apps successful`, function (done) { - request - .post(`/apps/${appName}/transfer/${email}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + it(`should not transfer apps successful when email is yourself`, function (done) { + request + .post(`/apps/${appName}/transfer/${account}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`You can't transfer to yourself!`); + done(); + }); }); - }); - it(`should transfer apps back successful`, function (done) { - request - .post(`/apps/${appName}/transfer/${account}`) - .set("Authorization", `Basic ${authTokenOther}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + it(`should transfer apps successful`, function (done) { + request + .post(`/apps/${appName}/transfer/${email}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); - }); - }); - - describe(`rename apps`, function (done) { - it(`should not rename apps successful when new name is invalid`, function (done) { - request - .patch(`/apps/${appName}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`Please input name!`); - done(); + + it(`should transfer apps back successful`, function (done) { + request + .post(`/apps/${appName}/transfer/${account}`) + .set('Authorization', `Basic ${authTokenOther}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - it(`should not rename apps successful when new name does exists`, function (done) { - request - .patch(`/apps/${appName}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({ name: appName }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`${appName} Exist!`); - done(); + describe(`rename apps`, function (done) { + it(`should not rename apps successful when new name is invalid`, function (done) { + request + .patch(`/apps/${appName}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`Please input name!`); + done(); + }); + }); + + it(`should not rename apps successful when new name does exists`, function (done) { + request + .patch(`/apps/${appName}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({ name: appName }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`${appName} Exist!`); + done(); + }); }); - }); - it(`should rename apps successful`, function (done) { - request - .patch(`/apps/${appName}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({ name: newAppName }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + it(`should rename apps successful`, function (done) { + request + .patch(`/apps/${appName}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({ name: newAppName }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - }); - - describe(`delete apps`, function (done) { - it(`should delete apps successful`, function (done) { - request - .delete(`/apps/${newAppName}`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + + describe(`delete apps`, function (done) { + it(`should delete apps successful`, function (done) { + request + .delete(`/apps/${newAppName}`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - }); }); diff --git a/test/api/apps/release.test.js b/test/api/apps/release.test.js index 890490b6..1316c5b7 100644 --- a/test/api/apps/release.test.js +++ b/test/api/apps/release.test.js @@ -1,278 +1,276 @@ -var app = require("../../../app"); -var request = require("supertest")(app); -var should = require("should"); -var path = require("path"); -var security = require("../../../core/utils/security"); -var factory = require("../../../core/utils/factory"); -var _ = require("lodash"); +var app = require('../../../app'); +var request = require('supertest')(app); +var should = require('should'); +var path = require('path'); +var security = require('../../../core/utils/security'); +var factory = require('../../../core/utils/factory'); +var _ = require('lodash'); const SLEEP_TIME = 5000; -describe("api/apps/release.test.js", function () { - var account = "522539441@qq.com"; - var password = "123456"; - var authToken; - var machineName = `Login-${Math.random()}`; - var friendlyName = `Login-${Math.random()}`; - var appName = "Demo-ios"; - var bearerToken; +describe('api/apps/release.test.js', function () { + var account = '522539441@qq.com'; + var password = '123456'; + var authToken; + var machineName = `Login-${Math.random()}`; + var friendlyName = `Login-${Math.random()}`; + var appName = 'Demo-ios'; + var bearerToken; - before(function (done) { - request - .post("/auth/login") - .send({ - account: account, - password: password, - }) - .end(function (err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({ status: "OK" }); - authToken = Buffer.from(`auth:${_.get(rs, "results.tokens")}`).toString( - "base64" - ); - done(); - }); - }); + before(function (done) { + request + .post('/auth/login') + .send({ + account: account, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: 'OK' }); + authToken = Buffer.from(`auth:${_.get(rs, 'results.tokens')}`).toString('base64'); + done(); + }); + }); - describe("create accessKeys", function (done) { - it("should create accessKeys successful", function (done) { - request - .post(`/accessKeys`) - .set("Authorization", `Basic ${authToken}`) - .send({ - createdBy: machineName, - friendlyName: friendlyName, - ttl: 30 * 24 * 60 * 60, - }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("accessKey"); - rs.accessKey.should.have.properties([ - "name", - "createdTime", - "createdBy", - "expires", - "description", - "friendlyName", - ]); - bearerToken = _.get(rs, "accessKey.name"); - done(); + describe('create accessKeys', function (done) { + it('should create accessKeys successful', function (done) { + request + .post(`/accessKeys`) + .set('Authorization', `Basic ${authToken}`) + .send({ + createdBy: machineName, + friendlyName: friendlyName, + ttl: 30 * 24 * 60 * 60, + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('accessKey'); + rs.accessKey.should.have.properties([ + 'name', + 'createdTime', + 'createdBy', + 'expires', + 'description', + 'friendlyName', + ]); + bearerToken = _.get(rs, 'accessKey.name'); + done(); + }); }); }); - }); - describe("add apps", function (done) { - it("should add apps successful", function (done) { - request - .post(`/apps`) - .set("Authorization", `Bearer ${bearerToken}`) - .send({ name: appName, os: "iOS", platform: "React-Native" }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("app"); - rs.app.should.have.properties(["name", "collaborators"]); - done(); + describe('add apps', function (done) { + it('should add apps successful', function (done) { + request + .post(`/apps`) + .set('Authorization', `Bearer ${bearerToken}`) + .send({ name: appName, os: 'iOS', platform: 'React-Native' }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('app'); + rs.app.should.have.properties(['name', 'collaborators']); + done(); + }); }); }); - }); - describe("release apps", function (done) { - it("should release apps successful", function (done) { - request - .post(`/apps/${appName}/deployments/Staging/release`) - .set("Authorization", `Bearer ${bearerToken}`) - .attach("package", path.resolve(__dirname, "./bundle.zip")) - .field( - "packageInfo", - `{"appVersion": "1.0.0", "description": "test", "isMandatory": false}` - ) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + describe('release apps', function (done) { + it('should release apps successful', function (done) { + request + .post(`/apps/${appName}/deployments/Staging/release`) + .set('Authorization', `Bearer ${bearerToken}`) + .attach('package', path.resolve(__dirname, './bundle.zip')) + .field( + 'packageInfo', + `{"appVersion": "1.0.0", "description": "test", "isMandatory": false}`, + ) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); - }); - it("should release apps v2 successful", function (done) { - request - .post(`/apps/${appName}/deployments/Staging/release`) - .set("Authorization", `Bearer ${bearerToken}`) - .attach("package", path.resolve(__dirname, "./bundle_v2.zip")) - .field( - "packageInfo", - `{"appVersion": "1.0.0", "description": "test", "isMandatory": false}` - ) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - setTimeout(function () { - done(); - }, SLEEP_TIME); + it('should release apps v2 successful', function (done) { + request + .post(`/apps/${appName}/deployments/Staging/release`) + .set('Authorization', `Bearer ${bearerToken}`) + .attach('package', path.resolve(__dirname, './bundle_v2.zip')) + .field( + 'packageInfo', + `{"appVersion": "1.0.0", "description": "test", "isMandatory": false}`, + ) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + setTimeout(function () { + done(); + }, SLEEP_TIME); + }); }); }); - }); - describe("promote apps", function (done) { - it("should promote apps successful", function (done) { - request - .post(`/apps/${appName}/deployments/Staging/promote/Production`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - res.status.should.equal(200); - done(); + describe('promote apps', function (done) { + it('should promote apps successful', function (done) { + request + .post(`/apps/${appName}/deployments/Staging/promote/Production`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + res.status.should.equal(200); + done(); + }); }); }); - }); - describe("rollback deployments", function (done) { - it("should rollback deployments successful when point labels", function (done) { - request - .post(`/apps/${appName}/deployments/Staging/rollback/v1`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`ok`); - setTimeout(function () { - done(); - }, SLEEP_TIME); + describe('rollback deployments', function (done) { + it('should rollback deployments successful when point labels', function (done) { + request + .post(`/apps/${appName}/deployments/Staging/rollback/v1`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`ok`); + setTimeout(function () { + done(); + }, SLEEP_TIME); + }); }); - }); - it("should rollback deployments successful", function (done) { - request - .post(`/apps/${appName}/deployments/Staging/rollback`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`ok`); - setTimeout(function () { - done(); - }, SLEEP_TIME); + it('should rollback deployments successful', function (done) { + request + .post(`/apps/${appName}/deployments/Staging/rollback`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`ok`); + setTimeout(function () { + done(); + }, SLEEP_TIME); + }); }); }); - }); - describe("show deployments history", function (done) { - it("should not show deployments history successful where deployments does not exist", function (done) { - request - .get(`/apps/${appName}/deployments/Test/history`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`does not find the deployment`); - done(); + describe('show deployments history', function (done) { + it('should not show deployments history successful where deployments does not exist', function (done) { + request + .get(`/apps/${appName}/deployments/Test/history`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`does not find the deployment`); + done(); + }); }); - }); - it("should show deployments history successful", function (done) { - request - .get(`/apps/${appName}/deployments/Staging/history`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("history"); - rs.history.should.be.an.instanceOf(Array); - rs.history.should.matchEach(function (it) { - return it.should.have.properties([ - "description", - "isDisabled", - "isMandatory", - "rollout", - "appVersion", - "packageHash", - "blobUrl", - "size", - "manifestBlobUrl", - "diffPackageMap", - "releaseMethod", - "uploadTime", - "originalLabel", - "originalDeployment", - "label", - "releasedBy", - ]); - }); - done(); + it('should show deployments history successful', function (done) { + request + .get(`/apps/${appName}/deployments/Staging/history`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('history'); + rs.history.should.be.an.instanceOf(Array); + rs.history.should.matchEach(function (it) { + return it.should.have.properties([ + 'description', + 'isDisabled', + 'isMandatory', + 'rollout', + 'appVersion', + 'packageHash', + 'blobUrl', + 'size', + 'manifestBlobUrl', + 'diffPackageMap', + 'releaseMethod', + 'uploadTime', + 'originalLabel', + 'originalDeployment', + 'label', + 'releasedBy', + ]); + }); + done(); + }); }); }); - }); - describe("delete deployments history", function (done) { - it("should not delete deployments history successful where deployments does not exist", function (done) { - request - .delete(`/apps/${appName}/deployments/Test/history`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(406); - res.text.should.equal(`does not find the deployment`); - done(); + describe('delete deployments history', function (done) { + it('should not delete deployments history successful where deployments does not exist', function (done) { + request + .delete(`/apps/${appName}/deployments/Test/history`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(406); + res.text.should.equal(`does not find the deployment`); + done(); + }); }); - }); - it("should delete deployments history successful", function (done) { - request - .delete(`/apps/${appName}/deployments/Staging/history`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`ok`); - done(); + it('should delete deployments history successful', function (done) { + request + .delete(`/apps/${appName}/deployments/Staging/history`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`ok`); + done(); + }); }); }); - }); - describe("show deployments metrics", function (done) { - it("should not show deployments metrics successful where deployments does not exist", function (done) { - request - .get(`/apps/${appName}/deployments/Test/metrics`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + describe('show deployments metrics', function (done) { + it('should not show deployments metrics successful where deployments does not exist', function (done) { + request + .get(`/apps/${appName}/deployments/Test/metrics`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); - }); - it("should show deployments metrics successful", function (done) { - request - .get(`/apps/${appName}/deployments/Staging/metrics`) - .set("Authorization", `Bearer ${bearerToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("metrics"); - rs.metrics.should.be.an.instanceOf(Object); - rs.metrics.should.matchEach(function (it) { - return it.should.have.properties([ - "active", - "downloaded", - "failed", - "installed", - ]); - }); - done(); + it('should show deployments metrics successful', function (done) { + request + .get(`/apps/${appName}/deployments/Staging/metrics`) + .set('Authorization', `Bearer ${bearerToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('metrics'); + rs.metrics.should.be.an.instanceOf(Object); + rs.metrics.should.matchEach(function (it) { + return it.should.have.properties([ + 'active', + 'downloaded', + 'failed', + 'installed', + ]); + }); + done(); + }); }); }); - }); }); diff --git a/test/api/auth/auth.test.js b/test/api/auth/auth.test.js index 0263639a..4e0fc2af 100644 --- a/test/api/auth/auth.test.js +++ b/test/api/auth/auth.test.js @@ -1,131 +1,146 @@ var app = require('../../../app'); var request = require('supertest')(app); -var should = require("should"); +var should = require('should'); var config = require('../../../core/config'); var _ = require('lodash'); -describe('api/auth/test.js', function() { - var account = '522539441@qq.com'; - var password = '123456'; +describe('api/auth/test.js', function () { + var account = '522539441@qq.com'; + var password = '123456'; - describe('sign in view', function(done) { - it('should show sign in redirect view successful', function(done) { - _.set(config, 'common.codePushWebUrl', 'http://127.0.0.1:3001') - request.get('/auth/login') - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(302); - done(); - }); - }); + describe('sign in view', function (done) { + it('should show sign in redirect view successful', function (done) { + _.set(config, 'common.codePushWebUrl', 'http://127.0.0.1:3001'); + request + .get('/auth/login') + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(302); + done(); + }); + }); - it('should show sign in view successful', function(done) { - _.set(config, 'common.codePushWebUrl', null) - request.get('/auth/login') - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + it('should show sign in view successful', function (done) { + _.set(config, 'common.codePushWebUrl', null); + request + .get('/auth/login') + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); + }); }); - }); - describe('sign up view', function(done) { - it('should show sign up redirect view successful', function(done) { - _.set(config, 'common.codePushWebUrl', 'http://127.0.0.1:3001') - request.get('/auth/register') - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(302); - done(); - }); - }); + describe('sign up view', function (done) { + it('should show sign up redirect view successful', function (done) { + _.set(config, 'common.codePushWebUrl', 'http://127.0.0.1:3001'); + request + .get('/auth/register') + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(302); + done(); + }); + }); - it('should show sign up view successful', function(done) { - _.set(config, 'common.codePushWebUrl', null) - request.get('/auth/register') - .send() - .end(function(err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); - }); + it('should show sign up view successful', function (done) { + _.set(config, 'common.codePushWebUrl', null); + request + .get('/auth/register') + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); + }); }); - }); - describe('sign in', function(done) { - it('should not sign in successful when account is empty', function(done) { - request.post('/auth/login') - .send({ - account: '', - password: password - }) - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"ERROR",errorMessage:"请您输入邮箱地址"}); - done(); - }); - }); - it('should not sign in successful when account is not exist', function(done) { - request.post('/auth/login') - .send({ - account: account + '1', - password: password - }) - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"ERROR",errorMessage:"您输入的邮箱或密码有误"}); - done(); - }); - }); - it('should not sign in successful when password is wrong', function(done) { - request.post('/auth/login') - .send({ - account: account, - password: password + '1' - }) - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"ERROR",errorMessage:"您输入的邮箱或密码有误"}); - done(); - }); - }); - it('should sign in successful', function(done) { - request.post('/auth/login') - .send({ - account: account, - password: password - }) - .end(function(err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({status:"OK"}) - done(); - }); + describe('sign in', function (done) { + it('should not sign in successful when account is empty', function (done) { + request + .post('/auth/login') + .send({ + account: '', + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + errorMessage: '请您输入邮箱地址', + }); + done(); + }); + }); + it('should not sign in successful when account is not exist', function (done) { + request + .post('/auth/login') + .send({ + account: account + '1', + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + errorMessage: '您输入的邮箱或密码有误', + }); + done(); + }); + }); + it('should not sign in successful when password is wrong', function (done) { + request + .post('/auth/login') + .send({ + account: account, + password: password + '1', + }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + errorMessage: '您输入的邮箱或密码有误', + }); + done(); + }); + }); + it('should sign in successful', function (done) { + request + .post('/auth/login') + .send({ + account: account, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ status: 'OK' }); + done(); + }); + }); }); - }); - describe('logout', function(done) { - it('should logout successful', function(done) { - request.post('/auth/logout') - .end(function(err, res) { - should.not.exist(err); - res.text.should.equal('ok'); - done(); - }); + describe('logout', function (done) { + it('should logout successful', function (done) { + request.post('/auth/logout').end(function (err, res) { + should.not.exist(err); + res.text.should.equal('ok'); + done(); + }); + }); }); - }); - describe('link', function(done) { - it('should link successful', function(done) { - request.get('/auth/link') - .end(function(err, res) { - should.not.exist(err); - res.headers.location.should.equal('/auth/login'); - done(); - }); + describe('link', function (done) { + it('should link successful', function (done) { + request.get('/auth/link').end(function (err, res) { + should.not.exist(err); + res.headers.location.should.equal('/auth/login'); + done(); + }); + }); }); - }); }); diff --git a/test/api/index/index.test.js b/test/api/index/index.test.js index f772ea60..2f80ea57 100644 --- a/test/api/index/index.test.js +++ b/test/api/index/index.test.js @@ -1,248 +1,242 @@ -var app = require("../../../app"); -var request = require("supertest")(app); -var should = require("should"); -var _ = require("lodash"); +var app = require('../../../app'); +var request = require('supertest')(app); +var should = require('should'); +var _ = require('lodash'); -describe("api/index/index.test.js", function () { - var account = "522539441@qq.com"; - var password = "123456"; - var authToken; - var appName = "Demo-ios"; - var deploymentKey; - var packageHash; - var label; - before(function (done) { - request - .post("/auth/login") - .send({ - account: account, - password: password, - }) - .end(function (err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({ status: "OK" }); - authToken = Buffer.from(`auth:${_.get(rs, "results.tokens")}`).toString( - "base64" - ); - done(); - }); - }); +describe('api/index/index.test.js', function () { + var account = '522539441@qq.com'; + var password = '123456'; + var authToken; + var appName = 'Demo-ios'; + var deploymentKey; + var packageHash; + var label; + before(function (done) { + request + .post('/auth/login') + .send({ + account: account, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: 'OK' }); + authToken = Buffer.from(`auth:${_.get(rs, 'results.tokens')}`).toString('base64'); + done(); + }); + }); - describe("list apps all deployments", function (done) { - it("should list apps all deployments successful", function (done) { - request - .get(`/apps/${appName}/deployments`) - .set("Authorization", `Basic ${authToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("deployments"); - rs.deployments.should.be.an.instanceOf(Array); - rs.deployments.should.matchEach(function (it) { - if (_.get(it, "name") == "Production") { - deploymentKey = _.get(it, "key"); - packageHash = _.get(it, "package.packageHash"); - label = _.get(it, "package.label"); - } - return it.should.have.properties([ - "createdTime", - "id", - "key", - "name", - "package", - ]); - }); - done(); + describe('list apps all deployments', function (done) { + it('should list apps all deployments successful', function (done) { + request + .get(`/apps/${appName}/deployments`) + .set('Authorization', `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('deployments'); + rs.deployments.should.be.an.instanceOf(Array); + rs.deployments.should.matchEach(function (it) { + if (_.get(it, 'name') == 'Production') { + deploymentKey = _.get(it, 'key'); + packageHash = _.get(it, 'package.packageHash'); + label = _.get(it, 'package.label'); + } + return it.should.have.properties([ + 'createdTime', + 'id', + 'key', + 'name', + 'package', + ]); + }); + done(); + }); }); }); - }); - describe("render index views", function (done) { - it("should render index views successful", function (done) { - request - .get(`/`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + describe('render index views', function (done) { + it('should render index views successful', function (done) { + request + .get(`/`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - }); - describe("render tokens views", function (done) { - it("should render tokens views successful", function (done) { - request - .get(`/tokens`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + describe('render tokens views', function (done) { + it('should render tokens views successful', function (done) { + request + .get(`/tokens`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - }); - describe("authenticated", function (done) { - it("should authenticated successful", function (done) { - request - .get(`/authenticated`) - .set("Authorization", `Basic ${authToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + describe('authenticated', function (done) { + it('should authenticated successful', function (done) { + request + .get(`/authenticated`) + .set('Authorization', `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - }); - describe("updateCheck", function (done) { - it("should not updateCheck successful where deploymentKey is empty", function (done) { - request - .get(`/updateCheck?deploymentKey=&appVersion=1.0.0&label=&packageHash=`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(404); - res.text.should.equal(`please input deploymentKey and appVersion`); - done(); + describe('updateCheck', function (done) { + it('should not updateCheck successful where deploymentKey is empty', function (done) { + request + .get(`/updateCheck?deploymentKey=&appVersion=1.0.0&label=&packageHash=`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(404); + res.text.should.equal(`please input deploymentKey and appVersion`); + done(); + }); }); - }); - it("should not updateCheck successful where deploymentKey does not exist", function (done) { - request - .get( - `/updateCheck?deploymentKey=123&appVersion=1.0.0&label=&packageHash=` - ) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(404); - res.text.should.equal( - `Not found deployment, check deployment key is right.` - ); - done(); + it('should not updateCheck successful where deploymentKey does not exist', function (done) { + request + .get(`/updateCheck?deploymentKey=123&appVersion=1.0.0&label=&packageHash=`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(404); + res.text.should.equal(`Not found deployment, check deployment key is right.`); + done(); + }); }); - }); - it("should updateCheck successful", function (done) { - request - .get( - `/updateCheck?deploymentKey=${deploymentKey}&appVersion=1.0.0&label=&packageHash=` - ) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("updateInfo"); - rs.updateInfo.should.have.properties([ - "downloadURL", - "description", - "isAvailable", - "isMandatory", - "appVersion", - "packageHash", - "label", - "packageSize", - "updateAppVersion", - "shouldRunBinaryVersion", - ]); - rs.updateInfo.isAvailable.should.be.true; - done(); + it('should updateCheck successful', function (done) { + request + .get( + `/updateCheck?deploymentKey=${deploymentKey}&appVersion=1.0.0&label=&packageHash=`, + ) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('updateInfo'); + rs.updateInfo.should.have.properties([ + 'downloadURL', + 'description', + 'isAvailable', + 'isMandatory', + 'appVersion', + 'packageHash', + 'label', + 'packageSize', + 'updateAppVersion', + 'shouldRunBinaryVersion', + ]); + rs.updateInfo.isAvailable.should.be.true; + done(); + }); }); - }); - it("should updateCheck successful when packageHash is newer", function (done) { - request - .get( - `/updateCheck?deploymentKey=${deploymentKey}&appVersion=1.0.0&label=&packageHash=${packageHash}` - ) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - var rs = JSON.parse(res.text); - rs.should.have.properties("updateInfo"); - rs.updateInfo.should.have.properties([ - "downloadURL", - "description", - "isAvailable", - "isMandatory", - "appVersion", - "packageHash", - "label", - "packageSize", - "updateAppVersion", - "shouldRunBinaryVersion", - ]); - rs.updateInfo.isAvailable.should.be.false; - done(); + it('should updateCheck successful when packageHash is newer', function (done) { + request + .get( + `/updateCheck?deploymentKey=${deploymentKey}&appVersion=1.0.0&label=&packageHash=${packageHash}`, + ) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + var rs = JSON.parse(res.text); + rs.should.have.properties('updateInfo'); + rs.updateInfo.should.have.properties([ + 'downloadURL', + 'description', + 'isAvailable', + 'isMandatory', + 'appVersion', + 'packageHash', + 'label', + 'packageSize', + 'updateAppVersion', + 'shouldRunBinaryVersion', + ]); + rs.updateInfo.isAvailable.should.be.false; + done(); + }); }); }); - }); - describe("reportStatus download", function (done) { - it("should reportStatus download successful", function (done) { - request - .post(`/reportStatus/download`) - .send({ - clientUniqueId: Math.random(), - label: label, - deploymentKey: deploymentKey, - }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`OK`); - setTimeout(function () { - done(); - }, 1000); + describe('reportStatus download', function (done) { + it('should reportStatus download successful', function (done) { + request + .post(`/reportStatus/download`) + .send({ + clientUniqueId: Math.random(), + label: label, + deploymentKey: deploymentKey, + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`OK`); + setTimeout(function () { + done(); + }, 1000); + }); }); }); - }); - describe("reportStatus deploy", function (done) { - it("should reportStatus deploy successful", function (done) { - request - .post(`/reportStatus/deploy`) - .send({ - clientUniqueId: Math.random(), - label: label, - deploymentKey: deploymentKey, - status: "DeploymentSucceeded", - }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`OK`); - setTimeout(function () { - done(); - }, 1000); + describe('reportStatus deploy', function (done) { + it('should reportStatus deploy successful', function (done) { + request + .post(`/reportStatus/deploy`) + .send({ + clientUniqueId: Math.random(), + label: label, + deploymentKey: deploymentKey, + status: 'DeploymentSucceeded', + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`OK`); + setTimeout(function () { + done(); + }, 1000); + }); }); - }); - it("should reportStatus deploy successful", function (done) { - request - .post(`/reportStatus/deploy`) - .send({ - clientUniqueId: Math.random(), - label: label, - deploymentKey: deploymentKey, - status: "DeploymentFailed", - }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - res.text.should.equal(`OK`); - setTimeout(function () { - done(); - }, 1000); + it('should reportStatus deploy successful', function (done) { + request + .post(`/reportStatus/deploy`) + .send({ + clientUniqueId: Math.random(), + label: label, + deploymentKey: deploymentKey, + status: 'DeploymentFailed', + }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + res.text.should.equal(`OK`); + setTimeout(function () { + done(); + }, 1000); + }); }); }); - }); }); diff --git a/test/api/init/database.js b/test/api/init/database.js index a32c0aea..833d7194 100644 --- a/test/api/init/database.js +++ b/test/api/init/database.js @@ -3,62 +3,66 @@ var mysql = require('mysql2'); var redis = require('redis'); var should = require('should'); var fs = require('fs'); -var path = require('path'); +var path = require('path'); -describe('api/init/database.js', function() { - - describe('create database', function(done) { - it('should create database successful', function(done) { - var connection = mysql.createConnection({ - host: config.db.host, - user: config.db.username, - password: config.db.password, - multipleStatements: true - }); - connection.connect(); - connection.query(`DROP DATABASE IF EXISTS ${config.db.database};CREATE DATABASE IF NOT EXISTS ${config.db.database}`, function(err, rows, fields) { - should.not.exist(err); - done(); - }); - connection.end(); +describe('api/init/database.js', function () { + describe('create database', function (done) { + it('should create database successful', function (done) { + var connection = mysql.createConnection({ + host: config.db.host, + user: config.db.username, + password: config.db.password, + multipleStatements: true, + }); + connection.connect(); + connection.query( + `DROP DATABASE IF EXISTS ${config.db.database};CREATE DATABASE IF NOT EXISTS ${config.db.database}`, + function (err, rows, fields) { + should.not.exist(err); + done(); + }, + ); + connection.end(); + }); }); - }); - describe('flushall redis', function(done) { - it('should flushall redis successful', function(done) { - var client = redis.createClient(config.redis.default); - client.flushall(function (err, reply) { - should.not.exist(err); - reply.toLowerCase().should.equal('ok'); - done(); - }); + describe('flushall redis', function (done) { + it('should flushall redis successful', function (done) { + var client = redis.createClient(config.redis.default); + client.flushall(function (err, reply) { + should.not.exist(err); + reply.toLowerCase().should.equal('ok'); + done(); + }); + }); }); - }); - describe('import data from sql files', function(done) { - var connection; - before(function() { - connection = mysql.createConnection({ - host: config.db.host, - user: config.db.username, - password: config.db.password, - database: config.db.database, - multipleStatements: true - }); - connection.connect(); - }); + describe('import data from sql files', function (done) { + var connection; + before(function () { + connection = mysql.createConnection({ + host: config.db.host, + user: config.db.username, + password: config.db.password, + database: config.db.database, + multipleStatements: true, + }); + connection.connect(); + }); - after(function() { - connection.end(); - }); + after(function () { + connection.end(); + }); - it('should import data codepush-all.sql successful', function(done) { - var sql = fs.readFileSync(path.resolve(__dirname, '../../../sql/codepush-all.sql'), 'utf-8'); - connection.query(sql, function(err, results) { - should.not.exist(err); - done(); - }); + it('should import data codepush-all.sql successful', function (done) { + var sql = fs.readFileSync( + path.resolve(__dirname, '../../../sql/codepush-all.sql'), + 'utf-8', + ); + connection.query(sql, function (err, results) { + should.not.exist(err); + done(); + }); + }); }); - }); - }); diff --git a/test/api/users/users.test.js b/test/api/users/users.test.js index 20f788e0..7a5eb3bd 100644 --- a/test/api/users/users.test.js +++ b/test/api/users/users.test.js @@ -1,308 +1,306 @@ -var app = require("../../../app"); -var request = require("supertest")(app); -var should = require("should"); -var security = require("../../../core/utils/security"); -var factory = require("../../../core/utils/factory"); -var _ = require("lodash"); +var app = require('../../../app'); +var request = require('supertest')(app); +var should = require('should'); +var security = require('../../../core/utils/security'); +var factory = require('../../../core/utils/factory'); +var _ = require('lodash'); -describe("api/users/users.test.js", function () { - var accountExist = "lisong2010@gmail.com"; - var account = "522539441@qq.com"; - var registerKey = `REGISTER_CODE_${security.md5(account)}`; - var password = "654321"; - var newPassword = "123456"; +describe('api/users/users.test.js', function () { + var accountExist = 'lisong2010@gmail.com'; + var account = '522539441@qq.com'; + var registerKey = `REGISTER_CODE_${security.md5(account)}`; + var password = '654321'; + var newPassword = '123456'; - describe("check email does exists", function (done) { - it("should not check email successful when not input email", function (done) { - request - .get(`/users/exists`) - .send() - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ - status: "ERROR", - message: "请您输入邮箱地址", - }); - done(); + describe('check email does exists', function (done) { + it('should not check email successful when not input email', function (done) { + request + .get(`/users/exists`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + message: '请您输入邮箱地址', + }); + done(); + }); }); - }); - it("should not exists account when sign up", function (done) { - request - .get(`/users/exists?email=${account}`) - .send() - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ - status: "OK", - exists: false, - }); - done(); + it('should not exists account when sign up', function (done) { + request + .get(`/users/exists?email=${account}`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'OK', + exists: false, + }); + done(); + }); }); }); - }); - describe("send register code to email", function (done) { - it("should not send register code successful when not input email", function (done) { - request - .post(`/users/registerCode`) - .send({}) - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ - status: "ERROR", - message: "请您输入邮箱地址", - }); - done(); + describe('send register code to email', function (done) { + it('should not send register code successful when not input email', function (done) { + request + .post(`/users/registerCode`) + .send({}) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + message: '请您输入邮箱地址', + }); + done(); + }); }); - }); - it("should not send register code successful when email already exists", function (done) { - request - .post(`/users/registerCode`) - .send({ email: accountExist }) - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ - status: "ERROR", - message: `"${accountExist}" 已经注册过,请更换邮箱注册`, - }); - done(); + it('should not send register code successful when email already exists', function (done) { + request + .post(`/users/registerCode`) + .send({ email: accountExist }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + message: `"${accountExist}" 已经注册过,请更换邮箱注册`, + }); + done(); + }); }); - }); - it("should send register successful", function (done) { - request - .post(`/users/registerCode`) - .send({ email: account }) - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ status: "OK" }); - done(); + it('should send register successful', function (done) { + request + .post(`/users/registerCode`) + .send({ email: account }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ status: 'OK' }); + done(); + }); }); }); - }); - describe("check register code", function (done) { - var token = "invalid token"; - var account2 = "522539441@qq.com2"; - var storageToken; - before(function (done) { - var client = factory.getRedisClient("default"); - client - .getAsync(registerKey) - .then(function (t) { - storageToken = t; - done(); - }) - .finally(() => client.quit()); - }); + describe('check register code', function (done) { + var token = 'invalid token'; + var account2 = '522539441@qq.com2'; + var storageToken; + before(function (done) { + var client = factory.getRedisClient('default'); + client + .getAsync(registerKey) + .then(function (t) { + storageToken = t; + done(); + }) + .finally(() => client.quit()); + }); - it("should not check register code successful when email already exists", function (done) { - request - .get(`/users/registerCode/exists?email=${accountExist}`) - .send() - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ - status: "ERROR", - message: `"${accountExist}" 已经注册过,请更换邮箱注册`, - }); - done(); + it('should not check register code successful when email already exists', function (done) { + request + .get(`/users/registerCode/exists?email=${accountExist}`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + message: `"${accountExist}" 已经注册过,请更换邮箱注册`, + }); + done(); + }); }); - }); - it("should not check register code successful when token expired", function (done) { - request - .get(`/users/registerCode/exists?email=${account2}`) - .send() - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ - status: "ERROR", - message: `验证码已经失效,请您重新获取`, - }); - done(); + it('should not check register code successful when token expired', function (done) { + request + .get(`/users/registerCode/exists?email=${account2}`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + message: `验证码已经失效,请您重新获取`, + }); + done(); + }); }); - }); - it("should not check register code successful when token is invalid", function (done) { - request - .get(`/users/registerCode/exists?email=${account}&token=${token}`) - .send() - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ - status: "ERROR", - message: `您输入的验证码不正确,请重新输入`, - }); - done(); + it('should not check register code successful when token is invalid', function (done) { + request + .get(`/users/registerCode/exists?email=${account}&token=${token}`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + message: `您输入的验证码不正确,请重新输入`, + }); + done(); + }); }); - }); - it("should check register code successful", function (done) { - request - .get( - `/users/registerCode/exists?email=${account}&token=${storageToken}` - ) - .send() - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ status: "OK" }); - done(); + it('should check register code successful', function (done) { + request + .get(`/users/registerCode/exists?email=${account}&token=${storageToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ status: 'OK' }); + done(); + }); }); }); - }); - describe("sign up", function (done) { - var storageToken; - before(function (done) { - var client = factory.getRedisClient("default"); - client - .getAsync(registerKey) - .then(function (t) { - storageToken = t; - done(); - }) - .finally(() => client.quit()); - }); + describe('sign up', function (done) { + var storageToken; + before(function (done) { + var client = factory.getRedisClient('default'); + client + .getAsync(registerKey) + .then(function (t) { + storageToken = t; + done(); + }) + .finally(() => client.quit()); + }); - it("should not sign up successful when password length invalid", function (done) { - request - .post(`/users`) - .send({ email: account, password: "1234", token: storageToken }) - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ - status: "ERROR", - message: `请您输入6~20位长度的密码`, - }); - done(); + it('should not sign up successful when password length invalid', function (done) { + request + .post(`/users`) + .send({ email: account, password: '1234', token: storageToken }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + message: `请您输入6~20位长度的密码`, + }); + done(); + }); }); - }); - it("should sign up successful", function (done) { - request - .post(`/users`) - .send({ email: account, password: password, token: storageToken }) - .end(function (err, res) { - should.not.exist(err); - JSON.parse(res.text).should.containEql({ status: "OK" }); - done(); + it('should sign up successful', function (done) { + request + .post(`/users`) + .send({ email: account, password: password, token: storageToken }) + .end(function (err, res) { + should.not.exist(err); + JSON.parse(res.text).should.containEql({ status: 'OK' }); + done(); + }); }); }); - }); - describe("change password", function (done) { - var authToken; - before(function (done) { - request - .post("/auth/login") - .send({ - account: account, - password: password, - }) - .end(function (err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({ status: "OK" }); - authToken = Buffer.from( - `auth:${_.get(rs, "results.tokens")}` - ).toString("base64"); - done(); + describe('change password', function (done) { + var authToken; + before(function (done) { + request + .post('/auth/login') + .send({ + account: account, + password: password, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: 'OK' }); + authToken = Buffer.from(`auth:${_.get(rs, 'results.tokens')}`).toString( + 'base64', + ); + done(); + }); }); - }); - it("should not change password successful when authToken invalid", function (done) { - request - .patch(`/users/password`) - .set("Authorization", `Basic 11345`) - .send({ oldPassword: password, newPassword: newPassword }) - .end(function (err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - res.status.should.equal(200); - rs.should.containEql({ status: 401 }); - done(); + it('should not change password successful when authToken invalid', function (done) { + request + .patch(`/users/password`) + .set('Authorization', `Basic 11345`) + .send({ oldPassword: password, newPassword: newPassword }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + res.status.should.equal(200); + rs.should.containEql({ status: 401 }); + done(); + }); }); - }); - it("should not change password successful where password invalid", function (done) { - request - .patch(`/users/password`) - .set("Authorization", `Basic ${authToken}`) - .send({ oldPassword: "123321", newPassword: newPassword }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - JSON.parse(res.text).should.containEql({ - status: "ERROR", - message: `您输入的旧密码不正确,请重新输入`, - }); - done(); + it('should not change password successful where password invalid', function (done) { + request + .patch(`/users/password`) + .set('Authorization', `Basic ${authToken}`) + .send({ oldPassword: '123321', newPassword: newPassword }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + message: `您输入的旧密码不正确,请重新输入`, + }); + done(); + }); }); - }); - it("should not change password successful where new password invalid", function (done) { - request - .patch(`/users/password`) - .set("Authorization", `Basic ${authToken}`) - .send({ oldPassword: password, newPassword: "1234" }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - JSON.parse(res.text).should.containEql({ - status: "ERROR", - message: `请您输入6~20位长度的新密码`, - }); - done(); + it('should not change password successful where new password invalid', function (done) { + request + .patch(`/users/password`) + .set('Authorization', `Basic ${authToken}`) + .send({ oldPassword: password, newPassword: '1234' }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + JSON.parse(res.text).should.containEql({ + status: 'ERROR', + message: `请您输入6~20位长度的新密码`, + }); + done(); + }); }); - }); - it("should change password successful", function (done) { - request - .patch(`/users/password`) - .set("Authorization", `Basic ${authToken}`) - .send({ oldPassword: password, newPassword: newPassword }) - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - JSON.parse(res.text).should.containEql({ status: "OK" }); - done(); + it('should change password successful', function (done) { + request + .patch(`/users/password`) + .set('Authorization', `Basic ${authToken}`) + .send({ oldPassword: password, newPassword: newPassword }) + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + JSON.parse(res.text).should.containEql({ status: 'OK' }); + done(); + }); }); }); - }); - describe("user modules", function (done) { - var authToken; - before(function (done) { - request - .post("/auth/login") - .send({ - account: account, - password: newPassword, - }) - .end(function (err, res) { - should.not.exist(err); - var rs = JSON.parse(res.text); - rs.should.containEql({ status: "OK" }); - authToken = Buffer.from( - `auth:${_.get(rs, "results.tokens")}` - ).toString("base64"); - done(); + describe('user modules', function (done) { + var authToken; + before(function (done) { + request + .post('/auth/login') + .send({ + account: account, + password: newPassword, + }) + .end(function (err, res) { + should.not.exist(err); + var rs = JSON.parse(res.text); + rs.should.containEql({ status: 'OK' }); + authToken = Buffer.from(`auth:${_.get(rs, 'results.tokens')}`).toString( + 'base64', + ); + done(); + }); }); - }); - it("should get userinfo successful", function (done) { - request - .get(`/users`) - .set("Authorization", `Basic ${authToken}`) - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(200); - done(); + it('should get userinfo successful', function (done) { + request + .get(`/users`) + .set('Authorization', `Basic ${authToken}`) + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(200); + done(); + }); }); }); - }); }); From f2291700e702dc1cec39ebd6bea0564406e55db0 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 18:33:48 +0800 Subject: [PATCH 050/347] fix(deps): update rand-token to v1.0.1 --- core/utils/security.js | 2 +- package-lock.json | 6 +++--- package.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/utils/security.js b/core/utils/security.js index 6e49890f..cf089a63 100644 --- a/core/utils/security.js +++ b/core/utils/security.js @@ -10,7 +10,7 @@ var AppError = require('../app-error'); var randToken = require('rand-token').generator({ chars: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', - source: crypto.randomBytes, + source: 'crypto', }); var security = {}; module.exports = security; diff --git a/package-lock.json b/package-lock.json index 15c12e8e..4295211c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6509,9 +6509,9 @@ "dev": true }, "rand-token": { - "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/rand-token/download/rand-token-0.4.0.tgz", - "integrity": "sha1-GlZbatEtkt1LMMTE5ZReiqJKWzs=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rand-token/-/rand-token-1.0.1.tgz", + "integrity": "sha512-Zri5SfJmEzBJ3IexFdigvPSCamslJ7UjLkUn0tlgH7COJvaUr5V7FyUYgKifEMTw7gFO8ZLcWjcU+kq8akipzg==" }, "randombytes": { "version": "2.1.0", diff --git a/package.json b/package.json index bb07d869..a8b68fbd 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "nodemailer": "4.7.0", "pug": "2.0.4", "qiniu": "7.4.0", - "rand-token": "0.4.0", + "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "3.1.2", "request": "2.88.2", From ea20620e43040510c1aac5d8508de6ac6cb66b88 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 18:35:30 +0800 Subject: [PATCH 051/347] fix(deps): update yazl to v2.5.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4295211c..e460dfa0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8511,9 +8511,9 @@ } }, "yazl": { - "version": "2.4.3", - "resolved": "http://registry.npm.taobao.org/yazl/download/yazl-2.4.3.tgz", - "integrity": "sha1-7CblzIfVYBud+EMtvdPNLlFzoHE=", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", "requires": { "buffer-crc32": "~0.2.3" } diff --git a/package.json b/package.json index a8b68fbd..9095d2b7 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "upyun": "3.3.9", "validator": "10.6.0", "yargs": "17.1.1", - "yazl": "2.4.3" + "yazl": "2.5.1" }, "devDependencies": { "@shm-open/eslint-config-bundle": "1.4.0", From cd1a47c7b42e957a98a9c8fe8b4c6a20793b9092 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 18:46:11 +0800 Subject: [PATCH 052/347] fix(deps): update pug to v3.0.2 --- package-lock.json | 345 ++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 147 insertions(+), 200 deletions(-) diff --git a/package-lock.json b/package-lock.json index e460dfa0..fffb10cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,8 +73,7 @@ "@babel/helper-validator-identifier": { "version": "7.14.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" }, "@babel/highlight": { "version": "7.14.5", @@ -90,8 +89,7 @@ "@babel/parser": { "version": "7.15.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", - "dev": true + "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" }, "@babel/runtime": { "version": "7.15.3", @@ -177,7 +175,6 @@ "version": "7.15.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -186,8 +183,7 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" } } }, @@ -411,19 +407,6 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, - "@types/babel-types": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.10.tgz", - "integrity": "sha512-g7zrcqL4MiRu3jZzdZZYk0g0KcKk2fddXazSdP1PacEpmjihRsNGU50aaEKnPFuKzfN7WkRktUiCXvs4zU9XXQ==" - }, - "@types/babylon": { - "version": "6.16.6", - "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.6.tgz", - "integrity": "sha512-G4yqdVlhr6YhzLXFKy5F7HtRBU8Y23+iWy7UKthMq/OSQnL1hbsoeXESQ2LY8zEDlknipDG3nRGhUC9tkwvy/w==", - "requires": { - "@types/babel-types": "*" - } - }, "@types/geojson": { "version": "1.0.6", "resolved": "http://registry.npm.taobao.org/@types/geojson/download/@types/geojson-1.0.6.tgz", @@ -685,24 +668,9 @@ } }, "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" - }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", - "requires": { - "acorn": "^4.0.4" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } - } + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "acorn-jsx": { "version": "5.3.2", @@ -815,6 +783,8 @@ "version": "0.1.4", "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -966,6 +936,11 @@ "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz", "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, + "assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==" + }, "assert-plus": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", @@ -1109,31 +1084,14 @@ } } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "@babel/types": "^7.9.6" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, "balanced-match": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", @@ -1357,6 +1315,8 @@ "version": "0.1.3", "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, "requires": { "align-text": "^0.1.3", "lazy-cache": "^1.0.3" @@ -1419,21 +1379,6 @@ "readdirp": "~3.6.0" } }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -1588,14 +1533,12 @@ "dev": true }, "constantinople": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", - "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", "requires": { - "@types/babel-types": "^7.0.0", - "@types/babylon": "^6.16.2", - "babel-types": "^6.26.0", - "babylon": "^6.18.0" + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" } }, "content-disposition": { @@ -1929,11 +1872,6 @@ "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, "core-js-pure": { "version": "3.16.2", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.2.tgz", @@ -2184,7 +2122,8 @@ "decamelize": { "version": "1.2.0", "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decamelize-keys": { "version": "1.1.0", @@ -4523,19 +4462,12 @@ } }, "is-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", - "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", "requires": { - "acorn": "~4.0.2", - "object-assign": "^4.0.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } + "acorn": "^7.1.1", + "object-assign": "^4.1.1" } }, "is-extendable": { @@ -4913,6 +4845,8 @@ "version": "3.2.2", "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -4935,7 +4869,9 @@ "lazy-cache": { "version": "1.0.4", "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true }, "levn": { "version": "0.3.0", @@ -5151,7 +5087,9 @@ "longest": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true, + "optional": true }, "loose-envify": { "version": "1.4.0", @@ -6329,118 +6267,116 @@ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "pug": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz", - "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", "requires": { - "pug-code-gen": "^2.0.2", - "pug-filters": "^3.1.1", - "pug-lexer": "^4.1.0", - "pug-linker": "^3.0.6", - "pug-load": "^2.0.12", - "pug-parser": "^5.0.1", - "pug-runtime": "^2.0.5", - "pug-strip-comments": "^1.0.4" + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" } }, "pug-attrs": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz", - "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", "requires": { - "constantinople": "^3.0.1", - "js-stringify": "^1.0.1", - "pug-runtime": "^2.0.5" + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" } }, "pug-code-gen": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.3.tgz", - "integrity": "sha512-r9sezXdDuZJfW9J91TN/2LFbiqDhmltTFmGpHTsGdrNGp3p4SxAjjXEfnuK2e4ywYsRIVP0NeLbSAMHUcaX1EA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", "requires": { - "constantinople": "^3.1.2", + "constantinople": "^4.0.1", "doctypes": "^1.1.0", - "js-stringify": "^1.0.1", - "pug-attrs": "^2.0.4", - "pug-error": "^1.3.3", - "pug-runtime": "^2.0.5", - "void-elements": "^2.0.1", - "with": "^5.0.0" + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" } }, "pug-error": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", - "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" }, "pug-filters": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz", - "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", "requires": { - "clean-css": "^4.1.11", - "constantinople": "^3.0.1", + "constantinople": "^4.0.1", "jstransformer": "1.0.0", - "pug-error": "^1.3.3", - "pug-walk": "^1.1.8", - "resolve": "^1.1.6", - "uglify-js": "^2.6.1" + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" } }, "pug-lexer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", - "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", "requires": { - "character-parser": "^2.1.1", - "is-expression": "^3.0.0", - "pug-error": "^1.3.3" + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" } }, "pug-linker": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz", - "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", "requires": { - "pug-error": "^1.3.3", - "pug-walk": "^1.1.8" + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" } }, "pug-load": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz", - "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", "requires": { - "object-assign": "^4.1.0", - "pug-walk": "^1.1.8" + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" } }, "pug-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", - "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", "requires": { - "pug-error": "^1.3.3", - "token-stream": "0.0.1" + "pug-error": "^2.0.0", + "token-stream": "1.0.0" } }, "pug-runtime": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz", - "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" }, "pug-strip-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz", - "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", "requires": { - "pug-error": "^1.3.3" + "pug-error": "^2.0.0" } }, "pug-walk": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", - "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" }, "pump": { "version": "3.0.0", @@ -6715,11 +6651,6 @@ "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==" }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -6739,7 +6670,9 @@ "repeat-string": { "version": "1.6.1", "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "optional": true }, "request": { "version": "2.88.2", @@ -6857,6 +6790,8 @@ "version": "0.1.3", "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, "requires": { "align-text": "^0.1.1" } @@ -7869,11 +7804,6 @@ } } }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7889,9 +7819,9 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, "token-stream": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", - "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" }, "toposort-class": { "version": "1.0.1", @@ -8028,6 +7958,8 @@ "version": "2.8.29", "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, "requires": { "source-map": "~0.5.1", "uglify-to-browserify": "~1.0.0", @@ -8037,12 +7969,16 @@ "camelcase": { "version": "1.2.1", "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true }, "cliui": { "version": "2.1.0", "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, "requires": { "center-align": "^0.1.1", "right-align": "^0.1.1", @@ -8052,17 +7988,23 @@ "source-map": { "version": "0.5.7", "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true }, "wordwrap": { "version": "0.0.2", "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true }, "yargs": { "version": "3.10.0", "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, "requires": { "camelcase": "^1.0.2", "cliui": "^2.1.0", @@ -8076,6 +8018,7 @@ "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, "optional": true }, "unbox-primitive": { @@ -8257,9 +8200,9 @@ } }, "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=" }, "which": { "version": "1.3.0", @@ -8336,15 +8279,19 @@ "window-size": { "version": "0.1.0", "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true }, "with": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", - "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", - "requires": { - "acorn": "^3.1.0", - "acorn-globals": "^3.0.0" + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "requires": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" } }, "wkx": { diff --git a/package.json b/package.json index 9095d2b7..f4de68f1 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "moment": "2.29.1", "mysql2": "2.3.0", "nodemailer": "4.7.0", - "pug": "2.0.4", + "pug": "3.0.2", "qiniu": "7.4.0", "rand-token": "1.0.1", "recursive-readdir": "2.2.2", From 3f890d1e0d4f44e319b54c0d317bb30d216aa8f0 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 18:46:35 +0800 Subject: [PATCH 053/347] fix: log more info for NotFound error --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index e0de0815..9b60d448 100644 --- a/app.js +++ b/app.js @@ -91,7 +91,7 @@ app.use('/apps', apps); // will print stacktrace if (app.get('env') === 'development') { app.use(function (req, res, next) { - var err = new AppError.NotFound(); + var err = new AppError.NotFound(`${req.method} ${req.url}`); res.status(err.status || 404); res.render('error', { message: err.message, From 7b0592a9506624d9e9425b1df45354fe82b62051 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 18:48:54 +0800 Subject: [PATCH 054/347] fix(deps): update helmet to v4.6.0 --- package-lock.json | 112 ++-------------------------------------------- package.json | 2 +- 2 files changed, 4 insertions(+), 110 deletions(-) diff --git a/package-lock.json b/package-lock.json index fffb10cd..07c4c42c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1210,11 +1210,6 @@ } } }, - "bowser": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz", - "integrity": "sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA==" - }, "brace-expansion": { "version": "1.1.11", "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", @@ -1301,11 +1296,6 @@ "quick-lru": "^4.0.1" } }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, "caseless": { "version": "0.12.0", "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", @@ -1556,11 +1546,6 @@ } } }, - "content-security-policy-builder": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz", - "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ==" - }, "content-type": { "version": "1.0.4", "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", @@ -2082,11 +2067,6 @@ "assert-plus": "^1.0.0" } }, - "dasherize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", - "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" - }, "data-uri-to-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", @@ -2274,11 +2254,6 @@ "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, - "dont-sniff-mimetype": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz", - "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug==" - }, "dot-prop": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", @@ -3447,11 +3422,6 @@ "pend": "~1.2.0" } }, - "feature-policy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", - "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==" - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -4124,50 +4094,9 @@ "dev": true }, "helmet": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.23.3.tgz", - "integrity": "sha512-U3MeYdzPJQhtvqAVBPntVgAvNSOJyagwZwyKsFdyRa8TV3pOKVFljalPOCxbw5Wwf2kncGhmP0qHjyazIdNdSA==", - "requires": { - "depd": "2.0.0", - "dont-sniff-mimetype": "1.1.0", - "feature-policy": "0.3.0", - "helmet-crossdomain": "0.4.0", - "helmet-csp": "2.10.0", - "hide-powered-by": "1.1.0", - "hpkp": "2.0.0", - "hsts": "2.2.0", - "nocache": "2.1.0", - "referrer-policy": "1.2.0", - "x-xss-protection": "1.3.0" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } - } - }, - "helmet-crossdomain": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz", - "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" - }, - "helmet-csp": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.10.0.tgz", - "integrity": "sha512-Rz953ZNEFk8sT2XvewXkYN0Ho4GEZdjAZy4stjiEQV3eN7GDxg1QKmYggH7otDyIA7uGA6XnUMVSgeJwbR5X+w==", - "requires": { - "bowser": "2.9.0", - "camelize": "1.0.0", - "content-security-policy-builder": "2.1.0", - "dasherize": "2.0.0" - } - }, - "hide-powered-by": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz", - "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg==" + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz", + "integrity": "sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==" }, "hmacsha1": { "version": "1.0.0", @@ -4200,26 +4129,6 @@ } } }, - "hpkp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", - "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=" - }, - "hsts": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.2.0.tgz", - "integrity": "sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==", - "requires": { - "depd": "2.0.0" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } - } - }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -5652,11 +5561,6 @@ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, - "nocache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", - "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" - }, "node_memcached": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/node_memcached/-/node_memcached-1.1.3.tgz", @@ -6646,11 +6550,6 @@ "redis-errors": "^1.0.0" } }, - "referrer-policy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", - "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==" - }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -8357,11 +8256,6 @@ "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "x-xss-protection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", - "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==" - }, "xml2js": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", diff --git a/package.json b/package.json index f4de68f1..9b71dccc 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "extract-zip": "1.7.0", "formidable": "1.2.2", "fs-extra": "7.0.1", - "helmet": "3.23.3", + "helmet": "4.6.0", "jschardet": "1.6.0", "jsonwebtoken": "8.5.1", "lodash": "4.17.21", From 8636b27d8d1a683440409aa5c2e93d4c6aaa85dd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 11:36:15 +0000 Subject: [PATCH 055/347] fix(deps): update dependency fs-extra to v10 --- package-lock.json | 33 +++++++++++++++++++++++++++------ package.json | 2 +- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 07c4c42c..0d8868d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3590,13 +3590,34 @@ } }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "fs.realpath": { diff --git a/package.json b/package.json index 9b71dccc..f42740bb 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "express": "4.17.1", "extract-zip": "1.7.0", "formidable": "1.2.2", - "fs-extra": "7.0.1", + "fs-extra": "10.0.0", "helmet": "4.6.0", "jschardet": "1.6.0", "jsonwebtoken": "8.5.1", From 3e947d7602001d9874aa6d2c31da8ef05d9fdeb0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 13:04:26 +0000 Subject: [PATCH 056/347] fix(deps): update dependency jschardet to v3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d8868d8..9f17d44e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4614,9 +4614,9 @@ "optional": true }, "jschardet": { - "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/jschardet/download/jschardet-1.6.0.tgz", - "integrity": "sha1-x9GnHtz/KDnbL57DD8XV69PBpng=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.0.0.tgz", + "integrity": "sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ==" }, "jsesc": { "version": "2.5.2", diff --git a/package.json b/package.json index f42740bb..55479f63 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "formidable": "1.2.2", "fs-extra": "10.0.0", "helmet": "4.6.0", - "jschardet": "1.6.0", + "jschardet": "3.0.0", "jsonwebtoken": "8.5.1", "lodash": "4.17.21", "log4js": "6.3.0", From 73219d2077dbe4879e42f64234ebaf6ad6fbb676 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 13:05:11 +0000 Subject: [PATCH 057/347] fix(deps): update dependency nodemailer to v6 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d8868d8..9978ad2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5601,9 +5601,9 @@ } }, "nodemailer": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", - "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==" + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.3.tgz", + "integrity": "sha512-faZFufgTMrphYoDjvyVpbpJcYzwyFnbAMmQtj1lVBYAUSm3SOy2fIdd9+Mr4UxPosBa0JRw9bJoIwQn+nswiew==" }, "nopt": { "version": "3.0.6", diff --git a/package.json b/package.json index f42740bb..3a4ddf5e 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "log4js": "6.3.0", "moment": "2.29.1", "mysql2": "2.3.0", - "nodemailer": "4.7.0", + "nodemailer": "6.6.3", "pug": "3.0.2", "qiniu": "7.4.0", "rand-token": "1.0.1", From 6271be7899540a169ecfde6bebdf3469f5d88f61 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 21:28:48 +0800 Subject: [PATCH 058/347] fix(deps): update extract-zip to v2.0.1 --- core/utils/common.js | 38 +++++++++--------- package-lock.json | 95 +++++++++++++++++--------------------------- package.json | 2 +- 3 files changed, 56 insertions(+), 79 deletions(-) diff --git a/core/utils/common.js b/core/utils/common.js index 4d2c7cd1..8813b89d 100644 --- a/core/utils/common.js +++ b/core/utils/common.js @@ -193,26 +193,24 @@ common.createEmptyFolderSync = function (folderPath) { return fsextra.mkdirsSync(folderPath); }; -common.unzipFile = function (zipFile, outputPath) { - return new Promise((resolve, reject) => { - try { - log.debug(`unzipFile check zipFile ${zipFile} fs.R_OK`); - fs.accessSync(zipFile, fs.R_OK); - log.debug(`Pass unzipFile file ${zipFile}`); - } catch (e) { - log.error(e); - return reject(new AppError.AppError(e.message)); - } - extract(zipFile, { dir: outputPath }, function (err) { - if (err) { - log.error(err); - reject(new AppError.AppError(`it's not a zipFile`)); - } else { - log.debug(`unzipFile success`); - resolve(outputPath); - } - }); - }); +common.unzipFile = async function (zipFile, outputPath) { + try { + log.debug(`unzipFile check zipFile ${zipFile} fs.R_OK`); + fs.accessSync(zipFile, fs.R_OK); + log.debug(`Pass unzipFile file ${zipFile}`); + } catch (err) { + log.error(err); + throw new AppError.AppError(err.message); + } + + try { + await extract(zipFile, { dir: outputPath }); + log.debug(`unzipFile success`); + } catch (err) { + log.error(err); + throw new AppError.AppError(`it's not a zipFile`); + } + return outputPath; }; common.getUploadTokenQiniu = function (mac, bucket, key) { diff --git a/package-lock.json b/package-lock.json index c968b451..09d8ee14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -440,6 +440,15 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, + "@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, "@typescript-eslint/eslint-plugin": { "version": "4.29.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.0.tgz", @@ -1257,7 +1266,8 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "bytes": { "version": "3.1.0", @@ -1443,17 +1453,6 @@ "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "conf": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/conf/-/conf-9.0.2.tgz", @@ -3327,36 +3326,28 @@ } }, "extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "requires": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -3889,6 +3880,14 @@ } } }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, "get-uri": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", @@ -6070,7 +6069,8 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz", - "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", + "dev": true }, "progress": { "version": "2.0.3", @@ -6501,20 +6501,6 @@ } } }, - "readable-stream": { - "version": "2.3.5", - "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.5.tgz", - "integrity": "sha1-tPhQA6k4y7bsvOKhJPsQEr0ag40=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7415,14 +7401,6 @@ "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "stringify-package": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", @@ -7872,7 +7850,8 @@ "typedarray": { "version": "0.0.6", "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "uglify-js": { "version": "2.8.29", diff --git a/package.json b/package.json index fc8e24f8..33c3b15d 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "cos-nodejs-sdk-v5": "2.10.0", "diff-match-patch": "1.0.5", "express": "4.17.1", - "extract-zip": "1.7.0", + "extract-zip": "2.0.1", "formidable": "1.2.2", "fs-extra": "10.0.0", "helmet": "4.6.0", From e4b6e5eec9b5ebe12fc5f2afa878ad0ed8eeda71 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 21:42:17 +0800 Subject: [PATCH 059/347] fix(deps): update upyun to v3.4.4 --- package-lock.json | 58 ++++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 09d8ee14..155d907b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1050,19 +1050,11 @@ "dev": true }, "axios": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", - "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - } + "follow-redirects": "1.5.10" } }, "axobject-query": { @@ -5060,13 +5052,13 @@ "dev": true }, "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" } }, "media-typer": { @@ -7951,17 +7943,37 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "upyun": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/upyun/-/upyun-3.3.9.tgz", - "integrity": "sha512-UqvSKvvFgbQwLI+yjTO0WUnmS2i2KIvX4N2Je6ZTRN4cja17DHX7ARd13DO6h65/JOQJPs/Nua2zlnixNFIdWA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/upyun/-/upyun-3.4.4.tgz", + "integrity": "sha512-OLTJ9PxFIMXWfFSoQqSY357sIO12hWPqIm6lpJozPZWkMH9PmFOUR/B7E3DBinneoBvZJkKELVD+Rsx/NwhUtQ==", "requires": { - "axios": "^0.18.0", + "axios": "^0.19.1", "base-64": "^0.1.0", - "form-data": "^2.1.4", + "form-data": "^3.0.0", "hmacsha1": "^1.0.0", "is-promise": "^2.1.0", "md5": "^2.2.1", "mime-types": "^2.1.15" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "uri-js": { diff --git a/package.json b/package.json index 33c3b15d..cb55b74c 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "sequelize": "4.37.1", "serve-favicon": "2.5.0", "slash": "3.0.0", - "upyun": "3.3.9", + "upyun": "3.4.4", "validator": "10.6.0", "yargs": "17.1.1", "yazl": "2.5.1" From 8c4cd001979229a1041b9c134193ef02ce99b613 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 21:46:19 +0800 Subject: [PATCH 060/347] fix(deps): update validator to v13 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 155d907b..d1bb2b1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8091,9 +8091,9 @@ } }, "validator": { - "version": "10.6.0", - "resolved": "http://registry.npm.taobao.org/validator/download/validator-10.6.0.tgz", - "integrity": "sha1-qb3OaFs8PoSA5+u7nrlcVM2XM7A=" + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.6.0.tgz", + "integrity": "sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==" }, "vary": { "version": "1.1.2", diff --git a/package.json b/package.json index cb55b74c..6e317e54 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "serve-favicon": "2.5.0", "slash": "3.0.0", "upyun": "3.4.4", - "validator": "10.6.0", + "validator": "13.6.0", "yargs": "17.1.1", "yazl": "2.5.1" }, From 0907a85e343c9ad9c16adc80a6ae1e78763025f4 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 21:46:56 +0800 Subject: [PATCH 061/347] chore: npm dedupe --- package-lock.json | 393 +++++++--------------------------------------- 1 file changed, 55 insertions(+), 338 deletions(-) diff --git a/package-lock.json b/package-lock.json index d1bb2b1d..de48fded 100644 --- a/package-lock.json +++ b/package-lock.json @@ -98,14 +98,6 @@ "dev": true, "requires": { "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - } } }, "@babel/runtime-corejs3": { @@ -116,14 +108,6 @@ "requires": { "core-js-pure": "^3.16.0", "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - } } }, "@babel/template": { @@ -178,13 +162,6 @@ "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - } } }, "@eslint/eslintrc": { @@ -776,11 +753,6 @@ "uri-js": "^4.2.2" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -1141,28 +1113,9 @@ "readable-stream": "^3.4.0" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } } } }, @@ -1196,14 +1149,6 @@ "ms": "2.0.0" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -1445,6 +1390,18 @@ "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, "conf": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/conf/-/conf-9.0.2.tgz", @@ -1474,11 +1431,6 @@ "uri-js": "^4.2.2" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -1778,43 +1730,9 @@ "q": "^1.5.1" }, "dependencies": { - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -1876,46 +1794,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==" }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, "mime-db": { "version": "1.49.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", @@ -1929,67 +1807,18 @@ "mime-db": "1.49.0" } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "version": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "version": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, "xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", @@ -3145,12 +2974,6 @@ "eslint-visitor-keys": "^1.3.0" }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", @@ -3255,11 +3078,6 @@ "vary": "~1.1.2" }, "dependencies": { - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -3268,13 +3086,6 @@ "ms": "2.0.0" } }, - "iconv-lite": { - "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "mime-db": { "version": "1.49.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", @@ -3287,11 +3098,6 @@ "mime-db": "1.49.0" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -3301,14 +3107,14 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -3458,16 +3264,6 @@ "requires": { "ms": "2.0.0" } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, @@ -4151,13 +3947,6 @@ "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - } } }, "http-proxy-agent": { @@ -6389,16 +6178,6 @@ "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "react-is": { @@ -6493,6 +6272,16 @@ } } }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6549,6 +6338,12 @@ "redis-errors": "^1.0.0" } }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -6599,11 +6394,6 @@ "uuid": "^3.3.2" }, "dependencies": { - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, "mime-db": { "version": "1.49.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", @@ -6791,11 +6581,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, @@ -6828,11 +6613,6 @@ "wkx": "^0.4.1" }, "dependencies": { - "uuid": { - "version": "3.2.1", - "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.2.1.tgz", - "integrity": "sha1-EsUou51Y0LkmXZovbw/ovhf/HxQ=" - }, "validator": { "version": "9.4.1", "resolved": "http://registry.npm.taobao.org/validator/download/validator-9.4.1.tgz", @@ -6877,13 +6657,6 @@ "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.17.1" - }, - "dependencies": { - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - } } }, "setprototypeof": { @@ -7116,31 +6889,9 @@ "readable-stream": "^3.0.0" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -7393,6 +7144,11 @@ "define-properties": "^1.1.3" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + }, "stringify-package": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", @@ -7506,22 +7262,9 @@ "side-channel": "^1.0.4" } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "semver": { "version": "7.3.5", @@ -7532,15 +7275,6 @@ "lru-cache": "^6.0.0" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -7666,34 +7400,17 @@ "readable-stream": "3" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", From e840e2401597641fbbdb883cc338624e25cb07a1 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 22:11:49 +0800 Subject: [PATCH 062/347] refactor: disable hermet.contentSecurityPolicy for local debug --- app.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 9b60d448..4f706bac 100644 --- a/app.js +++ b/app.js @@ -19,8 +19,12 @@ var AppError = require('./core/app-error'); var log4js = require('log4js'); var log = log4js.getLogger('cps:app'); var app = express(); -app.use(helmet()); -app.disable('x-powered-by'); + +app.use( + helmet({ + contentSecurityPolicy: false, + }), +); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'pug'); From 81f480f10b22f339d6bfc52c4d154a4136652ca4 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 19 Aug 2021 22:14:34 +0800 Subject: [PATCH 063/347] chore(release): 1.0.2 --- CHANGELOG.md | 48 +++++++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eec08c12..35a31c69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,54 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.0.2](https://github.com/shm-open/code-push-server/compare/v1.0.1...v1.0.2) (2021-08-19) + + +### Bug Fixes + +* cleanup some use of bluebird in favor of native Promise ([2a3f946](https://github.com/shm-open/code-push-server/commit/2a3f946a5a6edcbc6de05b33e46f41a497615ee6)) +* **deps:** update dependency aliyun-sdk to v1.12.3 ([1f2cb60](https://github.com/shm-open/code-push-server/commit/1f2cb60be694e87ef847b23dc4dab56980deef02)) +* **deps:** update dependency aws-sdk to v2.971.0 ([fa2a40a](https://github.com/shm-open/code-push-server/commit/fa2a40ab33c6ec6e34ec33c4f0b5f1be0fc8b9eb)) +* **deps:** update dependency bluebird to v3.7.2 ([fd221ec](https://github.com/shm-open/code-push-server/commit/fd221eced8b4c3ece6288024b0368471b6bde92f)) +* **deps:** update dependency body-parser to v1.19.0 ([92a5131](https://github.com/shm-open/code-push-server/commit/92a5131d2d1f5803b753588a60c943c29c8dfa33)) +* **deps:** update dependency cookie-parser to v1.4.5 ([f4fa15c](https://github.com/shm-open/code-push-server/commit/f4fa15c9500f946173a4aadeb716d6c4888f4c12)) +* **deps:** update dependency diff-match-patch to v1.0.5 ([e45052d](https://github.com/shm-open/code-push-server/commit/e45052d29a8c8d1f6758c59a26b2410630d6579c)) +* **deps:** update dependency extract-zip to v1.7.0 ([f690f32](https://github.com/shm-open/code-push-server/commit/f690f322de2ef4c068a1c2f444957651a90ec3aa)) +* **deps:** update dependency formidable to v1.2.2 ([eb90aad](https://github.com/shm-open/code-push-server/commit/eb90aada2de67759177926438b6262eb23ec9475)) +* **deps:** update dependency fs-extra to v10 ([8636b27](https://github.com/shm-open/code-push-server/commit/8636b27d8d1a683440409aa5c2e93d4c6aaa85dd)) +* **deps:** update dependency fs-extra to v7.0.1 ([10dbb59](https://github.com/shm-open/code-push-server/commit/10dbb5948bd802d5ec31571b65b94b60913fab65)) +* **deps:** update dependency helmet to v3.23.3 ([1371a70](https://github.com/shm-open/code-push-server/commit/1371a7086c469911bc97562891abd92a2d140f99)) +* **deps:** update dependency jschardet to v3 ([3e947d7](https://github.com/shm-open/code-push-server/commit/3e947d7602001d9874aa6d2c31da8ef05d9fdeb0)) +* **deps:** update dependency jsonwebtoken to v8.5.1 ([81b2635](https://github.com/shm-open/code-push-server/commit/81b2635520cc9cc286f1cdb9c7c01d9ddca7aeca)) +* **deps:** update dependency lodash to v4.17.21 ([90643a1](https://github.com/shm-open/code-push-server/commit/90643a1ace65db86678f4f86f44eb59ea937f535)) +* **deps:** update dependency log4js to v3.0.6 ([bc337a5](https://github.com/shm-open/code-push-server/commit/bc337a57a659b56448a1f0200d6d027336d7007b)) +* **deps:** update dependency moment to v2.29.1 ([e41d4f1](https://github.com/shm-open/code-push-server/commit/e41d4f1ce6107a26f909bc994651c6ed8a0dccda)) +* **deps:** update dependency nodemailer to v4.7.0 ([dd354db](https://github.com/shm-open/code-push-server/commit/dd354dbdc21810868bb94837a6deeca45345ae19)) +* **deps:** update dependency nodemailer to v6 ([73219d2](https://github.com/shm-open/code-push-server/commit/73219d2077dbe4879e42f64234ebaf6ad6fbb676)) +* **deps:** update dependency pug to v2.0.4 ([936a220](https://github.com/shm-open/code-push-server/commit/936a22068fe33e755077ae606f768ef2ab64fbb7)) +* **deps:** update dependency qiniu to v7.4.0 ([71d2645](https://github.com/shm-open/code-push-server/commit/71d2645ed83efe4222a58ff180cc1b37bf530d3d)) +* **deps:** update dependency request to v2.88.2 ([73d23aa](https://github.com/shm-open/code-push-server/commit/73d23aa0fce1f079cfb2e626274dc4041f4944ad)) +* **deps:** update dependency serve-favicon to v2.5.0 ([cbe23fb](https://github.com/shm-open/code-push-server/commit/cbe23fb7e3faee4b4ceba2db119e89458c3fa94c)) +* **deps:** update extract-zip to v2.0.1 ([6271be7](https://github.com/shm-open/code-push-server/commit/6271be7899540a169ecfde6bebdf3469f5d88f61)) +* **deps:** update helmet to v4.6.0 ([7b0592a](https://github.com/shm-open/code-push-server/commit/7b0592a9506624d9e9425b1df45354fe82b62051)) +* **deps:** update log4js to v6 ([572084e](https://github.com/shm-open/code-push-server/commit/572084e0ce5dc959df908b012c995cb1ec52f56e)) +* **deps:** update mocha and dev to their latest version ([9ece7fb](https://github.com/shm-open/code-push-server/commit/9ece7fb129376088b5844a76b69171843b0f1834)) +* **deps:** update pug to v3.0.2 ([cd1a47c](https://github.com/shm-open/code-push-server/commit/cd1a47c7b42e957a98a9c8fe8b4c6a20793b9092)) +* **deps:** update rand-token to v1.0.1 ([f229170](https://github.com/shm-open/code-push-server/commit/f2291700e702dc1cec39ebd6bea0564406e55db0)) +* **deps:** update redis to v3.1.2 ([c8c82c3](https://github.com/shm-open/code-push-server/commit/c8c82c390ef489983c0f0b2f3d4860244d5054f8)) +* **deps:** update slash to v3 ([41520ca](https://github.com/shm-open/code-push-server/commit/41520ca54dc1e7cfd0e791e5e0c74111c9fc10b5)) +* **deps:** update supertest to v6 ([9b19534](https://github.com/shm-open/code-push-server/commit/9b195344d52b8eed5689e8a220f86af507c07f13)) +* **deps:** update upyun to v3.4.4 ([e4b6e5e](https://github.com/shm-open/code-push-server/commit/e4b6e5eec9b5ebe12fc5f2afa878ad0ed8eeda71)) +* **deps:** update validator to v13 ([8c4cd00](https://github.com/shm-open/code-push-server/commit/8c4cd001979229a1041b9c134193ef02ce99b613)) +* **deps:** update yargs to v17 ([25fff4d](https://github.com/shm-open/code-push-server/commit/25fff4d74e08f22d32e077450cbd58199cf76d8a)) +* **deps:** update yazl to v2.5.1 ([ea20620](https://github.com/shm-open/code-push-server/commit/ea20620e43040510c1aac5d8508de6ac6cb66b88)) +* log more info for NotFound error ([3f890d1](https://github.com/shm-open/code-push-server/commit/3f890d1e0d4f44e319b54c0d317bb30d216aa8f0)) +* remove /README.md and remove markdown-it dep ([6100c52](https://github.com/shm-open/code-push-server/commit/6100c522778fe4ab6b05671e32c4b0aeae29ae1e)) +* remove debug from deps ([4283d9c](https://github.com/shm-open/code-push-server/commit/4283d9c8f6ac8110808cf8c6b40803d4e10ac4be)) +* remove unused i18n package ([56f4905](https://github.com/shm-open/code-push-server/commit/56f4905a4134dc4631add808f1863936fc63e79d)) +* remove unused morgan dep ([7c0dfb4](https://github.com/shm-open/code-push-server/commit/7c0dfb4cbf5885964e28e7e3dc2bd5307fe59e3d)) +* replace deprecated use of Buffer() ([dd2a141](https://github.com/shm-open/code-push-server/commit/dd2a141f9009be5e2d0bee89768295956585e07d)) + ### [1.0.1](https://github.com/shm-open/code-push-server/compare/v1.0.0...v1.0.1) (2021-08-19) diff --git a/package-lock.json b/package-lock.json index de48fded..c2a07dc1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "1.0.1", + "version": "1.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6e317e54..0cf6d4f2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "1.0.1", + "version": "1.0.2", "license": "MIT", "repository": { "type": "git", From e66bbf1148396fc31f35cea5272587e2dcf4830f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 16:17:55 +0000 Subject: [PATCH 064/347] fix(deps): update dependency sequelize to v4.44.4 --- package-lock.json | 79 ++++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2a07dc1..3f99efc7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -386,8 +386,8 @@ }, "@types/geojson": { "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/@types/geojson/download/@types/geojson-1.0.6.tgz", - "integrity": "sha1-PgKXJyjGkkjCrwjWCkjLuGgP/98=" + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", + "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" }, "@types/json-schema": { "version": "7.0.9", @@ -1328,7 +1328,7 @@ }, "cls-bluebird": { "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/cls-bluebird/download/cls-bluebird-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", "requires": { "is-bluebird": "^1.0.2", @@ -2093,9 +2093,9 @@ } }, "dottie": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/dottie/download/dottie-2.0.0.tgz", - "integrity": "sha1-2hkZgci41xPKARXViYzzl8Lw3dA=" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", + "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" }, "ecc-jsbn": { "version": "0.1.1", @@ -3464,9 +3464,9 @@ } }, "generic-pool": { - "version": "3.4.2", - "resolved": "http://registry.npm.taobao.org/generic-pool/download/generic-pool-3.4.2.tgz", - "integrity": "sha1-kv9xllINZwg5pnMICSoSqt8valk=" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.5.0.tgz", + "integrity": "sha512-dEkxmX+egB2o4NR80c/q+xzLLzLX+k68/K8xv81XprD+Sk7ZtP14VugeCz+fUwv5FzpWq40pPtAkzPRqT8ka9w==" }, "get-caller-file": { "version": "2.0.5", @@ -4059,7 +4059,7 @@ }, "inflection": { "version": "1.12.0", - "resolved": "http://registry.npm.taobao.org/inflection/download/inflection-1.12.0.tgz", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" }, "inflight": { @@ -4130,7 +4130,7 @@ }, "is-bluebird": { "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-bluebird/download/is-bluebird-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" }, "is-boolean-object": { @@ -5266,9 +5266,9 @@ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "moment-timezone": { - "version": "0.5.14", - "resolved": "http://registry.npm.taobao.org/moment-timezone/download/moment-timezone-0.5.14.tgz", - "integrity": "sha1-TrOP+VOLgBCLpGekWPPtQmjM/LE=", + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", + "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", "requires": { "moment": ">= 2.9.0" } @@ -6446,7 +6446,7 @@ }, "retry-as-promised": { "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/retry-as-promised/download/retry-as-promised-2.3.2.tgz", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", "requires": { "bluebird": "^3.4.6", @@ -6455,8 +6455,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } @@ -6590,16 +6590,16 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "4.37.1", - "resolved": "http://registry.npm.taobao.org/sequelize/download/sequelize-4.37.1.tgz", - "integrity": "sha1-F6qX8mm3YhAVxz53qmshNPRdp9c=", + "version": "4.44.4", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.44.4.tgz", + "integrity": "sha512-nkHmYkbwQK7uwpgW9VBalCBnQqQ8mslTdgcBthtJLORuPvAYRPlfkXZMVUU9TLLJt9CX+/y0MYg0DpcP6ywsEQ==", "requires": { "bluebird": "^3.5.0", "cls-bluebird": "^2.1.0", "debug": "^3.1.0", "depd": "^1.1.0", "dottie": "^2.0.0", - "generic-pool": "^3.4.0", + "generic-pool": "3.5.0", "inflection": "1.12.0", "lodash": "^4.17.1", "moment": "^2.20.0", @@ -6609,14 +6609,14 @@ "terraformer-wkt-parser": "^1.1.2", "toposort-class": "^1.0.1", "uuid": "^3.2.1", - "validator": "^9.4.1", + "validator": "^10.4.0", "wkx": "^0.4.1" }, "dependencies": { "validator": { - "version": "9.4.1", - "resolved": "http://registry.npm.taobao.org/validator/download/validator-9.4.1.tgz", - "integrity": "sha1-q/Rm05i1Yc0kMFARLG/x3mzBJmM=" + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" } } }, @@ -6680,9 +6680,9 @@ "dev": true }, "shimmer": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/shimmer/download/shimmer-1.2.0.tgz", - "integrity": "sha1-+Wb3VVeJdj502IQRk2haXnhzZmU=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" }, "should": { "version": "13.2.3", @@ -7343,18 +7343,19 @@ } }, "terraformer": { - "version": "1.0.8", - "resolved": "http://registry.npm.taobao.org/terraformer/download/terraformer-1.0.8.tgz", - "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.12.tgz", + "integrity": "sha512-MokUp0+MFal4CmJDVL6VAO1bKegeXcBM2RnPVfqcFIp2IIv8EbPAjG0j/vEy/vuKB8NVMMSF2vfpVS/QLe4DBg==", "requires": { - "@types/geojson": "^1.0.0" + "@types/geojson": "^7946.0.0 || ^1.0.0" } }, "terraformer-wkt-parser": { - "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/terraformer-wkt-parser/download/terraformer-wkt-parser-1.1.2.tgz", - "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.1.tgz", + "integrity": "sha512-+CJyNLWb3lJ9RsZMTM66BY0MT3yIo4l4l22Jd9CrZuwzk54fsu4Sc7zejuS9fCITTuTQy3p06d4MZMVI7v5wSg==", "requires": { + "@types/geojson": "^1.0.0", "terraformer": "~1.0.5" } }, @@ -7432,7 +7433,7 @@ }, "toposort-class": { "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/toposort-class/download/toposort-class-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" }, "tough-cookie": { @@ -7923,9 +7924,9 @@ } }, "wkx": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/wkx/download/wkx-0.4.4.tgz", - "integrity": "sha1-z3UbZy5LReFi+f0wEkh45z2WybI=", + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz", + "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==", "requires": { "@types/node": "*" } diff --git a/package.json b/package.json index 0cf6d4f2..f86066f9 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "recursive-readdir": "2.2.2", "redis": "3.1.2", "request": "2.88.2", - "sequelize": "4.37.1", + "sequelize": "4.44.4", "serve-favicon": "2.5.0", "slash": "3.0.0", "upyun": "3.4.4", From f5fbb7b4101c6a3b68ee4a89efbbf5e30c4156da Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 20 Aug 2021 09:19:59 +0000 Subject: [PATCH 065/347] chore(deps): update dependency mocha to v9.1.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2a07dc1..f5b39925 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5074,9 +5074,9 @@ } }, "mocha": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.3.tgz", - "integrity": "sha512-hnYFrSefHxYS2XFGtN01x8un0EwNu2bzKvhpRFhgoybIvMaOkkL60IVPmkb5h6XDmUl4IMSB+rT5cIO4/4bJgg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-Kjg/XxYOFFUi0h/FwMOeb6RoroiZ+P1yOfya6NK7h3dNhahrJx1r2XIT3ge4ZQvJM86mdjNA+W5phqRQh7DwCg==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", diff --git a/package.json b/package.json index 0cf6d4f2..ceb4f9ed 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "devDependencies": { "@shm-open/eslint-config-bundle": "1.4.0", "istanbul": "0.4.5", - "mocha": "9.0.3", + "mocha": "9.1.0", "should": "13.2.3", "standard-version": "9.3.1", "supertest": "6.1.6", From 9e22d7b461ed6ee6438df3259f999fd1a4f4c0da Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 20 Aug 2021 17:54:21 +0800 Subject: [PATCH 066/347] chore: turn off docker build cache --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1c4edba3..3425b319 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ coverage: build-docker: @echo "\nBuilding docker image..." docker pull node:lts-alpine - docker build -t shmopen/code-push-server:latest . + docker build -t shmopen/code-push-server:latest --no-cache . docker tag shmopen/code-push-server:latest shmopen/code-push-server:${VERSION} docker push shmopen/code-push-server:${VERSION} docker push shmopen/code-push-server:latest From 0880204282c2db605800788bba3ff9ba458a6874 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 20 Aug 2021 20:01:53 +0000 Subject: [PATCH 067/347] fix(deps): update dependency aws-sdk to v2.973.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2a07dc1..89b0a01c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -964,9 +964,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.971.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.971.0.tgz", - "integrity": "sha512-7mPN7HnPILMNA8YMEMCZp/bi3o4blPoQ1TbBWaowGUt8RhkxgdAAqMy2vAkhElT5xWjROZS+1NgG3khzBlb0xw==", + "version": "2.973.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.973.0.tgz", + "integrity": "sha512-IhVDIrI+7x+643S7HKDZ8bA8rTKfkCLSlxUZcP9W39PD5y04Hwamxou/kNTtXzdg1yyriq3d5tCVu6w5Z5QFDQ==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index 0cf6d4f2..f6cbf6b2 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.3", - "aws-sdk": "2.971.0", + "aws-sdk": "2.973.0", "bcryptjs": "2.4.3", "bluebird": "3.7.2", "body-parser": "1.19.0", From e8be208f3d7e07a4e4dbb9170c6eb2dc568462ec Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 09:55:35 +0800 Subject: [PATCH 068/347] chore: automerge dev deps --- renovate.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index 4f39080e..4ab34f0b 100644 --- a/renovate.json +++ b/renovate.json @@ -1,3 +1,6 @@ { - "extends": ["config:base"] + "extends": ["config:base"], + "devDependencies": { + "automerge": true + } } From e7fe6159a2cf8b180b0eb2993fe9fef239ab85a5 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 10:29:37 +0800 Subject: [PATCH 069/347] fix: support REDIS_PASSWORD, REDIS_DB env var in default config --- config/config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/config.js b/config/config.js index 0b027e59..146880ce 100644 --- a/config/config.js +++ b/config/config.js @@ -103,6 +103,8 @@ config.development = { default: { host: process.env.REDIS_HOST || '127.0.0.1', port: process.env.REDIS_PORT || 6379, + password: process.env.REDIS_PASSWORD, + db: process.env.REDIS_DB || 0, retry_strategy: function (options) { if (options.error.code === 'ECONNREFUSED') { // End reconnecting on a specific error and flush all commands with a individual error From 09050a9b3939a33f6518516209563f0d03046475 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 10:33:20 +0800 Subject: [PATCH 070/347] chore(release): 1.0.3 --- CHANGELOG.md | 9 +++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35a31c69..7444c4ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.0.3](https://github.com/shm-open/code-push-server/compare/v1.0.2...v1.0.3) (2021-08-23) + + +### Bug Fixes + +* **deps:** update dependency aws-sdk to v2.973.0 ([0880204](https://github.com/shm-open/code-push-server/commit/0880204282c2db605800788bba3ff9ba458a6874)) +* **deps:** update dependency sequelize to v4.44.4 ([e66bbf1](https://github.com/shm-open/code-push-server/commit/e66bbf1148396fc31f35cea5272587e2dcf4830f)) +* support REDIS_PASSWORD, REDIS_DB env var in default config ([e7fe615](https://github.com/shm-open/code-push-server/commit/e7fe6159a2cf8b180b0eb2993fe9fef239ab85a5)) + ### [1.0.2](https://github.com/shm-open/code-push-server/compare/v1.0.1...v1.0.2) (2021-08-19) diff --git a/package-lock.json b/package-lock.json index de80a231..7687738a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "1.0.2", + "version": "1.0.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 30297b67..6cca368e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "1.0.2", + "version": "1.0.3", "license": "MIT", "repository": { "type": "git", From bbf8cadd130da6888bd04d2beef5b15c6a620c63 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 11:51:36 +0800 Subject: [PATCH 071/347] fix(deps): update sequelize to v5 --- core/services/client-manager.js | 2 +- core/services/deployments.js | 4 +- core/services/package-manager.js | 24 +++---- models/deployments.js | 2 +- package-lock.json | 109 +++++++++++++++---------------- package.json | 2 +- 6 files changed, 68 insertions(+), 75 deletions(-) diff --git a/core/services/client-manager.js b/core/services/client-manager.js index 7d2a1bfe..6ab73b3d 100644 --- a/core/services/client-manager.js +++ b/core/services/client-manager.js @@ -181,7 +181,7 @@ proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, cli if (_.eq(packageId, 0)) { return; } - return models.Packages.findById(packageId) + return models.Packages.findByPk(packageId) .then((packages) => { if ( packages && diff --git a/core/services/deployments.js b/core/services/deployments.js index cc7c0395..10014a89 100644 --- a/core/services/deployments.js +++ b/core/services/deployments.js @@ -33,7 +33,7 @@ proto.existDeloymentName = function (appId, name) { proto.addDeloyment = function (name, appId, uid) { var self = this; - return models.Users.findById(uid).then((user) => { + return models.Users.findByPk(uid).then((user) => { if (_.isEmpty(user)) { throw new AppError.AppError("can't find user"); } @@ -115,7 +115,7 @@ proto.findPackagesAndOtherInfos = function (packageId) { userInfo: models.Users.findOne({ where: { id: packageInfo.released_by }, }), - deploymentsVersions: models.DeploymentsVersions.findById( + deploymentsVersions: models.DeploymentsVersions.findByPk( packageInfo.deployment_version_id, ), }); diff --git a/core/services/package-manager.js b/core/services/package-manager.js index 6c19a935..ee9fa740 100644 --- a/core/services/package-manager.js +++ b/core/services/package-manager.js @@ -31,14 +31,14 @@ proto.findPackageInfoByDeploymentIdAndLabel = function (deploymentId, label) { }; proto.findLatestPackageInfoByDeployVersion = function (deploymentsVersionsId) { - return models.DeploymentsVersions.findById(deploymentsVersionsId).then( + return models.DeploymentsVersions.findByPk(deploymentsVersionsId).then( (deploymentsVersions) => { if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { var e = new AppError.AppError('not found last packages'); log.debug(e); throw e; } - return models.Packages.findById(deploymentsVersions.current_package_id); + return models.Packages.findByPk(deploymentsVersions.current_package_id); }, ); }; @@ -100,7 +100,7 @@ proto.isMatchPackageHash = function (packageId, packageHash) { log.debug(`isMatchPackageHash packageId is 0`); return Promise.resolve(false); } - return models.Packages.findById(packageId).then((data) => { + return models.Packages.findByPk(packageId).then((data) => { if (data && _.eq(data.get('package_hash'), packageHash)) { log.debug(`isMatchPackageHash data:`, data.get()); log.debug(`isMatchPackageHash packageHash exist`); @@ -352,7 +352,7 @@ proto.createDiffPackagesByLastNums = function (appId, originalPackage, num) { order: [['id', 'asc']], limit: 2, }), - models.Apps.findById(appId), + models.Apps.findByPk(appId), ]) .spread((lastNumsPackages, basePackages, appInfo) => { return [ @@ -437,7 +437,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel ]) .spread((blobHash) => { return security.uploadPackageType(directoryPath).then((type) => { - return models.Apps.findById(appId).then((appInfo) => { + return models.Apps.findByPk(appId).then((appInfo) => { if (type > 0 && appInfo.os > 0 && appInfo.os != type) { var e = new AppError.AppError('it must be publish it by ios type'); log.debug(e); @@ -518,7 +518,7 @@ proto.modifyReleasePackage = function (packageId, params) { var isMandatory = _.get(params, 'isMandatory'); var isDisabled = _.get(params, 'isDisabled'); var rollout = _.get(params, 'rollout'); - return models.Packages.findById(packageId) + return models.Packages.findByPk(packageId) .then((packageInfo) => { if (!packageInfo) { throw new AppError.AppError(`packageInfo not found`); @@ -535,7 +535,7 @@ proto.modifyReleasePackage = function (packageId, params) { app_version: appVersion, }, }), - models.DeploymentsVersions.findById(packageInfo.deployment_version_id), + models.DeploymentsVersions.findByPk(packageInfo.deployment_version_id), ]) .spread((v1, v2) => { if (v1 && !_.eq(v1.id, v2.id)) { @@ -594,7 +594,7 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param if (!sourcePack) { throw new AppError.AppError('label does not exist.'); } - return models.DeploymentsVersions.findById( + return models.DeploymentsVersions.findByPk( sourcePack.deployment_version_id, ).then((deploymentsVersions) => { if (!deploymentsVersions) { @@ -615,13 +615,13 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param if (_.lte(lastDeploymentVersionId, 0)) { throw new AppError.AppError(`does not exist last_deployment_version_id.`); } - return models.DeploymentsVersions.findById(lastDeploymentVersionId) + return models.DeploymentsVersions.findByPk(lastDeploymentVersionId) .then((deploymentsVersions) => { var sourcePackId = _.get(deploymentsVersions, 'current_package_id', 0); if (_.lte(sourcePackId, 0)) { throw new AppError.AppError(`packageInfo not found.`); } - return models.Packages.findById(sourcePackId).then((sourcePack) => { + return models.Packages.findByPk(sourcePackId).then((sourcePack) => { if (!sourcePack) { throw new AppError.AppError(`packageInfo not found.`); } @@ -706,11 +706,11 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param proto.rollbackPackage = function (deploymentVersionId, targetLabel, rollbackUid) { var self = this; - return models.DeploymentsVersions.findById(deploymentVersionId).then((deploymentsVersions) => { + return models.DeploymentsVersions.findByPk(deploymentVersionId).then((deploymentsVersions) => { if (!deploymentsVersions) { throw new AppError.AppError('您之前还没有发布过版本'); } - return models.Packages.findById(deploymentsVersions.current_package_id) + return models.Packages.findByPk(deploymentsVersions.current_package_id) .then((currentPackageInfo) => { if (targetLabel) { return models.Packages.findAll({ diff --git a/models/deployments.js b/models/deployments.js index 25b726a8..02308906 100644 --- a/models/deployments.js +++ b/models/deployments.js @@ -33,7 +33,7 @@ module.exports = function (sequelize, DataTypes) { var self = this; return sequelize.transaction(function (t) { return self - .findById(deploymentId, { transaction: t, lock: t.LOCK.UPDATE }) + .findByPk(deploymentId, { transaction: t, lock: t.LOCK.UPDATE }) .then(function (data) { if (_.isEmpty(data)) { throw new AppError.AppError('does not find deployment'); diff --git a/package-lock.json b/package-lock.json index 7687738a..f86f6135 100644 --- a/package-lock.json +++ b/package-lock.json @@ -384,11 +384,6 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, - "@types/geojson": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", - "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" - }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -3463,11 +3458,6 @@ "is-property": "^1.0.2" } }, - "generic-pool": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.5.0.tgz", - "integrity": "sha512-dEkxmX+egB2o4NR80c/q+xzLLzLX+k68/K8xv81XprD+Sk7ZtP14VugeCz+fUwv5FzpWq40pPtAkzPRqT8ka9w==" - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -6445,22 +6435,11 @@ "dev": true }, "retry-as-promised": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", - "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz", + "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==", "requires": { - "bluebird": "^3.4.6", - "debug": "^2.6.9" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } + "any-promise": "^1.3.0" } }, "reusify": { @@ -6590,29 +6569,45 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "4.44.4", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.44.4.tgz", - "integrity": "sha512-nkHmYkbwQK7uwpgW9VBalCBnQqQ8mslTdgcBthtJLORuPvAYRPlfkXZMVUU9TLLJt9CX+/y0MYg0DpcP6ywsEQ==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.0.tgz", + "integrity": "sha512-m7Qw2MplbaLw2hA4lu8CwzH6+1cG/W4lu5fVJY8S256Rma8ma0tR9yufC7dZGQ1QsL6KnTaEYwztAbgfQbd3Lw==", "requires": { "bluebird": "^3.5.0", "cls-bluebird": "^2.1.0", - "debug": "^3.1.0", - "depd": "^1.1.0", + "debug": "^4.1.1", "dottie": "^2.0.0", - "generic-pool": "3.5.0", "inflection": "1.12.0", - "lodash": "^4.17.1", - "moment": "^2.20.0", - "moment-timezone": "^0.5.14", - "retry-as-promised": "^2.3.2", - "semver": "^5.5.0", - "terraformer-wkt-parser": "^1.1.2", + "lodash": "^4.17.15", + "moment": "^2.24.0", + "moment-timezone": "^0.5.21", + "retry-as-promised": "^3.2.0", + "semver": "^6.3.0", + "sequelize-pool": "^2.3.0", "toposort-class": "^1.0.1", - "uuid": "^3.2.1", - "validator": "^10.4.0", - "wkx": "^0.4.1" + "uuid": "^3.3.3", + "validator": "^10.11.0", + "wkx": "^0.4.8" }, "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, "validator": { "version": "10.11.0", "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", @@ -6620,6 +6615,11 @@ } } }, + "sequelize-pool": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-2.3.0.tgz", + "integrity": "sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA==" + }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -7147,7 +7147,17 @@ "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } }, "stringify-package": { "version": "1.0.1", @@ -7342,23 +7352,6 @@ } } }, - "terraformer": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.12.tgz", - "integrity": "sha512-MokUp0+MFal4CmJDVL6VAO1bKegeXcBM2RnPVfqcFIp2IIv8EbPAjG0j/vEy/vuKB8NVMMSF2vfpVS/QLe4DBg==", - "requires": { - "@types/geojson": "^7946.0.0 || ^1.0.0" - } - }, - "terraformer-wkt-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.1.tgz", - "integrity": "sha512-+CJyNLWb3lJ9RsZMTM66BY0MT3yIo4l4l22Jd9CrZuwzk54fsu4Sc7zejuS9fCITTuTQy3p06d4MZMVI7v5wSg==", - "requires": { - "@types/geojson": "^1.0.0", - "terraformer": "~1.0.5" - } - }, "text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", diff --git a/package.json b/package.json index 6cca368e..efc19c1d 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "recursive-readdir": "2.2.2", "redis": "3.1.2", "request": "2.88.2", - "sequelize": "4.44.4", + "sequelize": "5.22.0", "serve-favicon": "2.5.0", "slash": "3.0.0", "upyun": "3.4.4", From 6146bf47add06bb7e8967409c9e3049dc431c168 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 23 Aug 2021 03:52:39 +0000 Subject: [PATCH 072/347] fix(deps): update dependency sequelize to v5.22.4 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index f86f6135..502bacf3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6569,9 +6569,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "5.22.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.0.tgz", - "integrity": "sha512-m7Qw2MplbaLw2hA4lu8CwzH6+1cG/W4lu5fVJY8S256Rma8ma0tR9yufC7dZGQ1QsL6KnTaEYwztAbgfQbd3Lw==", + "version": "5.22.4", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.4.tgz", + "integrity": "sha512-xFQQ38HPg7EyDRDA+NdzMSRWbo9m6Z/RxpjnkBl3ggyQG+jRrup48x0jaw4Ox42h56wFnXOBC2NZOkTJfZeWCw==", "requires": { "bluebird": "^3.5.0", "cls-bluebird": "^2.1.0", diff --git a/package.json b/package.json index efc19c1d..002d887e 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "recursive-readdir": "2.2.2", "redis": "3.1.2", "request": "2.88.2", - "sequelize": "5.22.0", + "sequelize": "5.22.4", "serve-favicon": "2.5.0", "slash": "3.0.0", "upyun": "3.4.4", From bf7a152da4b3c86029c557b966a3106af9c9f8f9 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 13:43:39 +0800 Subject: [PATCH 073/347] fix(deps): update sequelize to v6 --- core/services/app-manager.js | 6 +-- core/services/deployments.js | 2 +- core/services/package-manager.js | 18 +++---- models/index.js | 2 +- package-lock.json | 93 +++++++++++++++----------------- package.json | 2 +- routes/apps.js | 8 +-- 7 files changed, 63 insertions(+), 68 deletions(-) diff --git a/core/services/app-manager.js b/core/services/app-manager.js index 02a92b89..14fc5d45 100644 --- a/core/services/app-manager.js +++ b/core/services/app-manager.js @@ -69,8 +69,8 @@ proto.deleteApp = function (appId) { }; proto.modifyApp = function (appId, params) { - return models.Apps.update(params, { where: { id: appId } }).spread( - (affectedCount, affectedRows) => { + return models.Apps.update(params, { where: { id: appId } }).then( + ([affectedCount, affectedRows]) => { if (!_.gt(affectedCount, 0)) { throw AppError.AppError('modify errors'); } @@ -135,7 +135,7 @@ proto.getAppDetailInfo = function (appInfo, currentUid) { return Promise.all([ models.Deployments.findAll({ where: { appid: appId } }), models.Collaborators.findAll({ where: { appid: appId } }), - ]).spread((deploymentInfos, collaboratorInfos) => { + ]).then(([deploymentInfos, collaboratorInfos]) => { return Promise.props({ collaborators: Promise.reduce( collaboratorInfos, diff --git a/core/services/deployments.js b/core/services/deployments.js index 10014a89..14d181fc 100644 --- a/core/services/deployments.js +++ b/core/services/deployments.js @@ -56,7 +56,7 @@ proto.renameDeloymentByName = function (deploymentName, appId, newName) { return models.Deployments.update( { name: newName }, { where: { name: deploymentName, appid: appId } }, - ).spread((affectedCount, affectedRow) => { + ).then(([affectedCount, affectedRow]) => { if (_.gt(affectedCount, 0)) { return { name: newName }; } else { diff --git a/core/services/package-manager.js b/core/services/package-manager.js index ee9fa740..cfdf61f3 100644 --- a/core/services/package-manager.js +++ b/core/services/package-manager.js @@ -86,7 +86,7 @@ proto.createDeploymentsVersionIfNotExist = function ( }, defaults: { current_package_id: 0 }, transaction: t, - }).spread((data, created) => { + }).then(([data, created]) => { if (created) { log.debug(`createDeploymentsVersionIfNotExist findOrCreate version ${appVersion}`); } @@ -354,13 +354,13 @@ proto.createDiffPackagesByLastNums = function (appId, originalPackage, num) { }), models.Apps.findByPk(appId), ]) - .spread((lastNumsPackages, basePackages, appInfo) => { + .then(([lastNumsPackages, basePackages, appInfo]) => { return [ _.uniqBy(_.unionBy(lastNumsPackages, basePackages, 'id'), 'package_hash'), appInfo, ]; }) - .spread((lastNumsPackages, appInfo) => { + .then(([lastNumsPackages, appInfo]) => { return self.createDiffPackages( originalPackage, lastNumsPackages, @@ -435,7 +435,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel return common.unzipFile(filePath, directoryPath); }), ]) - .spread((blobHash) => { + .then(([blobHash]) => { return security.uploadPackageType(directoryPath).then((type) => { return models.Apps.findByPk(appId).then((appInfo) => { if (type > 0 && appInfo.os > 0 && appInfo.os != type) { @@ -485,7 +485,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel }); }); }) - .spread((packageHash, manifestHash, blobHash) => { + .then(([packageHash, manifestHash, blobHash]) => { var stats = fs.statSync(filePath); var params = { releaseMethod: constConfig.RELEAS_EMETHOD_UPLOAD, @@ -537,7 +537,7 @@ proto.modifyReleasePackage = function (packageId, params) { }), models.DeploymentsVersions.findByPk(packageInfo.deployment_version_id), ]) - .spread((v1, v2) => { + .then(([v1, v2]) => { if (v1 && !_.eq(v1.id, v2.id)) { log.debug(v1); throw new AppError.AppError(`${appVersion} already exist.`); @@ -633,7 +633,7 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param }); } }) - .spread((sourcePack, deploymentsVersions) => { + .then(([sourcePack, deploymentsVersions]) => { var appFinalVersion = appVersion || deploymentsVersions.app_version; log.debug('sourcePack', sourcePack); log.debug('deploymentsVersions', deploymentsVersions); @@ -662,7 +662,7 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param return [sourcePack, deploymentsVersions, appFinalVersion]; }); }) - .spread((sourcePack, deploymentsVersions, appFinalVersion) => { + .then(([sourcePack, deploymentsVersions, appFinalVersion]) => { var versionInfo = common.validatorVersion(appFinalVersion); if (!versionInfo[0]) { log.debug(`targetBinaryVersion ${appVersion} not support.`); @@ -727,7 +727,7 @@ proto.rollbackPackage = function (deploymentVersionId, targetLabel, rollbackUid) }); } }) - .spread((currentPackageInfo, rollbackPackageInfos) => { + .then(([currentPackageInfo, rollbackPackageInfos]) => { if (currentPackageInfo && rollbackPackageInfos.length > 0) { for (var i = rollbackPackageInfos.length - 1; i >= 0; i--) { if ( diff --git a/models/index.js b/models/index.js index 42375bf7..92cd13b6 100644 --- a/models/index.js +++ b/models/index.js @@ -15,7 +15,7 @@ fs.readdirSync(__dirname) return file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js'; }) .forEach(function (file) { - var model = sequelize['import'](path.join(__dirname, file)); + var model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes); db[model.name] = model; }); diff --git a/package-lock.json b/package-lock.json index 502bacf3..1a59d0e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1321,15 +1321,6 @@ "wrap-ansi": "^7.0.0" } }, - "cls-bluebird": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", - "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", - "requires": { - "is-bluebird": "^1.0.2", - "shimmer": "^1.1.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4048,9 +4039,9 @@ "dev": true }, "inflection": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", - "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.1.tgz", + "integrity": "sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA==" }, "inflight": { "version": "1.0.6", @@ -4118,11 +4109,6 @@ "binary-extensions": "^2.0.0" } }, - "is-bluebird": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", - "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" - }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -6569,25 +6555,23 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.4.tgz", - "integrity": "sha512-xFQQ38HPg7EyDRDA+NdzMSRWbo9m6Z/RxpjnkBl3ggyQG+jRrup48x0jaw4Ox42h56wFnXOBC2NZOkTJfZeWCw==", + "version": "6.6.5", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.6.5.tgz", + "integrity": "sha512-QyRrJrDRiwuiILqTMHUA1yWOPIL12KlfmgZ3hnzQwbMvp2vJ6fzu9bYJQB+qPMosck4mBUggY4Cjoc6Et8FBIQ==", "requires": { - "bluebird": "^3.5.0", - "cls-bluebird": "^2.1.0", "debug": "^4.1.1", "dottie": "^2.0.0", - "inflection": "1.12.0", - "lodash": "^4.17.15", - "moment": "^2.24.0", - "moment-timezone": "^0.5.21", + "inflection": "1.13.1", + "lodash": "^4.17.20", + "moment": "^2.26.0", + "moment-timezone": "^0.5.31", "retry-as-promised": "^3.2.0", - "semver": "^6.3.0", - "sequelize-pool": "^2.3.0", + "semver": "^7.3.2", + "sequelize-pool": "^6.0.0", "toposort-class": "^1.0.1", - "uuid": "^3.3.3", - "validator": "^10.11.0", - "wkx": "^0.4.8" + "uuid": "^8.1.0", + "validator": "^13.6.0", + "wkx": "^0.5.0" }, "dependencies": { "debug": { @@ -6598,27 +6582,43 @@ "ms": "2.1.2" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, - "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, "sequelize-pool": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-2.3.0.tgz", - "integrity": "sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-6.1.0.tgz", + "integrity": "sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg==" }, "serialize-javascript": { "version": "6.0.0", @@ -6679,11 +6679,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, "should": { "version": "13.2.3", "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", @@ -7917,9 +7912,9 @@ } }, "wkx": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz", - "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", "requires": { "@types/node": "*" } diff --git a/package.json b/package.json index 002d887e..74f1d576 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "recursive-readdir": "2.2.2", "redis": "3.1.2", "request": "2.88.2", - "sequelize": "5.22.4", + "sequelize": "6.6.5", "serve-favicon": "2.5.0", "slash": "3.0.0", "upyun": "3.4.4", diff --git a/routes/apps.js b/routes/apps.js index 8386bc04..7dfa48e4 100644 --- a/routes/apps.js +++ b/routes/apps.js @@ -396,7 +396,7 @@ router.patch( }); } }) - .spread((deploymentInfo, packageInfo) => { + .then(([deploymentInfo, packageInfo]) => { if (!packageInfo) { throw new AppError.AppError('does not find the packageInfo'); } @@ -451,7 +451,7 @@ router.post( deployments.findDeloymentByName(sourceDeploymentName, appId), deployments.findDeloymentByName(destDeploymentName, appId), ]) - .spread((sourceDeploymentInfo, destDeploymentInfo) => { + .then(([sourceDeploymentInfo, destDeploymentInfo]) => { if (!sourceDeploymentInfo) { throw new AppError.AppError(`${sourceDeploymentName} does not exist.`); } @@ -460,7 +460,7 @@ router.post( } return [sourceDeploymentInfo, destDeploymentInfo]; }) - .spread((sourceDeploymentInfo, destDeploymentInfo) => { + .then(([sourceDeploymentInfo, destDeploymentInfo]) => { var params = _.get(req.body, 'packageInfo', {}); _.set(params, 'promoteUid', uid); return [ @@ -472,7 +472,7 @@ router.post( destDeploymentInfo, ]; }) - .spread((packages, destDeploymentInfo) => { + .then(([packages, destDeploymentInfo]) => { if (packages) { Promise.delay(1000).then(() => { packageManager From 4b0ae0f35c89e12ad47d319095c8d6682269cc33 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 14:06:18 +0800 Subject: [PATCH 074/347] refactor: promisify redis client using node built-in util --- core/services/account-manager.js | 16 ++++++++-------- core/services/client-manager.js | 18 ++++++++---------- core/utils/factory.js | 18 ++++++++++++++---- test/api/users/users.test.js | 4 ++-- 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/core/services/account-manager.js b/core/services/account-manager.js index d895a4c9..9d2b9da1 100644 --- a/core/services/account-manager.js +++ b/core/services/account-manager.js @@ -122,7 +122,7 @@ proto.login = function (account, password) { var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; var client = factory.getRedisClient('default'); return client - .getAsync(loginKey) + .get(loginKey) .then((loginErrorTimes) => { if (loginErrorTimes > tryLoginTimes) { throw new AppError.AppError(`您输入密码错误次数超过限制,帐户已经锁定`); @@ -140,17 +140,17 @@ proto.login = function (account, password) { var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; var client = factory.getRedisClient('default'); client - .existsAsync(loginKey) + .exists(loginKey) .then((isExists) => { if (!isExists) { var expires = moment().endOf('day').format('X') - moment().format('X'); - return client.setexAsync(loginKey, expires, 0); + return client.setex(loginKey, expires, 0); } return isExists; }) .then(() => { - return client.incrAsync(loginKey); + return client.incr(loginKey); }) .finally(() => client.quit()); } @@ -180,7 +180,7 @@ proto.sendRegisterCode = function (email) { var token = security.randToken(40); var client = factory.getRedisClient('default'); return client - .setexAsync(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) + .setex(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) .then(() => { return token; }) @@ -203,16 +203,16 @@ proto.checkRegisterCode = function (email, token) { .then(() => { var registerKey = `${REGISTER_CODE}${security.md5(email)}`; var client = factory.getRedisClient('default'); - return client.getAsync(registerKey).then((storageToken) => { + return client.get(registerKey).then((storageToken) => { if (_.isEmpty(storageToken)) { throw new AppError.AppError(`验证码已经失效,请您重新获取`); } if (!_.eq(token, storageToken)) { client - .ttlAsync(registerKey) + .ttl(registerKey) .then((ttl) => { if (ttl > 0) { - return client.expireAsync(registerKey, ttl - EXPIRED_SPEED); + return client.expire(registerKey, ttl - EXPIRED_SPEED); } return ttl; }) diff --git a/core/services/client-manager.js b/core/services/client-manager.js index 6ab73b3d..df8f75ee 100644 --- a/core/services/client-manager.js +++ b/core/services/client-manager.js @@ -29,11 +29,11 @@ proto.clearUpdateCheckCache = function (deploymentKey, appVersion, label, packag let redisCacheKey = this.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); var client = factory.getRedisClient('default'); return client - .keysAsync(redisCacheKey) + .keys(redisCacheKey) .then((data) => { if (_.isArray(data)) { return Promise.map(data, (key) => { - return client.delAsync(key); + return client.del(key); }); } return null; @@ -56,7 +56,7 @@ proto.updateCheckFromCache = function ( let redisCacheKey = self.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); var client = factory.getRedisClient('default'); return client - .getAsync(redisCacheKey) + .get(redisCacheKey) .then((data) => { if (data) { try { @@ -71,7 +71,7 @@ proto.updateCheckFromCache = function ( try { log.debug('updateCheckFromCache read from db'); var strRs = JSON.stringify(rs); - client.setexAsync(redisCacheKey, EXPIRED, strRs); + client.setex(redisCacheKey, EXPIRED, strRs); } catch (e) {} return rs; }); @@ -104,7 +104,7 @@ proto.chosenMan = function (packageId, rollout, clientUniqueId) { var client = factory.getRedisClient('default'); var redisCacheKey = self.getChosenManCacheKey(packageId, rollout, clientUniqueId); return client - .getAsync(redisCacheKey) + .get(redisCacheKey) .then((data) => { if (data == 1) { return true; @@ -112,11 +112,9 @@ proto.chosenMan = function (packageId, rollout, clientUniqueId) { return false; } else { return self.random(rollout).then((r) => { - return client - .setexAsync(redisCacheKey, 60 * 60 * 24 * 7, r ? 1 : 2) - .then(() => { - return r; - }); + return client.setex(redisCacheKey, 60 * 60 * 24 * 7, r ? 1 : 2).then(() => { + return r; + }); }); } }) diff --git a/core/utils/factory.js b/core/utils/factory.js index da12fb22..311289ac 100644 --- a/core/utils/factory.js +++ b/core/utils/factory.js @@ -1,13 +1,23 @@ 'use strict'; -var Promise = require('bluebird'); +var util = require('util'); var redis = require('redis'); -Promise.promisifyAll(redis.RedisClient.prototype); -Promise.promisifyAll(redis.Multi.prototype); var config = require('../config'); var _ = require('lodash'); + var factory = {}; module.exports = factory; factory.getRedisClient = function (name) { - return redis.createClient(_.get(config, `redis.${name}`)); + const client = redis.createClient(_.get(config, `redis.${name}`)); + return { + del: util.promisify(client.del).bind(client), + exists: util.promisify(client.exists).bind(client), + expire: util.promisify(client.expire).bind(client), + get: util.promisify(client.get).bind(client), + incr: util.promisify(client.incr).bind(client), + keys: util.promisify(client.keys).bind(client), + quit: util.promisify(client.quit).bind(client), + setex: util.promisify(client.setex).bind(client), + ttl: util.promisify(client.ttl).bind(client), + }; }; diff --git a/test/api/users/users.test.js b/test/api/users/users.test.js index 7a5eb3bd..40fbe9cb 100644 --- a/test/api/users/users.test.js +++ b/test/api/users/users.test.js @@ -90,7 +90,7 @@ describe('api/users/users.test.js', function () { before(function (done) { var client = factory.getRedisClient('default'); client - .getAsync(registerKey) + .get(registerKey) .then(function (t) { storageToken = t; done(); @@ -157,7 +157,7 @@ describe('api/users/users.test.js', function () { before(function (done) { var client = factory.getRedisClient('default'); client - .getAsync(registerKey) + .get(registerKey) .then(function (t) { storageToken = t; done(); From 9f61952fe162de9b433d59ee83ea1d2bd5d0d961 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 14:09:31 +0800 Subject: [PATCH 075/347] refactor: impl local delay() function --- routes/apps.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/routes/apps.js b/routes/apps.js index 7dfa48e4..7215bcce 100644 --- a/routes/apps.js +++ b/routes/apps.js @@ -18,6 +18,12 @@ const REGEX_IOS = /^(\w+)(-ios)$/; var log4js = require('log4js'); var log = log4js.getLogger('cps:apps'); +function delay(ms) { + return new Promise(function (resolve) { + setTimeout(resolve, ms); + }); +} + router.get('/', middleware.checkToken, (req, res, next) => { var uid = req.users.id; var appManager = new AppManager(); @@ -319,7 +325,7 @@ router.post( }) .then((packages) => { if (packages) { - Promise.delay(1000).then(() => { + delay(1000).then(() => { packageManager .createDiffPackagesByLastNums( deploymentInfo.appid, @@ -333,7 +339,7 @@ router.post( } //clear cache if exists. if (_.get(config, 'common.updateCheckCache', false) !== false) { - Promise.delay(2500).then(() => { + delay(2500).then(() => { var ClientManager = require('../core/services/client-manager'); var clientManager = new ClientManager(); clientManager.clearUpdateCheckCache( @@ -405,7 +411,7 @@ router.patch( .then(() => { //clear cache if exists. if (_.get(config, 'common.updateCheckCache', false) !== false) { - Promise.delay(2500).then(() => { + delay(2500).then(() => { var ClientManager = require('../core/services/client-manager'); var clientManager = new ClientManager(); clientManager.clearUpdateCheckCache( @@ -474,7 +480,7 @@ router.post( }) .then(([packages, destDeploymentInfo]) => { if (packages) { - Promise.delay(1000).then(() => { + delay(1000).then(() => { packageManager .createDiffPackagesByLastNums( destDeploymentInfo.appid, @@ -488,7 +494,7 @@ router.post( } //clear cache if exists. if (_.get(config, 'common.updateCheckCache', false) !== false) { - Promise.delay(2500).then(() => { + delay(2500).then(() => { var ClientManager = require('../core/services/client-manager'); var clientManager = new ClientManager(); clientManager.clearUpdateCheckCache( @@ -532,7 +538,7 @@ var rollbackCb = function (req, res, next) { .rollbackPackage(dep.last_deployment_version_id, targetLabel, uid) .then((packageInfo) => { if (packageInfo) { - Promise.delay(1000).then(() => { + delay(1000).then(() => { packageManager .createDiffPackagesByLastNums(dep.appid, packageInfo, 1) .catch((e) => { @@ -542,7 +548,7 @@ var rollbackCb = function (req, res, next) { } //clear cache if exists. if (_.get(config, 'common.updateCheckCache', false) !== false) { - Promise.delay(2500).then(() => { + delay(2500).then(() => { var ClientManager = require('../core/services/client-manager'); var clientManager = new ClientManager(); clientManager.clearUpdateCheckCache(dep.deployment_key, '*', '*', '*'); From af2c2eabb1537d1323a4a0dd32a32fc16a048914 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 14:57:05 +0800 Subject: [PATCH 076/347] refactor: remove bluebird, use native Promise --- bin/db | 145 +++++++++++++++-------------- config/config.js | 1 - core/services/app-manager.js | 60 ++++++------ core/services/client-manager.js | 9 +- core/services/deployments.js | 151 +++++++++++++++++-------------- core/services/package-manager.js | 44 +++++---- package-lock.json | 5 - package.json | 1 - routes/apps.js | 11 +-- routes/users.js | 1 - 10 files changed, 218 insertions(+), 210 deletions(-) diff --git a/bin/db b/bin/db index 6068d0a0..309132ec 100755 --- a/bin/db +++ b/bin/db @@ -7,7 +7,6 @@ var fs = require('fs'); var path = require('path'); var _ = require('lodash'); var mysql = require('mysql2'); -var Promise = require('bluebird'); var constConfig = require('../core/const'); var yargs = require('yargs'); var argv = yargs @@ -50,35 +49,37 @@ var dbpassword = argv.dbpassword; if (command === 'init') { var connection2; - var connection = mysql.createConnection({ - host: dbhost, - user: dbuser, - password: dbpassword, - port: dbport, - }); + var connection = mysql + .createConnection({ + host: dbhost, + user: dbuser, + password: dbpassword, + port: dbport, + }) + .promise(); var createDatabaseSql = argv.force ? `CREATE DATABASE IF NOT EXISTS ${dbname}` : `CREATE DATABASE ${dbname}`; - Promise.promisifyAll(connection); connection.connect(); connection - .queryAsync(createDatabaseSql) + .query(createDatabaseSql) .then(function () { - connection2 = mysql.createConnection({ - host: dbhost, - user: dbuser, - password: dbpassword, - database: dbname, - multipleStatements: true, - port: dbport, - }); + connection2 = mysql + .createConnection({ + host: dbhost, + user: dbuser, + password: dbpassword, + database: dbname, + multipleStatements: true, + port: dbport, + }) + .promise(); connection2.connect(); - Promise.promisifyAll(connection2); return connection2; }) .then(function (connection2) { var sql = fs.readFileSync(path.resolve(__dirname, '../sql/codepush-all.sql'), 'utf-8'); - return connection2.queryAsync(sql); + return connection2.query(sql); }) .then(function () { console.log('success.'); @@ -92,68 +93,64 @@ if (command === 'init') { }); } else if (command == 'upgrade') { try { - var connection = mysql.createConnection({ - host: dbhost, - user: dbuser, - password: dbpassword, - database: dbname, - multipleStatements: true, - port: dbport, - }); - Promise.promisifyAll(connection); + var connection = mysql + .createConnection({ + host: dbhost, + user: dbuser, + password: dbpassword, + database: dbname, + multipleStatements: true, + port: dbport, + }) + .promise(); connection.connect(); } catch (e) { console.error('connect mysql error, check params', e); return; } - return Promise.coroutine(function* (val) { - var version_no = '0.0.1'; - var rs = yield connection.queryAsync( - 'select `version` from `versions` where `type`=1 limit 1', - ); - version_no = _.get(rs, '0.version', '0.0.1'); - if (version_no == constConfig.CURRENT_DB_VERSION) { - console.log('Everything up-to-date.'); - process.exit(0); - } - var allSqlFile = [ - { - version: '0.2.14', - path: path.resolve(__dirname, '../sql/codepush-v0.2.14-patch.sql'), - }, - { - version: '0.2.15', - path: path.resolve(__dirname, '../sql/codepush-v0.2.15-patch.sql'), - }, - { - version: '0.3.0', - path: path.resolve(__dirname, '../sql/codepush-v0.3.0-patch.sql'), - }, - { - version: '0.4.0', - path: path.resolve(__dirname, '../sql/codepush-v0.4.0-patch.sql'), - }, - { - version: '0.5.0', - path: path.resolve(__dirname, '../sql/codepush-v0.5.0-patch.sql'), - }, - ]; - for (var i = 0; i < allSqlFile.length; i++) { - if (!_.gt(allSqlFile[i]['version'], version_no)) { - continue; - } - try { - var sql = fs.readFileSync(allSqlFile[i]['path'], 'utf-8'); - console.log('exec sql file:' + allSqlFile[i]['path']); - yield connection.queryAsync(sql); - console.log('success exec sql file:' + allSqlFile[i]['path']); - } catch (e) { - console.error('error exec sql file:' + allSqlFile[i]['path']); - throw e; + var version_no = '0.0.1'; + connection + .query('select `version` from `versions` where `type`=1 limit 1') + .then((rs) => { + version_no = _.get(rs, '0.version', '0.0.1'); + if (version_no == constConfig.CURRENT_DB_VERSION) { + console.log('Everything up-to-date.'); + process.exit(0); } - } - })() + var allSqlFile = [ + { + version: '0.2.14', + path: path.resolve(__dirname, '../sql/codepush-v0.2.14-patch.sql'), + }, + { + version: '0.2.15', + path: path.resolve(__dirname, '../sql/codepush-v0.2.15-patch.sql'), + }, + { + version: '0.3.0', + path: path.resolve(__dirname, '../sql/codepush-v0.3.0-patch.sql'), + }, + { + version: '0.4.0', + path: path.resolve(__dirname, '../sql/codepush-v0.4.0-patch.sql'), + }, + { + version: '0.5.0', + path: path.resolve(__dirname, '../sql/codepush-v0.5.0-patch.sql'), + }, + ]; + return allSqlFile.reduce((prev, sqlFile) => { + if (!_.gt(sqlFile['version'], version_no)) { + return prev; + } + var sql = fs.readFileSync(sqlFile['path'], 'utf-8'); + console.log('exec sql file:' + sqlFile['path']); + return connection.query(sql).then(() => { + console.log('success exec sql file:' + sqlFile['path']); + }); + }, Promise.resolve()); + }) .then(function () { console.log('Upgrade success.'); }) diff --git a/config/config.js b/config/config.js index 146880ce..e3f5db3e 100644 --- a/config/config.js +++ b/config/config.js @@ -11,7 +11,6 @@ config.development = { port: process.env.RDS_PORT || 3306, dialect: 'mysql', logging: false, - operatorsAliases: false, }, // Config for qiniu (http://www.qiniu.com/) cloud storage when storageType value is "qiniu". qiniu: { diff --git a/core/services/app-manager.js b/core/services/app-manager.js index 14fc5d45..3a9f625c 100644 --- a/core/services/app-manager.js +++ b/core/services/app-manager.js @@ -1,5 +1,4 @@ 'use strict'; -var Promise = require('bluebird'); var models = require('../../models'); var _ = require('lodash'); var security = require('../../core/utils/security'); @@ -108,24 +107,26 @@ proto.listApps = function (uid) { } }) .then((appInfos) => { - var rs = Promise.map(_.values(appInfos), (v) => { - return self.getAppDetailInfo(v, uid).then((info) => { - var constName = require('../const'); - if (info.os == constName.IOS) { - info.os = constName.IOS_NAME; - } else if (info.os == constName.ANDROID) { - info.os = constName.ANDROID_NAME; - } else if (info.os == constName.WINDOWS) { - info.os = constName.WINDOWS_NAME; - } - if (info.platform == constName.REACT_NATIVE) { - info.platform = constName.REACT_NATIVE_NAME; - } else if (info.platform == constName.CORDOVA) { - info.platform = constName.CORDOVA_NAME; - } - return info; - }); - }); + var rs = Promise.all( + _.values(appInfos).map((v) => { + return self.getAppDetailInfo(v, uid).then((info) => { + var constName = require('../const'); + if (info.os == constName.IOS) { + info.os = constName.IOS_NAME; + } else if (info.os == constName.ANDROID) { + info.os = constName.ANDROID_NAME; + } else if (info.os == constName.WINDOWS) { + info.os = constName.WINDOWS_NAME; + } + if (info.platform == constName.REACT_NATIVE) { + info.platform = constName.REACT_NATIVE_NAME; + } else if (info.platform == constName.CORDOVA) { + info.platform = constName.CORDOVA_NAME; + } + return info; + }); + }), + ); return rs; }); }; @@ -134,12 +135,9 @@ proto.getAppDetailInfo = function (appInfo, currentUid) { var appId = appInfo.get('id'); return Promise.all([ models.Deployments.findAll({ where: { appid: appId } }), - models.Collaborators.findAll({ where: { appid: appId } }), - ]).then(([deploymentInfos, collaboratorInfos]) => { - return Promise.props({ - collaborators: Promise.reduce( - collaboratorInfos, - (allCol, collaborator) => { + models.Collaborators.findAll({ where: { appid: appId } }).then((collaboratorInfos) => { + return collaboratorInfos.reduce((prev, collaborator) => { + return prev.then((allCol) => { return models.Users.findOne({ where: { id: collaborator.get('uid') } }).then( (u) => { var isCurrentAccount = false; @@ -153,10 +151,12 @@ proto.getAppDetailInfo = function (appInfo, currentUid) { return allCol; }, ); - }, - {}, - ), - + }); + }, Promise.resolve({})); + }), + ]).then(([deploymentInfos, collaborators]) => { + return { + collaborators, deployments: _.map(deploymentInfos, (item) => { return _.get(item, 'name'); }), @@ -164,6 +164,6 @@ proto.getAppDetailInfo = function (appInfo, currentUid) { platform: appInfo.get('platform'), name: appInfo.get('name'), id: appInfo.get('id'), - }); + }; }); }; diff --git a/core/services/client-manager.js b/core/services/client-manager.js index df8f75ee..e59cf60d 100644 --- a/core/services/client-manager.js +++ b/core/services/client-manager.js @@ -1,5 +1,4 @@ 'use strict'; -var Promise = require('bluebird'); var models = require('../../models'); var _ = require('lodash'); var common = require('../utils/common'); @@ -32,9 +31,11 @@ proto.clearUpdateCheckCache = function (deploymentKey, appVersion, label, packag .keys(redisCacheKey) .then((data) => { if (_.isArray(data)) { - return Promise.map(data, (key) => { - return client.del(key); - }); + return Promise.all( + data.map((key) => { + return client.del(key); + }), + ); } return null; }) diff --git a/core/services/deployments.js b/core/services/deployments.js index 14d181fc..8f8e7526 100644 --- a/core/services/deployments.js +++ b/core/services/deployments.js @@ -1,5 +1,4 @@ 'use strict'; -var Promise = require('bluebird'); var models = require('../../models'); var security = require('../../core/utils/security'); var common = require('../../core/utils/common'); @@ -88,38 +87,45 @@ proto.findDeloymentByName = function (deploymentName, appId) { proto.findPackagesAndOtherInfos = function (packageId) { return models.Packages.findOne({ where: { id: packageId }, - }).then((packageInfo) => { - if (!packageInfo) { - return null; - } - return Promise.props({ - packageInfo: packageInfo, - packageDiffMap: models.PackagesDiff.findAll({ - where: { package_id: packageId }, - }).then((diffs) => { - if (diffs.length > 0) { - return _.reduce( - diffs, - (result, v) => { - result[_.get(v, 'diff_against_package_hash')] = { - size: _.get(v, 'diff_size'), - url: common.getBlobDownloadUrl(_.get(v, 'diff_blob_url')), - }; - return result; - }, - {}, - ); - } + }) + .then((packageInfo) => { + if (!packageInfo) { return null; - }), - userInfo: models.Users.findOne({ - where: { id: packageInfo.released_by }, - }), - deploymentsVersions: models.DeploymentsVersions.findByPk( - packageInfo.deployment_version_id, - ), + } + return Promise.all([ + Promise.resolve(packageInfo), + models.PackagesDiff.findAll({ + where: { package_id: packageId }, + }).then((diffs) => { + if (diffs.length > 0) { + return _.reduce( + diffs, + (result, v) => { + result[_.get(v, 'diff_against_package_hash')] = { + size: _.get(v, 'diff_size'), + url: common.getBlobDownloadUrl(_.get(v, 'diff_blob_url')), + }; + return result; + }, + {}, + ); + } + return null; + }), + models.Users.findOne({ + where: { id: packageInfo.released_by }, + }), + models.DeploymentsVersions.findByPk(packageInfo.deployment_version_id), + ]); + }) + .then(([packageInfo, packageDiffMap, userInfo, deploymentsVersions]) => { + return { + packageInfo, + packageDiffMap, + userInfo, + deploymentsVersions, + }; }); - }); }; proto.findDeloymentsPackages = function (deploymentsVersionsId) { @@ -166,23 +172,26 @@ proto.listDeloyments = function (appId) { if (_.isEmpty(deploymentsInfos)) { return []; } - return Promise.map(deploymentsInfos, (v) => { - return self.listDeloyment(v); - }); + return Promise.all( + deploymentsInfos.map((v) => { + return self.listDeloyment(v); + }), + ); }); }; proto.listDeloyment = function (deploymentInfo) { - const self = this; - return Promise.props({ - createdTime: parseInt(moment(deploymentInfo.created_at).format('x')), - id: `${deploymentInfo.id}`, - key: deploymentInfo.deployment_key, - name: deploymentInfo.name, - package: self - .findDeloymentsPackages([deploymentInfo.last_deployment_version_id]) - .then(self.formatPackage), - }); + return this.findDeloymentsPackages([deploymentInfo.last_deployment_version_id]) + .then(this.formatPackage) + .then((packageInfo) => { + return { + createdTime: parseInt(moment(deploymentInfo.created_at).format('x')), + id: `${deploymentInfo.id}`, + key: deploymentInfo.deployment_key, + name: deploymentInfo.name, + package: packageInfo, + }; + }); }; proto.getDeploymentHistory = function (deploymentId) { @@ -198,9 +207,11 @@ proto.getDeploymentHistory = function (deploymentId) { }); }) .then((packageIds) => { - return Promise.map(packageIds, (v) => { - return self.findPackagesAndOtherInfos(v).then(self.formatPackage); - }); + return Promise.all( + packageIds.map((v) => { + return self.findPackagesAndOtherInfos(v).then(self.formatPackage); + }), + ); }); }; @@ -216,38 +227,44 @@ proto.deleteDeploymentHistory = function (deploymentId) { order: [['id', 'desc']], limit: 1000, }).then((rs) => { - return Promise.map(rs, (v) => { - return v.destroy({ transaction: t }); - }); + return Promise.all( + rs.map((v) => { + return v.destroy({ transaction: t }); + }), + ); }), models.DeploymentsVersions.findAll({ where: { deployment_id: deploymentId }, order: [['id', 'desc']], limit: 1000, }).then((rs) => { - return Promise.map(rs, (v) => { - return v.destroy({ transaction: t }); - }); + return Promise.all( + rs.map((v) => { + return v.destroy({ transaction: t }); + }), + ); }), models.Packages.findAll({ where: { deployment_id: deploymentId }, order: [['id', 'desc']], limit: 1000, }).then((rs) => { - return Promise.map(rs, (v) => { - return v.destroy({ transaction: t }).then(() => { - return Promise.all([ - models.PackagesMetrics.destroy({ - where: { package_id: v.get('id') }, - transaction: t, - }), - models.PackagesDiff.destroy({ - where: { package_id: v.get('id') }, - transaction: t, - }), - ]); - }); - }); + return Promise.all( + rs.map((v) => { + return v.destroy({ transaction: t }).then(() => { + return Promise.all([ + models.PackagesMetrics.destroy({ + where: { package_id: v.get('id') }, + transaction: t, + }), + models.PackagesDiff.destroy({ + where: { package_id: v.get('id') }, + transaction: t, + }), + ]); + }); + }), + ); }), ]); }); diff --git a/core/services/package-manager.js b/core/services/package-manager.js index cfdf61f3..793ecacf 100644 --- a/core/services/package-manager.js +++ b/core/services/package-manager.js @@ -1,5 +1,4 @@ 'use strict'; -var Promise = require('bluebird'); var models = require('../../models'); var security = require('../utils/security'); var _ = require('lodash'); @@ -386,27 +385,32 @@ proto.createDiffPackages = function (originalPackage, destPackages, isUseDiffTex .createEmptyFolder(workDirectoryPath) .then(() => self.downloadPackageAndExtract(workDirectoryPath, package_hash, blob_url)) .then((originDataCenter) => - Promise.map(destPackages, (v) => { - var diffWorkDirectoryPath = path.join(workDirectoryPath, _.get(v, 'package_hash')); - common.createEmptyFolderSync(diffWorkDirectoryPath); - return self - .downloadPackageAndExtract( - diffWorkDirectoryPath, + Promise.all( + destPackages.map((v) => { + var diffWorkDirectoryPath = path.join( + workDirectoryPath, _.get(v, 'package_hash'), - _.get(v, 'blob_url'), - ) - .then((oldPackageDataCenter) => - self.generateOneDiffPackage( - diffWorkDirectoryPath, - originalPackage.id, - originDataCenter, - oldPackageDataCenter, - v.package_hash, - v.manifest_blob_url, - isUseDiffText, - ), ); - }), + common.createEmptyFolderSync(diffWorkDirectoryPath); + return self + .downloadPackageAndExtract( + diffWorkDirectoryPath, + _.get(v, 'package_hash'), + _.get(v, 'blob_url'), + ) + .then((oldPackageDataCenter) => + self.generateOneDiffPackage( + diffWorkDirectoryPath, + originalPackage.id, + originDataCenter, + oldPackageDataCenter, + v.package_hash, + v.manifest_blob_url, + isUseDiffText, + ), + ); + }), + ), ) .finally(() => common.deleteFolderSync(workDirectoryPath)); }; diff --git a/package-lock.json b/package-lock.json index 1a59d0e8..3a68f1d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1114,11 +1114,6 @@ } } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", diff --git a/package.json b/package.json index 74f1d576..bb7c0549 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "aliyun-sdk": "1.12.3", "aws-sdk": "2.973.0", "bcryptjs": "2.4.3", - "bluebird": "3.7.2", "body-parser": "1.19.0", "cookie-parser": "1.4.5", "cos-nodejs-sdk-v5": "2.10.0", diff --git a/routes/apps.js b/routes/apps.js index 7215bcce..03eb02c2 100644 --- a/routes/apps.js +++ b/routes/apps.js @@ -1,5 +1,4 @@ var express = require('express'); -var Promise = require('bluebird'); var router = express.Router(); var _ = require('lodash'); var middleware = require('../core/middleware'); @@ -135,9 +134,8 @@ router.get( return deployments.getAllPackageIdsByDeploymentsId(deploymentInfo.id); }) .then((packagesInfos) => { - return Promise.reduce( - packagesInfos, - (result, v) => { + return packagesInfos.reduce((prev, v) => { + return prev.then((result) => { return packageManager.getMetricsbyPackageId(v.get('id')).then((metrics) => { if (metrics) { result[v.get('label')] = { @@ -149,9 +147,8 @@ router.get( } return result; }); - }, - {}, - ); + }); + }, Promise.resolve({})); }) .then((rs) => { res.send({ metrics: rs }); diff --git a/routes/users.js b/routes/users.js index 3cb62972..dc361fe6 100644 --- a/routes/users.js +++ b/routes/users.js @@ -1,6 +1,5 @@ var express = require('express'); var router = express.Router(); -var Promise = require('bluebird'); var _ = require('lodash'); var models = require('../models'); var middleware = require('../core/middleware'); From e227b6eeaa8ac17f9c15c436be7a9e9ed7221bdd Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 15:11:45 +0800 Subject: [PATCH 077/347] refactor: use node-fetch replace request --- core/utils/common.js | 67 ++++++++++++++++++++------------------------ package-lock.json | 5 ++++ package.json | 2 +- 3 files changed, 36 insertions(+), 38 deletions(-) diff --git a/core/utils/common.js b/core/utils/common.js index 8813b89d..d3d30a20 100644 --- a/core/utils/common.js +++ b/core/utils/common.js @@ -1,18 +1,24 @@ 'use strict'; -var fs = require('fs'); -var fsextra = require('fs-extra'); -var extract = require('extract-zip'); -var config = require('../config'); +const fs = require('fs'); +const fsextra = require('fs-extra'); +const extract = require('extract-zip'); var _ = require('lodash'); var validator = require('validator'); var qiniu = require('qiniu'); var upyun = require('upyun'); -var common = {}; +const jschardet = require('jschardet'); +const log4js = require('log4js'); +const path = require('path'); +const util = require('util'); +const streamPipeline = util.promisify(require('stream').pipeline); +const fetch = require('node-fetch'); + +var config = require('../config'); var AppError = require('../app-error'); -var jschardet = require('jschardet'); -var log4js = require('log4js'); -var path = require('path'); + var log = log4js.getLogger('cps:utils:common'); + +var common = {}; module.exports = common; common.detectIsTextFile = function (filePath) { @@ -91,35 +97,22 @@ common.validatorVersion = function (versionNo) { return [flag, min, max]; }; -common.createFileFromRequest = function (url, filePath) { - return new Promise((resolve, reject) => { - fs.exists(filePath, function (exists) { - if (!exists) { - var request = require('request'); - log.debug(`createFileFromRequest url:${url}`); - request(url) - .on('error', function (error) { - reject(error); - }) - .on('response', function (response) { - if (response.statusCode == 200) { - let stream = fs.createWriteStream(filePath); - response.pipe(stream); - stream.on('close', function () { - resolve(null); - }); - stream.on('error', function (error) { - reject(error); - }); - } else { - reject({ message: 'request fail' }); - } - }); - } else { - resolve(null); - } - }); - }); +common.createFileFromRequest = async function (url, filePath) { + try { + await fs.promises.stat(filePath); + return; + } catch (err) { + if (err.code !== 'ENOENT') { + throw error; + } + } + + log.debug(`createFileFromRequest url:${url}`); + const response = await fetch(url); + if (!response.ok) { + throw new AppError.AppError(`unexpected response ${response.statusText}`); + } + await streamPipeline(response.body, fs.createWriteStream(filePath)); }; common.copySync = function (sourceDst, targertDst) { diff --git a/package-lock.json b/package-lock.json index 3a68f1d8..108cdf8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5333,6 +5333,11 @@ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, "node_memcached": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/node_memcached/-/node_memcached-1.1.3.tgz", diff --git a/package.json b/package.json index bb7c0549..a96c8cc1 100644 --- a/package.json +++ b/package.json @@ -53,13 +53,13 @@ "log4js": "6.3.0", "moment": "2.29.1", "mysql2": "2.3.0", + "node-fetch": "2.6.1", "nodemailer": "6.6.3", "pug": "3.0.2", "qiniu": "7.4.0", "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "3.1.2", - "request": "2.88.2", "sequelize": "6.6.5", "serve-favicon": "2.5.0", "slash": "3.0.0", From b5b550322fae8803375f68bf159f253ba8b8bab4 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 15:12:15 +0800 Subject: [PATCH 078/347] chore: npm dedupe --- package-lock.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 108cdf8a..c934990c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6882,12 +6882,6 @@ "dev": true, "requires": { "readable-stream": "^3.0.0" - }, - "dependencies": { - "safe-buffer": { - "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "sprintf-js": { From 247a7ab1a4f9fd9cc4f74719bb68a5360f93c0d7 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 15:14:54 +0800 Subject: [PATCH 079/347] chore(release): 1.0.4 --- CHANGELOG.md | 9 +++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7444c4ef..8dd4a506 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.0.4](https://github.com/shm-open/code-push-server/compare/v1.0.3...v1.0.4) (2021-08-23) + + +### Bug Fixes + +* **deps:** update dependency sequelize to v5.22.4 ([6146bf4](https://github.com/shm-open/code-push-server/commit/6146bf47add06bb7e8967409c9e3049dc431c168)) +* **deps:** update sequelize to v5 ([bbf8cad](https://github.com/shm-open/code-push-server/commit/bbf8cadd130da6888bd04d2beef5b15c6a620c63)) +* **deps:** update sequelize to v6 ([bf7a152](https://github.com/shm-open/code-push-server/commit/bf7a152da4b3c86029c557b966a3106af9c9f8f9)) + ### [1.0.3](https://github.com/shm-open/code-push-server/compare/v1.0.2...v1.0.3) (2021-08-23) diff --git a/package-lock.json b/package-lock.json index c934990c..bed673ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "1.0.3", + "version": "1.0.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index a96c8cc1..c79526cc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "1.0.3", + "version": "1.0.4", "license": "MIT", "repository": { "type": "git", From 6dbe8dfa192331adcf642d0804ed68362c3e2370 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 16:20:26 +0800 Subject: [PATCH 080/347] fix: omit undefined query condition for no package_hash update check --- core/services/client-manager.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/services/client-manager.js b/core/services/client-manager.js index e59cf60d..1c110a2c 100644 --- a/core/services/client-manager.js +++ b/core/services/client-manager.js @@ -211,10 +211,13 @@ proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, cli !_.eq(_.get(packages, 'package_hash', ''), packageHash) ) { return models.PackagesDiff.findOne({ - where: { - package_id: packages.id, - diff_against_package_hash: packageHash, - }, + where: _.omitBy( + { + package_id: packages.id, + diff_against_package_hash: packageHash, + }, + _.isUndefined, + ), }).then((diffPackage) => { if (!_.isEmpty(diffPackage)) { rs.downloadURL = common.getBlobDownloadUrl( From 34f0bfdc3cf503378aac51b5fc4640ec965f722c Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 16:21:31 +0800 Subject: [PATCH 081/347] chore(release): 1.0.5 --- CHANGELOG.md | 7 +++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dd4a506..8d9d2df1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.0.5](https://github.com/shm-open/code-push-server/compare/v1.0.4...v1.0.5) (2021-08-23) + + +### Bug Fixes + +* omit undefined query condition for no package_hash update check ([6dbe8df](https://github.com/shm-open/code-push-server/commit/6dbe8dfa192331adcf642d0804ed68362c3e2370)) + ### [1.0.4](https://github.com/shm-open/code-push-server/compare/v1.0.3...v1.0.4) (2021-08-23) diff --git a/package-lock.json b/package-lock.json index bed673ca..0317961d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "1.0.4", + "version": "1.0.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c79526cc..a3f07c11 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "1.0.4", + "version": "1.0.5", "license": "MIT", "repository": { "type": "git", From d00a8cc6479ebe2c5395ef9214ffc1af6497fd3c Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 21:07:28 +0800 Subject: [PATCH 082/347] fix: skip find diff package if check update without a client side packageHash --- core/services/client-manager.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core/services/client-manager.js b/core/services/client-manager.js index 1c110a2c..83e66677 100644 --- a/core/services/client-manager.js +++ b/core/services/client-manager.js @@ -205,19 +205,17 @@ proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, cli return packages; }) .then((packages) => { - //增量更新 + // 尝试增量更新 if ( + packageHash && !_.isEmpty(packages) && !_.eq(_.get(packages, 'package_hash', ''), packageHash) ) { return models.PackagesDiff.findOne({ - where: _.omitBy( - { - package_id: packages.id, - diff_against_package_hash: packageHash, - }, - _.isUndefined, - ), + where: { + package_id: packages.id, + diff_against_package_hash: packageHash, + }, }).then((diffPackage) => { if (!_.isEmpty(diffPackage)) { rs.downloadURL = common.getBlobDownloadUrl( From 9301e29108144038ec14aa3cfbf1fe6873c6db24 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 23 Aug 2021 21:08:10 +0800 Subject: [PATCH 083/347] chore(release): 1.0.6 --- CHANGELOG.md | 7 +++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d9d2df1..d74710d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.0.6](https://github.com/shm-open/code-push-server/compare/v1.0.5...v1.0.6) (2021-08-23) + + +### Bug Fixes + +* skip find diff package if check update without a client side packageHash ([d00a8cc](https://github.com/shm-open/code-push-server/commit/d00a8cc6479ebe2c5395ef9214ffc1af6497fd3c)) + ### [1.0.5](https://github.com/shm-open/code-push-server/compare/v1.0.4...v1.0.5) (2021-08-23) diff --git a/package-lock.json b/package-lock.json index 0317961d..0f61f17b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "1.0.5", + "version": "1.0.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index a3f07c11..d35b806a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "1.0.5", + "version": "1.0.6", "license": "MIT", "repository": { "type": "git", From ce7eb3f86e4f31b8172fc93500d4c6f209a26d37 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 24 Aug 2021 19:15:00 +0000 Subject: [PATCH 084/347] fix(deps): update dependency aws-sdk to v2.975.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0f61f17b..a2e68534 100644 --- a/package-lock.json +++ b/package-lock.json @@ -959,9 +959,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.973.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.973.0.tgz", - "integrity": "sha512-IhVDIrI+7x+643S7HKDZ8bA8rTKfkCLSlxUZcP9W39PD5y04Hwamxou/kNTtXzdg1yyriq3d5tCVu6w5Z5QFDQ==", + "version": "2.975.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.975.0.tgz", + "integrity": "sha512-cmRcM+gU+rfW1RZjca3bdbRTQV6WHuCI6NuqnDgd5HoqufylCrNI/wtysPK1IMJLsAhrcsY0U0YRx+Y/hxQNoQ==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index d35b806a..dbf004cb 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.3", - "aws-sdk": "2.973.0", + "aws-sdk": "2.975.0", "bcryptjs": "2.4.3", "body-parser": "1.19.0", "cookie-parser": "1.4.5", From e598d4b07676615f02514ede88f071d2534bd091 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 25 Aug 2021 18:59:52 +0000 Subject: [PATCH 085/347] fix(deps): update dependency aws-sdk to v2.976.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index a2e68534..e1a7ad90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -959,9 +959,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.975.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.975.0.tgz", - "integrity": "sha512-cmRcM+gU+rfW1RZjca3bdbRTQV6WHuCI6NuqnDgd5HoqufylCrNI/wtysPK1IMJLsAhrcsY0U0YRx+Y/hxQNoQ==", + "version": "2.976.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.976.0.tgz", + "integrity": "sha512-LWVh3nko6yGDfGcDW9nIClaukthkTueq7I/dXVNv4g9kuy2VOl5fVTPMACgTibWINAM29wZCM+gVQSSZu/Veow==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index dbf004cb..18275d6e 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.3", - "aws-sdk": "2.975.0", + "aws-sdk": "2.976.0", "bcryptjs": "2.4.3", "body-parser": "1.19.0", "cookie-parser": "1.4.5", From 1ff838c85bfc96744943621dcee54abbdb20c76e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 27 Aug 2021 18:55:42 +0000 Subject: [PATCH 086/347] fix(deps): update dependency aws-sdk to v2.978.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1a7ad90..2a7d40ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -959,9 +959,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.976.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.976.0.tgz", - "integrity": "sha512-LWVh3nko6yGDfGcDW9nIClaukthkTueq7I/dXVNv4g9kuy2VOl5fVTPMACgTibWINAM29wZCM+gVQSSZu/Veow==", + "version": "2.978.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.978.0.tgz", + "integrity": "sha512-UO1HP2b9FFtPhc5KbzEJ9oMBdzCmVv9nQTb+yIEh6SajcaErmK/ryleLOuPq9EsirE6wgb6mtf2qodRFucUA3g==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index 18275d6e..0136c586 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.3", - "aws-sdk": "2.976.0", + "aws-sdk": "2.978.0", "bcryptjs": "2.4.3", "body-parser": "1.19.0", "cookie-parser": "1.4.5", From 39528ae0fe817be65be057e030a30877551119ce Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 28 Aug 2021 14:32:12 +0000 Subject: [PATCH 087/347] chore(deps): update dependency mocha to v9.1.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1a7ad90..0a2d3557 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5045,9 +5045,9 @@ } }, "mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-Kjg/XxYOFFUi0h/FwMOeb6RoroiZ+P1yOfya6NK7h3dNhahrJx1r2XIT3ge4ZQvJM86mdjNA+W5phqRQh7DwCg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-0wE74YMgOkCgBUj8VyIDwmLUjTsS13WV1Pg7l0SHea2qzZzlq7MDnfbPsHKcELBRk3+izEVkRofjmClpycudCA==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", diff --git a/package.json b/package.json index 18275d6e..9f9de232 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "devDependencies": { "@shm-open/eslint-config-bundle": "1.4.0", "istanbul": "0.4.5", - "mocha": "9.1.0", + "mocha": "9.1.1", "should": "13.2.3", "standard-version": "9.3.1", "supertest": "6.1.6", From f046a22864429000a3d43537a683c7dbb911a3f2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 30 Aug 2021 19:11:03 +0000 Subject: [PATCH 088/347] fix(deps): update dependency aws-sdk to v2.979.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0545d248..bbfe609c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -959,9 +959,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.978.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.978.0.tgz", - "integrity": "sha512-UO1HP2b9FFtPhc5KbzEJ9oMBdzCmVv9nQTb+yIEh6SajcaErmK/ryleLOuPq9EsirE6wgb6mtf2qodRFucUA3g==", + "version": "2.979.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.979.0.tgz", + "integrity": "sha512-pKKhpYZwmihCvuH3757WHY8JQI9g2wvtF3s0aiyH2xCUmX/6uekhExz/utD4uqZP3m3PwKZPGQkQkH30DtHrPw==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index 19909db2..94aa33f0 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.3", - "aws-sdk": "2.978.0", + "aws-sdk": "2.979.0", "bcryptjs": "2.4.3", "body-parser": "1.19.0", "cookie-parser": "1.4.5", From 391ae85aa0b9b4b92ca4360db721edcb3f7bb01c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 31 Aug 2021 03:07:39 +0000 Subject: [PATCH 089/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.5.0 --- package-lock.json | 162 +++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 89 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index bbfe609c..abe8bde6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -356,26 +356,26 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.4.0.tgz", - "integrity": "sha512-9ndIW4GdwbfB//vZPW7LORW/H7a8nVRGqE3UYXm/r91nfB0Jv+6TJ9Mt9xG9yg/2KYK8jO8h9Apsox/ugm+WXw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.5.0.tgz", + "integrity": "sha512-jONyPLdOUGVquR5zEgP+JPDKPntoZjtcN6CA0OOR9wWt1sxZDoDtL2MmGSmJyE2G4dcnfvVfXiG2hhcWvDmBMg==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "4.29.0", - "@typescript-eslint/parser": "4.29.0", + "@typescript-eslint/eslint-plugin": "4.30.0", + "@typescript-eslint/parser": "4.30.0", "babel-eslint": "10.1.0", "eslint": "7.32.0", "eslint-config-airbnb-base": "14.2.1", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.4.0", "eslint-plugin-deprecation": "1.2.1", - "eslint-plugin-import": "2.23.4", + "eslint-plugin-import": "2.24.2", "eslint-plugin-jsx-a11y": "6.4.1", - "eslint-plugin-prettier": "3.4.0", - "eslint-plugin-react": "7.24.0", + "eslint-plugin-prettier": "4.0.0", + "eslint-plugin-react": "7.25.1", "eslint-plugin-react-hooks": "4.2.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.2", + "eslint-plugin-taro": "3.3.5", "prettier": "2.3.2" } }, @@ -390,6 +390,12 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", @@ -422,13 +428,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.0.tgz", - "integrity": "sha512-eiREtqWRZ8aVJcNru7cT/AMVnYd9a2UHsfZT8MR1dW3UUEg6jDv9EQ9Cq4CUPZesyQ58YUpoAADGv71jY8RwgA==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz", + "integrity": "sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.29.0", - "@typescript-eslint/scope-manager": "4.29.0", + "@typescript-eslint/experimental-utils": "4.30.0", + "@typescript-eslint/scope-manager": "4.30.0", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.1.0", @@ -478,28 +484,28 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.0.tgz", - "integrity": "sha512-FpNVKykfeaIxlArLUP/yQfv/5/3rhl1ov6RWgud4OgbqWLkEq7lqgQU9iiavZRzpzCRQV4XddyFz3wFXdkiX9w==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz", + "integrity": "sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.29.0", - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/typescript-estree": "4.29.0", + "@typescript-eslint/scope-manager": "4.30.0", + "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/typescript-estree": "4.30.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.0.tgz", - "integrity": "sha512-+92YRNHFdXgq+GhWQPT2bmjX09X7EH36JfgN2/4wmhtwV/HPxozpCNst8jrWcngLtEVd/4zAwA6BKojAlf+YqA==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.30.0.tgz", + "integrity": "sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.29.0", - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/typescript-estree": "4.29.0", + "@typescript-eslint/scope-manager": "4.30.0", + "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/typescript-estree": "4.30.0", "debug": "^4.3.1" }, "dependencies": { @@ -521,29 +527,29 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.0.tgz", - "integrity": "sha512-HPq7XAaDMM3DpmuijxLV9Io8/6pQnliiXMQUcAdjpJJSR+fdmbD/zHCd7hMkjJn04UQtCQBtshgxClzg6NIS2w==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz", + "integrity": "sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/visitor-keys": "4.29.0" + "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/visitor-keys": "4.30.0" } }, "@typescript-eslint/types": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.0.tgz", - "integrity": "sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.30.0.tgz", + "integrity": "sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz", - "integrity": "sha512-8ZpNHDIOyqzzgZrQW9+xQ4k5hM62Xy2R4RPO3DQxMc5Rq5QkCdSpk/drka+DL9w6sXNzV5nrdlBmf8+x495QXQ==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz", + "integrity": "sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/visitor-keys": "4.29.0", + "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/visitor-keys": "4.30.0", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -593,12 +599,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz", - "integrity": "sha512-LoaofO1C/jAJYs0uEpYMXfHboGXzOJeV118X4OsZu9f7rG7Pr9B3+4HTU8+err81rADa4xfQmAxnRnPAI2jp+Q==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz", + "integrity": "sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.0", + "@typescript-eslint/types": "4.30.0", "eslint-visitor-keys": "^2.0.0" } }, @@ -1011,9 +1017,9 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axe-core": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.2.tgz", - "integrity": "sha512-5LMaDRWm8ZFPAEdzTYmgjjEdj1YnQcpfrVajO/sn/LhbpGp0Y0H64c2hLZI1gRMxfA+w1S71Uc/nHaOXgcCvGg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.3.tgz", + "integrity": "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==", "dev": true }, "axios": { @@ -1748,9 +1754,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.2.tgz", - "integrity": "sha512-oxKe64UH049mJqrKkynWp6Vu0Rlm/BTXO/bJZuN2mmR3RtOFNepLlSWDd1eo16PzHpQAoNG97rLU1V/YxesJjw==", + "version": "3.16.4", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.4.tgz", + "integrity": "sha512-bY1K3/1Jy9D8Jd12eoeVahNXHLfHFb4TXWI8SQ4y8bImR9qDPmGITBAfmcffTkgUvbJn87r8dILOTWW5kZzkgA==", "dev": true }, "core-util-is": { @@ -2709,26 +2715,26 @@ } }, "eslint-plugin-import": { - "version": "2.23.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", - "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", + "version": "2.24.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", + "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", "dev": true, "requires": { "array-includes": "^3.1.3", "array.prototype.flat": "^1.2.4", "debug": "^2.6.9", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.1", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.6.2", "find-up": "^2.0.0", "has": "^1.0.3", - "is-core-module": "^2.4.0", + "is-core-module": "^2.6.0", "minimatch": "^3.0.4", - "object.values": "^1.1.3", + "object.values": "^1.1.4", "pkg-up": "^2.0.0", "read-pkg-up": "^3.0.0", "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" + "tsconfig-paths": "^3.11.0" }, "dependencies": { "debug": { @@ -2831,23 +2837,24 @@ } }, "eslint-plugin-prettier": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", - "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-react": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", - "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz", + "integrity": "sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug==", "dev": true, "requires": { "array-includes": "^3.1.3", "array.prototype.flatmap": "^1.2.4", "doctrine": "^2.1.0", + "estraverse": "^5.2.0", "has": "^1.0.3", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", @@ -2868,6 +2875,12 @@ "esutils": "^2.0.2" } }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, "resolve": { "version": "2.0.0-next.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", @@ -2903,9 +2916,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.2.tgz", - "integrity": "sha512-1lkktePhjOuI0XM8Rc+RmV3YN12cUx1c8orE14DBMfljJgXU0oSiZY7YQbdGFbVFatiTP5XhSkUkH235ResgaQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.5.tgz", + "integrity": "sha512-ODUUWtT5c08/XQpnrEY1LvAR+bssB2b5sGMAqtpl0IO4JiU4sznSm4FP0ngdTKJIMO361nMc5SvcT/sw/sPh2Q==", "dev": true, "requires": { "has": "^1.0.1" @@ -4414,12 +4427,12 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.0" }, "dependencies": { "minimist": { @@ -7447,12 +7460,13 @@ "dev": true }, "tsconfig-paths": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", - "integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", + "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", "dev": true, "requires": { - "json5": "^2.2.0", + "@types/json5": "^0.0.29", + "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" }, diff --git a/package.json b/package.json index 94aa33f0..06cbc709 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.4.0", + "@shm-open/eslint-config-bundle": "1.5.0", "istanbul": "0.4.5", "mocha": "9.1.1", "should": "13.2.3", From 2791b0195ee1c6d2ebd2a079060187dab12c6f21 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 6 Sep 2021 03:19:56 +0000 Subject: [PATCH 090/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.6.0 --- package-lock.json | 196 ++++++++++++++++++++++++++++++++++------------ package.json | 2 +- 2 files changed, 145 insertions(+), 53 deletions(-) diff --git a/package-lock.json b/package-lock.json index abe8bde6..42f0e951 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,16 +14,26 @@ } }, "@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", + "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", "dev": true, "requires": { - "@babel/types": "^7.15.0", + "@babel/types": "^7.15.4", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "dependencies": { + "@babel/types": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", + "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -33,41 +43,89 @@ } }, "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", + "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", + "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", + "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", + "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-validator-identifier": { @@ -92,18 +150,18 @@ "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" }, "@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.3.tgz", - "integrity": "sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", + "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", "dev": true, "requires": { "core-js-pure": "^3.16.0", @@ -111,33 +169,67 @@ } }, "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "dependencies": { + "@babel/parser": { + "version": "7.15.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.5.tgz", + "integrity": "sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg==", + "dev": true + }, + "@babel/types": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", + "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", + "@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", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { + "@babel/parser": { + "version": "7.15.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.5.tgz", + "integrity": "sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg==", + "dev": true + }, + "@babel/types": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", + "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -356,9 +448,9 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.5.0.tgz", - "integrity": "sha512-jONyPLdOUGVquR5zEgP+JPDKPntoZjtcN6CA0OOR9wWt1sxZDoDtL2MmGSmJyE2G4dcnfvVfXiG2hhcWvDmBMg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.0.tgz", + "integrity": "sha512-NBXBMC6avHw8h17/43pkUjqp0OsYt01s3f6V8+5eUVjuz36z/75EPe9+sJOMJLtJu2n6Wbv0CZzCS9hiYHGWHQ==", "dev": true, "requires": { "@typescript-eslint/eslint-plugin": "4.30.0", @@ -375,7 +467,7 @@ "eslint-plugin-react": "7.25.1", "eslint-plugin-react-hooks": "4.2.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.5", + "eslint-plugin-taro": "3.3.6", "prettier": "2.3.2" } }, @@ -1754,9 +1846,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.16.4", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.4.tgz", - "integrity": "sha512-bY1K3/1Jy9D8Jd12eoeVahNXHLfHFb4TXWI8SQ4y8bImR9qDPmGITBAfmcffTkgUvbJn87r8dILOTWW5kZzkgA==", + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.17.2.tgz", + "integrity": "sha512-2VV7DlIbooyTI7Bh+yzOOWL9tGwLnQKHno7qATE+fqZzDKYr6llVjVQOzpD/QLZFgXDPb8T71pJokHEZHEYJhQ==", "dev": true }, "core-util-is": { @@ -2916,9 +3008,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.5.tgz", - "integrity": "sha512-ODUUWtT5c08/XQpnrEY1LvAR+bssB2b5sGMAqtpl0IO4JiU4sznSm4FP0ngdTKJIMO361nMc5SvcT/sw/sPh2Q==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.6.tgz", + "integrity": "sha512-wg3ItlOjYjLNJz/mSwdc2TUWgVmuEWKjDmP55jXzPdYvmuYSrODE4CfPqG3BVnL5JSDIJJ4AFDTwcTcW8swpNQ==", "dev": true, "requires": { "has": "^1.0.1" diff --git a/package.json b/package.json index 06cbc709..a8c6118c 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.5.0", + "@shm-open/eslint-config-bundle": "1.6.0", "istanbul": "0.4.5", "mocha": "9.1.1", "should": "13.2.3", From 63204a29db83dc568ea37afa1768e555c7d121b5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Sep 2021 13:42:11 +0000 Subject: [PATCH 091/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.6.1 --- package-lock.json | 203 ++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 108 insertions(+), 97 deletions(-) diff --git a/package-lock.json b/package-lock.json index 42f0e951..803541e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,9 +25,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", - "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", @@ -54,9 +54,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", - "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", @@ -75,9 +75,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", - "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", @@ -96,9 +96,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", - "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", @@ -117,9 +117,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", - "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", @@ -180,15 +180,15 @@ }, "dependencies": { "@babel/parser": { - "version": "7.15.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.5.tgz", - "integrity": "sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", + "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", "dev": true }, "@babel/types": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", - "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", @@ -215,15 +215,15 @@ }, "dependencies": { "@babel/parser": { - "version": "7.15.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.5.tgz", - "integrity": "sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", + "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", "dev": true }, "@babel/types": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", - "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", @@ -448,18 +448,18 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.0.tgz", - "integrity": "sha512-NBXBMC6avHw8h17/43pkUjqp0OsYt01s3f6V8+5eUVjuz36z/75EPe9+sJOMJLtJu2n6Wbv0CZzCS9hiYHGWHQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.1.tgz", + "integrity": "sha512-zNc/3rhHm7aRWvhYKbtOO2P2sU6RPV43ck1oCwpB0hvyNQ7qwYNPR9iBKya1UAtgUC4cgf7OsDvPAC/vAqA/Tw==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "4.30.0", - "@typescript-eslint/parser": "4.30.0", + "@typescript-eslint/eslint-plugin": "4.31.1", + "@typescript-eslint/parser": "4.31.1", "babel-eslint": "10.1.0", "eslint": "7.32.0", "eslint-config-airbnb-base": "14.2.1", "eslint-config-prettier": "8.3.0", - "eslint-import-resolver-typescript": "2.4.0", + "eslint-import-resolver-typescript": "2.5.0", "eslint-plugin-deprecation": "1.2.1", "eslint-plugin-import": "2.24.2", "eslint-plugin-jsx-a11y": "6.4.1", @@ -467,8 +467,8 @@ "eslint-plugin-react": "7.25.1", "eslint-plugin-react-hooks": "4.2.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.6", - "prettier": "2.3.2" + "eslint-plugin-taro": "3.3.7", + "prettier": "2.4.0" } }, "@tootallnate/once": { @@ -520,13 +520,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz", - "integrity": "sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g==", + "version": "4.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.1.tgz", + "integrity": "sha512-UDqhWmd5i0TvPLmbK5xY3UZB0zEGseF+DHPghZ37Sb83Qd3p8ujhvAtkU4OF46Ka5Pm5kWvFIx0cCTBFKo0alA==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.30.0", - "@typescript-eslint/scope-manager": "4.30.0", + "@typescript-eslint/experimental-utils": "4.31.1", + "@typescript-eslint/scope-manager": "4.31.1", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.1.0", @@ -576,28 +576,28 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz", - "integrity": "sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw==", + "version": "4.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz", + "integrity": "sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.30.0", - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/typescript-estree": "4.30.0", + "@typescript-eslint/scope-manager": "4.31.1", + "@typescript-eslint/types": "4.31.1", + "@typescript-eslint/typescript-estree": "4.31.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.30.0.tgz", - "integrity": "sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg==", + "version": "4.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.1.tgz", + "integrity": "sha512-dnVZDB6FhpIby6yVbHkwTKkn2ypjVIfAR9nh+kYsA/ZL0JlTsd22BiDjouotisY3Irmd3OW1qlk9EI5R8GrvRQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.30.0", - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/typescript-estree": "4.30.0", + "@typescript-eslint/scope-manager": "4.31.1", + "@typescript-eslint/types": "4.31.1", + "@typescript-eslint/typescript-estree": "4.31.1", "debug": "^4.3.1" }, "dependencies": { @@ -619,29 +619,29 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz", - "integrity": "sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A==", + "version": "4.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz", + "integrity": "sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0" + "@typescript-eslint/types": "4.31.1", + "@typescript-eslint/visitor-keys": "4.31.1" } }, "@typescript-eslint/types": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.30.0.tgz", - "integrity": "sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw==", + "version": "4.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.1.tgz", + "integrity": "sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz", - "integrity": "sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg==", + "version": "4.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz", + "integrity": "sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0", + "@typescript-eslint/types": "4.31.1", + "@typescript-eslint/visitor-keys": "4.31.1", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -691,12 +691,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz", - "integrity": "sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw==", + "version": "4.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz", + "integrity": "sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/types": "4.31.1", "eslint-visitor-keys": "^2.0.0" } }, @@ -1846,9 +1846,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.17.2.tgz", - "integrity": "sha512-2VV7DlIbooyTI7Bh+yzOOWL9tGwLnQKHno7qATE+fqZzDKYr6llVjVQOzpD/QLZFgXDPb8T71pJokHEZHEYJhQ==", + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.17.3.tgz", + "integrity": "sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ==", "dev": true }, "core-util-is": { @@ -2240,22 +2240,23 @@ } }, "es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "version": "1.18.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", + "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", + "is-regex": "^1.1.4", + "is-string": "^1.0.7", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", @@ -2605,15 +2606,15 @@ } }, "eslint-import-resolver-typescript": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz", - "integrity": "sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", + "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", "dev": true, "requires": { - "debug": "^4.1.1", - "glob": "^7.1.6", + "debug": "^4.3.1", + "glob": "^7.1.7", "is-glob": "^4.0.1", - "resolve": "^1.17.0", + "resolve": "^1.20.0", "tsconfig-paths": "^3.9.0" }, "dependencies": { @@ -3008,9 +3009,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.6.tgz", - "integrity": "sha512-wg3ItlOjYjLNJz/mSwdc2TUWgVmuEWKjDmP55jXzPdYvmuYSrODE4CfPqG3BVnL5JSDIJJ4AFDTwcTcW8swpNQ==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.7.tgz", + "integrity": "sha512-Gu48ERyfyyszeEvLv66WWBkm3hMfkPUeEEjLuX7Mi+eh7uvmyluhSsrCCAFlm1v99GBM9lXanIlpcD0uiOvlfA==", "dev": true, "requires": { "has": "^1.0.1" @@ -3281,9 +3282,9 @@ "dev": true }, "fastq": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", - "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -3757,6 +3758,16 @@ "pump": "^3.0.0" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-uri": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", @@ -5914,9 +5925,9 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", + "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", "dev": true }, "prettier-linter-helpers": { @@ -7427,9 +7438,9 @@ }, "dependencies": { "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", diff --git a/package.json b/package.json index a8c6118c..d037f329 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.6.0", + "@shm-open/eslint-config-bundle": "1.6.1", "istanbul": "0.4.5", "mocha": "9.1.1", "should": "13.2.3", From 746e1874b3b102aa6ff6c3d2f48a213b4a99d3e8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 21 Sep 2021 15:04:18 +0000 Subject: [PATCH 092/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.6.2 --- package-lock.json | 147 ++++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 83 insertions(+), 66 deletions(-) diff --git a/package-lock.json b/package-lock.json index 803541e7..76e1866b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -180,9 +180,9 @@ }, "dependencies": { "@babel/parser": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", - "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", + "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", "dev": true }, "@babel/types": { @@ -215,9 +215,9 @@ }, "dependencies": { "@babel/parser": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", - "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", + "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", "dev": true }, "@babel/types": { @@ -448,13 +448,13 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.1.tgz", - "integrity": "sha512-zNc/3rhHm7aRWvhYKbtOO2P2sU6RPV43ck1oCwpB0hvyNQ7qwYNPR9iBKya1UAtgUC4cgf7OsDvPAC/vAqA/Tw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.2.tgz", + "integrity": "sha512-KyjflR5cfnqqwHj/C1eljWxQ3XQRU9Nrc66K1sAYPR4f9Zv9B3wCIuLvJCd1UztrvV4571ZyJ3bgI5rJdMLivg==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "4.31.1", - "@typescript-eslint/parser": "4.31.1", + "@typescript-eslint/eslint-plugin": "4.31.2", + "@typescript-eslint/parser": "4.31.2", "babel-eslint": "10.1.0", "eslint": "7.32.0", "eslint-config-airbnb-base": "14.2.1", @@ -464,11 +464,11 @@ "eslint-plugin-import": "2.24.2", "eslint-plugin-jsx-a11y": "6.4.1", "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-react": "7.25.1", + "eslint-plugin-react": "7.26.0", "eslint-plugin-react-hooks": "4.2.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.7", - "prettier": "2.4.0" + "eslint-plugin-taro": "3.3.9", + "prettier": "2.4.1" } }, "@tootallnate/once": { @@ -520,13 +520,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.1.tgz", - "integrity": "sha512-UDqhWmd5i0TvPLmbK5xY3UZB0zEGseF+DHPghZ37Sb83Qd3p8ujhvAtkU4OF46Ka5Pm5kWvFIx0cCTBFKo0alA==", + "version": "4.31.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz", + "integrity": "sha512-w63SCQ4bIwWN/+3FxzpnWrDjQRXVEGiTt9tJTRptRXeFvdZc/wLiz3FQUwNQ2CVoRGI6KUWMNUj/pk63noUfcA==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.31.1", - "@typescript-eslint/scope-manager": "4.31.1", + "@typescript-eslint/experimental-utils": "4.31.2", + "@typescript-eslint/scope-manager": "4.31.2", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.1.0", @@ -576,28 +576,28 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz", - "integrity": "sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q==", + "version": "4.31.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.2.tgz", + "integrity": "sha512-3tm2T4nyA970yQ6R3JZV9l0yilE2FedYg8dcXrTar34zC9r6JB7WyBQbpIVongKPlhEMjhQ01qkwrzWy38Bk1Q==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.31.1", - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/typescript-estree": "4.31.1", + "@typescript-eslint/scope-manager": "4.31.2", + "@typescript-eslint/types": "4.31.2", + "@typescript-eslint/typescript-estree": "4.31.2", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.1.tgz", - "integrity": "sha512-dnVZDB6FhpIby6yVbHkwTKkn2ypjVIfAR9nh+kYsA/ZL0JlTsd22BiDjouotisY3Irmd3OW1qlk9EI5R8GrvRQ==", + "version": "4.31.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.2.tgz", + "integrity": "sha512-EcdO0E7M/sv23S/rLvenHkb58l3XhuSZzKf6DBvLgHqOYdL6YFMYVtreGFWirxaU2mS1GYDby3Lyxco7X5+Vjw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.31.1", - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/typescript-estree": "4.31.1", + "@typescript-eslint/scope-manager": "4.31.2", + "@typescript-eslint/types": "4.31.2", + "@typescript-eslint/typescript-estree": "4.31.2", "debug": "^4.3.1" }, "dependencies": { @@ -619,29 +619,29 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz", - "integrity": "sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ==", + "version": "4.31.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz", + "integrity": "sha512-2JGwudpFoR/3Czq6mPpE8zBPYdHWFGL6lUNIGolbKQeSNv4EAiHaR5GVDQaLA0FwgcdcMtRk+SBJbFGL7+La5w==", "dev": true, "requires": { - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/visitor-keys": "4.31.1" + "@typescript-eslint/types": "4.31.2", + "@typescript-eslint/visitor-keys": "4.31.2" } }, "@typescript-eslint/types": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.1.tgz", - "integrity": "sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ==", + "version": "4.31.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.2.tgz", + "integrity": "sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz", - "integrity": "sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg==", + "version": "4.31.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz", + "integrity": "sha512-ieBq8U9at6PvaC7/Z6oe8D3czeW5d//Fo1xkF/s9394VR0bg/UaMYPdARiWyKX+lLEjY3w/FNZJxitMsiWv+wA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/visitor-keys": "4.31.1", + "@typescript-eslint/types": "4.31.2", + "@typescript-eslint/visitor-keys": "4.31.2", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -691,12 +691,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz", - "integrity": "sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ==", + "version": "4.31.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz", + "integrity": "sha512-PrBId7EQq2Nibns7dd/ch6S6/M4/iwLM9McbgeEbCXfxdwRUNxJ4UNreJ6Gh3fI2GNKNrWnQxKL7oCPmngKBug==", "dev": true, "requires": { - "@typescript-eslint/types": "4.31.1", + "@typescript-eslint/types": "4.31.2", "eslint-visitor-keys": "^2.0.0" } }, @@ -1846,9 +1846,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.17.3.tgz", - "integrity": "sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.0.tgz", + "integrity": "sha512-ZnK+9vyuMhKulIGqT/7RHGRok8RtkHMEX/BGPHkHx+ouDkq+MUvf9mfIgdqhpmPDu8+V5UtRn/CbCRc9I4lX4w==", "dev": true }, "core-util-is": { @@ -2939,23 +2939,24 @@ } }, "eslint-plugin-react": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz", - "integrity": "sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.0.tgz", + "integrity": "sha512-dceliS5itjk4EZdQYtLMz6GulcsasguIs+VTXuiC7Q5IPIdGTkyfXVdmsQOqEhlD9MciofH4cMcT1bw1WWNxCQ==", "dev": true, "requires": { "array-includes": "^3.1.3", "array.prototype.flatmap": "^1.2.4", "doctrine": "^2.1.0", "estraverse": "^5.2.0", - "has": "^1.0.3", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", "object.entries": "^1.1.4", "object.fromentries": "^2.0.4", + "object.hasown": "^1.0.0", "object.values": "^1.1.4", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", "string.prototype.matchall": "^4.0.5" }, "dependencies": { @@ -2983,6 +2984,12 @@ "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -3009,9 +3016,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.7.tgz", - "integrity": "sha512-Gu48ERyfyyszeEvLv66WWBkm3hMfkPUeEEjLuX7Mi+eh7uvmyluhSsrCCAFlm1v99GBM9lXanIlpcD0uiOvlfA==", + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.9.tgz", + "integrity": "sha512-AVngMv9tluiIXVrZEBTrF/uwn2EV9aUXI0KT+oCL3SJAurES5lXZ5sce/6RC766SzyQzJCYjXOy7DvesHbkDlg==", "dev": true, "requires": { "has": "^1.0.1" @@ -4610,12 +4617,12 @@ } }, "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dev": true, "requires": { - "array-includes": "^3.1.2", + "array-includes": "^3.1.3", "object.assign": "^4.1.2" } }, @@ -5593,6 +5600,16 @@ "has": "^1.0.3" } }, + "object.hasown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.0.0.tgz", + "integrity": "sha512-qYMF2CLIjxxLGleeM0jrcB4kiv3loGVAjKQKvH8pSU/i2VcRRvUNmxbD+nEMmrXRfORhuVJuH8OtSYCZoue3zA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.1" + } + }, "object.values": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", @@ -5925,9 +5942,9 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", - "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", "dev": true }, "prettier-linter-helpers": { diff --git a/package.json b/package.json index d037f329..73671208 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.6.1", + "@shm-open/eslint-config-bundle": "1.6.2", "istanbul": "0.4.5", "mocha": "9.1.1", "should": "13.2.3", From d3559539099220d13ec4bfa2691617fb467809ac Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 25 Sep 2021 09:02:29 +0000 Subject: [PATCH 093/347] chore(deps): update dependency mocha to v9.1.2 --- package-lock.json | 65 ++++++++--------------------------------------- package.json | 2 +- 2 files changed, 12 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index 76e1866b..53dd4f5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5168,16 +5168,16 @@ } }, "mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-0wE74YMgOkCgBUj8VyIDwmLUjTsS13WV1Pg7l0SHea2qzZzlq7MDnfbPsHKcELBRk3+izEVkRofjmClpycudCA==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.2.tgz", + "integrity": "sha512-ta3LtJ+63RIBP03VBjMGtSqbe6cWXRejF9SyM9Zyli1CKZJZ+vfCTj3oW24V7wAphMJdpOFLoMI3hjJ1LWbs0w==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.2", - "debug": "4.3.1", + "debug": "4.3.2", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", @@ -5188,12 +5188,11 @@ "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", - "nanoid": "3.1.23", + "nanoid": "3.1.25", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", - "wide-align": "1.1.3", "workerpool": "6.1.5", "yargs": "16.2.0", "yargs-parser": "20.2.4", @@ -5207,9 +5206,9 @@ "dev": true }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -5429,9 +5428,9 @@ } }, "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "dev": true }, "natural-compare": { @@ -7971,48 +7970,6 @@ "is-symbol": "^1.0.3" } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "win-release": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", diff --git a/package.json b/package.json index 73671208..5d17f0d2 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "devDependencies": { "@shm-open/eslint-config-bundle": "1.6.2", "istanbul": "0.4.5", - "mocha": "9.1.1", + "mocha": "9.1.2", "should": "13.2.3", "standard-version": "9.3.1", "supertest": "6.1.6", From 75a3de01ca10abf84ee1fee05c43a9c702f2e074 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 30 Sep 2021 02:15:08 +0000 Subject: [PATCH 094/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.6.3 --- package-lock.json | 109 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 56 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index 53dd4f5e..8bcc2092 100644 --- a/package-lock.json +++ b/package-lock.json @@ -448,13 +448,13 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.2.tgz", - "integrity": "sha512-KyjflR5cfnqqwHj/C1eljWxQ3XQRU9Nrc66K1sAYPR4f9Zv9B3wCIuLvJCd1UztrvV4571ZyJ3bgI5rJdMLivg==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.3.tgz", + "integrity": "sha512-/ewRwQmfitFyGvKWexH0YN3kOq0IGv1nTbv28XpDC8lQ4eEpzonU5BSvQnN0fNXclra1ORAOiH6AoCSPwe2A7g==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "4.31.2", - "@typescript-eslint/parser": "4.31.2", + "@typescript-eslint/eslint-plugin": "4.32.0", + "@typescript-eslint/parser": "4.32.0", "babel-eslint": "10.1.0", "eslint": "7.32.0", "eslint-config-airbnb-base": "14.2.1", @@ -520,15 +520,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz", - "integrity": "sha512-w63SCQ4bIwWN/+3FxzpnWrDjQRXVEGiTt9tJTRptRXeFvdZc/wLiz3FQUwNQ2CVoRGI6KUWMNUj/pk63noUfcA==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.32.0.tgz", + "integrity": "sha512-+OWTuWRSbWI1KDK8iEyG/6uK2rTm3kpS38wuVifGUTDB6kjEuNrzBI1MUtxnkneuWG/23QehABe2zHHrj+4yuA==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.31.2", - "@typescript-eslint/scope-manager": "4.31.2", + "@typescript-eslint/experimental-utils": "4.32.0", + "@typescript-eslint/scope-manager": "4.32.0", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" @@ -576,28 +577,28 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.2.tgz", - "integrity": "sha512-3tm2T4nyA970yQ6R3JZV9l0yilE2FedYg8dcXrTar34zC9r6JB7WyBQbpIVongKPlhEMjhQ01qkwrzWy38Bk1Q==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.32.0.tgz", + "integrity": "sha512-WLoXcc+cQufxRYjTWr4kFt0DyEv6hDgSaFqYhIzQZ05cF+kXfqXdUh+//kgquPJVUBbL3oQGKQxwPbLxHRqm6A==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.31.2", - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/typescript-estree": "4.31.2", + "@typescript-eslint/scope-manager": "4.32.0", + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/typescript-estree": "4.32.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.2.tgz", - "integrity": "sha512-EcdO0E7M/sv23S/rLvenHkb58l3XhuSZzKf6DBvLgHqOYdL6YFMYVtreGFWirxaU2mS1GYDby3Lyxco7X5+Vjw==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.32.0.tgz", + "integrity": "sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.31.2", - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/typescript-estree": "4.31.2", + "@typescript-eslint/scope-manager": "4.32.0", + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/typescript-estree": "4.32.0", "debug": "^4.3.1" }, "dependencies": { @@ -619,29 +620,29 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz", - "integrity": "sha512-2JGwudpFoR/3Czq6mPpE8zBPYdHWFGL6lUNIGolbKQeSNv4EAiHaR5GVDQaLA0FwgcdcMtRk+SBJbFGL7+La5w==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz", + "integrity": "sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w==", "dev": true, "requires": { - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/visitor-keys": "4.31.2" + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/visitor-keys": "4.32.0" } }, "@typescript-eslint/types": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.2.tgz", - "integrity": "sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.32.0.tgz", + "integrity": "sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz", - "integrity": "sha512-ieBq8U9at6PvaC7/Z6oe8D3czeW5d//Fo1xkF/s9394VR0bg/UaMYPdARiWyKX+lLEjY3w/FNZJxitMsiWv+wA==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz", + "integrity": "sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/visitor-keys": "4.31.2", + "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/visitor-keys": "4.32.0", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -691,12 +692,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz", - "integrity": "sha512-PrBId7EQq2Nibns7dd/ch6S6/M4/iwLM9McbgeEbCXfxdwRUNxJ4UNreJ6Gh3fI2GNKNrWnQxKL7oCPmngKBug==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz", + "integrity": "sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.31.2", + "@typescript-eslint/types": "4.32.0", "eslint-visitor-keys": "^2.0.0" } }, @@ -1846,9 +1847,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.0.tgz", - "integrity": "sha512-ZnK+9vyuMhKulIGqT/7RHGRok8RtkHMEX/BGPHkHx+ouDkq+MUvf9mfIgdqhpmPDu8+V5UtRn/CbCRc9I4lX4w==", + "version": "3.18.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.1.tgz", + "integrity": "sha512-kmW/k8MaSuqpvA1xm2l3TVlBuvW+XBkcaOroFUpO3D4lsTGQWBTb/tBDCf/PNkkPLrwgrkQRIYNPB0CeqGJWGQ==", "dev": true }, "core-util-is": { @@ -2240,9 +2241,9 @@ } }, "es-abstract": { - "version": "1.18.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", - "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", + "version": "1.18.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.7.tgz", + "integrity": "sha512-uFG1gyVX91tZIiDWNmPsL8XNpiCk/6tkB7MZphoSJflS4w+KgWyQ2gjCVDnsPxFAo9WjRXG3eqONNYdfbJjAtw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -2628,9 +2629,9 @@ } }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -2756,9 +2757,9 @@ "dev": true }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -6591,9 +6592,9 @@ }, "dependencies": { "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", diff --git a/package.json b/package.json index 5d17f0d2..42708134 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.6.2", + "@shm-open/eslint-config-bundle": "1.6.3", "istanbul": "0.4.5", "mocha": "9.1.2", "should": "13.2.3", From 82fa28422221325df0f3b53938cb5b0184b03827 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 12 Oct 2021 12:30:24 +0000 Subject: [PATCH 095/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.6.4 --- package-lock.json | 365 ++++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 208 insertions(+), 159 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8bcc2092..4668933d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,12 +14,12 @@ } }, "@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", - "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", "dev": true, "requires": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -180,9 +180,9 @@ }, "dependencies": { "@babel/parser": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", - "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", "dev": true }, "@babel/types": { @@ -215,9 +215,9 @@ }, "dependencies": { "@babel/parser": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", - "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", "dev": true }, "@babel/types": { @@ -448,23 +448,23 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.3.tgz", - "integrity": "sha512-/ewRwQmfitFyGvKWexH0YN3kOq0IGv1nTbv28XpDC8lQ4eEpzonU5BSvQnN0fNXclra1ORAOiH6AoCSPwe2A7g==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.4.tgz", + "integrity": "sha512-yRh9MLUJd2HCMs3oNASUIcEd4Kx4S1vSRcTQ2EcRZECjEdY3hc0Zdu9yYHXwyfoj5QY/8ejQbLPpCi0Yb6y/wg==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "4.32.0", - "@typescript-eslint/parser": "4.32.0", + "@typescript-eslint/eslint-plugin": "4.33.0", + "@typescript-eslint/parser": "4.33.0", "babel-eslint": "10.1.0", "eslint": "7.32.0", "eslint-config-airbnb-base": "14.2.1", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", "eslint-plugin-deprecation": "1.2.1", - "eslint-plugin-import": "2.24.2", + "eslint-plugin-import": "2.25.1", "eslint-plugin-jsx-a11y": "6.4.1", "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-react": "7.26.0", + "eslint-plugin-react": "7.26.1", "eslint-plugin-react-hooks": "4.2.0", "eslint-plugin-react-native": "3.11.0", "eslint-plugin-taro": "3.3.9", @@ -520,13 +520,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.32.0.tgz", - "integrity": "sha512-+OWTuWRSbWI1KDK8iEyG/6uK2rTm3kpS38wuVifGUTDB6kjEuNrzBI1MUtxnkneuWG/23QehABe2zHHrj+4yuA==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.32.0", - "@typescript-eslint/scope-manager": "4.32.0", + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -577,28 +577,28 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.32.0.tgz", - "integrity": "sha512-WLoXcc+cQufxRYjTWr4kFt0DyEv6hDgSaFqYhIzQZ05cF+kXfqXdUh+//kgquPJVUBbL3oQGKQxwPbLxHRqm6A==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.32.0", - "@typescript-eslint/types": "4.32.0", - "@typescript-eslint/typescript-estree": "4.32.0", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.32.0.tgz", - "integrity": "sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.32.0", - "@typescript-eslint/types": "4.32.0", - "@typescript-eslint/typescript-estree": "4.32.0", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "debug": "^4.3.1" }, "dependencies": { @@ -620,29 +620,29 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz", - "integrity": "sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.32.0", - "@typescript-eslint/visitor-keys": "4.32.0" + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" } }, "@typescript-eslint/types": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.32.0.tgz", - "integrity": "sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz", - "integrity": "sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.32.0", - "@typescript-eslint/visitor-keys": "4.32.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -692,12 +692,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz", - "integrity": "sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.32.0", + "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" } }, @@ -954,16 +954,16 @@ "dev": true }, "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "is-string": "^1.0.7" } }, "array-union": { @@ -973,26 +973,25 @@ "dev": true }, "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.19.0" } }, "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "es-abstract": "^1.19.0" } }, "arrify": { @@ -1847,9 +1846,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.18.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.1.tgz", - "integrity": "sha512-kmW/k8MaSuqpvA1xm2l3TVlBuvW+XBkcaOroFUpO3D4lsTGQWBTb/tBDCf/PNkkPLrwgrkQRIYNPB0CeqGJWGQ==", + "version": "3.18.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.2.tgz", + "integrity": "sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA==", "dev": true }, "core-util-is": { @@ -2241,9 +2240,9 @@ } }, "es-abstract": { - "version": "1.18.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.7.tgz", - "integrity": "sha512-uFG1gyVX91tZIiDWNmPsL8XNpiCk/6tkB7MZphoSJflS4w+KgWyQ2gjCVDnsPxFAo9WjRXG3eqONNYdfbJjAtw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -2257,7 +2256,9 @@ "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", + "is-weakref": "^1.0.1", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", @@ -2651,12 +2652,13 @@ } }, "eslint-module-utils": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", - "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.0.tgz", + "integrity": "sha512-hqSE88MmHl3ru9SYvDyGrlo0JwROlf9fiEMplEV7j/EAuq9iSlIlyCFbBT6pdULQBSnBYtYKiMLps+hKkyP7Gg==", "dev": true, "requires": { "debug": "^3.2.7", + "find-up": "^2.1.0", "pkg-dir": "^2.0.0" }, "dependencies": { @@ -2669,11 +2671,54 @@ "ms": "^2.1.1" } }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true } } }, @@ -2809,24 +2854,22 @@ } }, "eslint-plugin-import": { - "version": "2.24.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", - "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", + "version": "2.25.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.1.tgz", + "integrity": "sha512-YiQtY+ehqQXb6dvdrFUVdl3hsTvl+g3aKoTLZFIy1j/mKxjrLcRISI2rA7dNmEReJdr5xzjLld6vJ8pC1bfCfw==", "dev": true, "requires": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", "eslint-module-utils": "^2.6.2", - "find-up": "^2.0.0", "has": "^1.0.3", - "is-core-module": "^2.6.0", + "is-core-module": "^2.7.0", + "is-glob": "^4.0.3", "minimatch": "^3.0.4", - "object.values": "^1.1.4", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", + "object.values": "^1.1.5", "resolve": "^1.20.0", "tsconfig-paths": "^3.11.0" }, @@ -2849,56 +2892,22 @@ "esutils": "^2.0.2" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "is-core-module": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", + "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "has": "^1.0.3" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" + "is-extglob": "^2.1.1" } } } @@ -2940,9 +2949,9 @@ } }, "eslint-plugin-react": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.0.tgz", - "integrity": "sha512-dceliS5itjk4EZdQYtLMz6GulcsasguIs+VTXuiC7Q5IPIdGTkyfXVdmsQOqEhlD9MciofH4cMcT1bw1WWNxCQ==", + "version": "7.26.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", + "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", "dev": true, "requires": { "array-includes": "^3.1.3", @@ -4351,6 +4360,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -4389,6 +4404,15 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, "isarray": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", @@ -5578,47 +5602,46 @@ } }, "object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" } }, "object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" } }, "object.hasown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.0.0.tgz", - "integrity": "sha512-qYMF2CLIjxxLGleeM0jrcB4kiv3loGVAjKQKvH8pSU/i2VcRRvUNmxbD+nEMmrXRfORhuVJuH8OtSYCZoue3zA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.18.1" + "es-abstract": "^1.19.1" } }, "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" } }, "on-finished": { @@ -7231,14 +7254,14 @@ } }, "string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", @@ -7441,17 +7464,17 @@ } }, "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", "dev": true, "requires": { "ajv": "^8.0.1", "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { "ajv": { @@ -7466,11 +7489,37 @@ "uri-js": "^4.2.2" } }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } } } }, diff --git a/package.json b/package.json index 42708134..086560d0 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.6.3", + "@shm-open/eslint-config-bundle": "1.6.4", "istanbul": "0.4.5", "mocha": "9.1.2", "should": "13.2.3", From f4d87363d912afae78fde62875642944ccc48e5f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Oct 2021 08:19:10 +0000 Subject: [PATCH 096/347] chore(deps): update dependency mocha to v9.1.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4668933d..61294cbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5193,9 +5193,9 @@ } }, "mocha": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.2.tgz", - "integrity": "sha512-ta3LtJ+63RIBP03VBjMGtSqbe6cWXRejF9SyM9Zyli1CKZJZ+vfCTj3oW24V7wAphMJdpOFLoMI3hjJ1LWbs0w==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", diff --git a/package.json b/package.json index 086560d0..91faec37 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "devDependencies": { "@shm-open/eslint-config-bundle": "1.6.4", "istanbul": "0.4.5", - "mocha": "9.1.2", + "mocha": "9.1.3", "should": "13.2.3", "standard-version": "9.3.1", "supertest": "6.1.6", From 03c8863b6a13578370637481e8c663f20ca0c677 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 Oct 2021 19:49:47 +0000 Subject: [PATCH 097/347] chore(deps): update dependency standard-version to v9.3.2 --- package-lock.json | 247 ++++++++-------------------------------------- package.json | 2 +- 2 files changed, 44 insertions(+), 205 deletions(-) diff --git a/package-lock.json b/package-lock.json index 61294cbf..4af497de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1593,9 +1593,9 @@ } }, "conventional-changelog-angular": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", - "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "requires": { "compare-func": "^2.0.0", @@ -1627,9 +1627,9 @@ "dev": true }, "conventional-changelog-conventionalcommits": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.5.0.tgz", - "integrity": "sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.1.tgz", + "integrity": "sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==", "dev": true, "requires": { "compare-func": "^2.0.0", @@ -1638,9 +1638,9 @@ } }, "conventional-changelog-core": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.3.tgz", - "integrity": "sha512-MwnZjIoMRL3jtPH5GywVNqetGILC7g6RQFvdb8LRU/fA/338JbeWAku3PZ8yQ+mtVRViiISqJlb0sOz0htBZig==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, "requires": { "add-stream": "^1.0.0", @@ -1760,9 +1760,9 @@ "dev": true }, "uglify-js": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.1.tgz", - "integrity": "sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", + "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", "dev": true, "optional": true } @@ -1779,9 +1779,9 @@ } }, "conventional-commits-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", - "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.2.tgz", + "integrity": "sha512-Jr9KAKgqAkwXMRHjxDwO/zOCDKod1XdAESHAGuJX38iZ7ZzVti/tvVoysO0suMsdAObp9NQ2rHSsSbnAqZ5f5g==", "dev": true, "requires": { "JSONStream": "^1.0.4", @@ -1789,8 +1789,7 @@ "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", - "through2": "^4.0.0", - "trim-off-newlines": "^1.0.0" + "through2": "^4.0.0" } }, "conventional-recommended-bump": { @@ -1807,12 +1806,6 @@ "git-semver-tags": "^4.1.1", "meow": "^8.0.0", "q": "^1.5.1" - }, - "dependencies": { - "safe-buffer": { - "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "cookie": { @@ -3583,138 +3576,17 @@ } }, "get-pkg-repo": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.1.2.tgz", - "integrity": "sha512-/FjamZL9cBYllEbReZkxF2IMh80d8TJoC4e3bmLNif8ibHw95aj0N/tzqK0kZz9eU/3w3dL6lF4fnnX/sDdW3A==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "requires": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", - "meow": "^7.0.0", - "through2": "^2.0.0" + "through2": "^2.0.0", + "yargs": "^16.2.0" }, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "meow": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", - "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^2.5.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - } - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -3749,20 +3621,19 @@ "xtend": "~4.0.1" } }, - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } } } @@ -4954,9 +4825,9 @@ } }, "map-obj": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", - "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, "md5": { @@ -5980,9 +5851,9 @@ } }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz", - "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "progress": { @@ -7067,15 +6938,15 @@ } }, "standard-version": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.3.1.tgz", - "integrity": "sha512-5qMxXw/FxLouC5nANyx/5RY1kiorJx9BppUso8gN07MG64q2uLRmrPb4KfXp3Ql4s/gxjZwZ89e0FwxeLubGww==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.3.2.tgz", + "integrity": "sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ==", "dev": true, "requires": { "chalk": "^2.4.2", "conventional-changelog": "3.1.24", "conventional-changelog-config-spec": "2.1.0", - "conventional-changelog-conventionalcommits": "4.5.0", + "conventional-changelog-conventionalcommits": "4.6.1", "conventional-recommended-bump": "6.1.0", "detect-indent": "^6.0.0", "detect-newline": "^3.1.0", @@ -7089,26 +6960,6 @@ "yargs": "^16.0.0" }, "dependencies": { - "ansi-styles": { - "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -7563,12 +7414,6 @@ "dev": true, "requires": { "readable-stream": "3" - }, - "dependencies": { - "safe-buffer": { - "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "to-fast-properties": { @@ -7622,12 +7467,6 @@ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true - }, "tsconfig-paths": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", @@ -7724,7 +7563,7 @@ }, "typedarray": { "version": "0.0.6", - "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, diff --git a/package.json b/package.json index 91faec37..60892189 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "istanbul": "0.4.5", "mocha": "9.1.3", "should": "13.2.3", - "standard-version": "9.3.1", + "standard-version": "9.3.2", "supertest": "6.1.6", "supervisor": "0.12.0" }, From 0746db1ea06beaac60922ce73b45e0d862dc02a9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 Oct 2021 13:27:59 +0000 Subject: [PATCH 098/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.6.5 --- package-lock.json | 42 +++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4af497de..4a4186b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -448,9 +448,9 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.4.tgz", - "integrity": "sha512-yRh9MLUJd2HCMs3oNASUIcEd4Kx4S1vSRcTQ2EcRZECjEdY3hc0Zdu9yYHXwyfoj5QY/8ejQbLPpCi0Yb6y/wg==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.5.tgz", + "integrity": "sha512-6WMbx/8tXszySqZltJqfPxZ2RRv079vaHQQiqpXrODNbZTuHVEf2g29E0YAN9NZ/XS0Cswi/pDl2d+nApUFWYQ==", "dev": true, "requires": { "@typescript-eslint/eslint-plugin": "4.33.0", @@ -461,13 +461,13 @@ "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", "eslint-plugin-deprecation": "1.2.1", - "eslint-plugin-import": "2.25.1", + "eslint-plugin-import": "2.25.2", "eslint-plugin-jsx-a11y": "6.4.1", "eslint-plugin-prettier": "4.0.0", "eslint-plugin-react": "7.26.1", "eslint-plugin-react-hooks": "4.2.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.9", + "eslint-plugin-taro": "3.3.10", "prettier": "2.4.1" } }, @@ -1839,9 +1839,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.2.tgz", - "integrity": "sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", "dev": true }, "core-util-is": { @@ -2645,9 +2645,9 @@ } }, "eslint-module-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.0.tgz", - "integrity": "sha512-hqSE88MmHl3ru9SYvDyGrlo0JwROlf9fiEMplEV7j/EAuq9iSlIlyCFbBT6pdULQBSnBYtYKiMLps+hKkyP7Gg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", + "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", "dev": true, "requires": { "debug": "^3.2.7", @@ -2847,9 +2847,9 @@ } }, "eslint-plugin-import": { - "version": "2.25.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.1.tgz", - "integrity": "sha512-YiQtY+ehqQXb6dvdrFUVdl3hsTvl+g3aKoTLZFIy1j/mKxjrLcRISI2rA7dNmEReJdr5xzjLld6vJ8pC1bfCfw==", + "version": "2.25.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz", + "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -2857,7 +2857,7 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.6.2", + "eslint-module-utils": "^2.7.0", "has": "^1.0.3", "is-core-module": "^2.7.0", "is-glob": "^4.0.3", @@ -2886,9 +2886,9 @@ } }, "is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "requires": { "has": "^1.0.3" @@ -3019,9 +3019,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.9.tgz", - "integrity": "sha512-AVngMv9tluiIXVrZEBTrF/uwn2EV9aUXI0KT+oCL3SJAurES5lXZ5sce/6RC766SzyQzJCYjXOy7DvesHbkDlg==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.10.tgz", + "integrity": "sha512-N6V6CgWAqhGR2YIVi3SabsOqgmUfbjy50wXcycgH4/89m0nLtQx6F2JAYgnuxZ579LAzXQFHdcINd1S0+qndQA==", "dev": true, "requires": { "has": "^1.0.1" diff --git a/package.json b/package.json index 60892189..67af6aeb 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.6.4", + "@shm-open/eslint-config-bundle": "1.6.5", "istanbul": "0.4.5", "mocha": "9.1.3", "should": "13.2.3", From 8b6efad55800db13a4f79f6d4950516adae94ee2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 30 Oct 2021 21:07:06 +0000 Subject: [PATCH 099/347] fix(deps): update dependency formidable to v1.2.6 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a4186b9..7493df1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3425,9 +3425,9 @@ } }, "formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==" }, "formstream": { "version": "1.1.1", diff --git a/package.json b/package.json index 67af6aeb..68813c3d 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "diff-match-patch": "1.0.5", "express": "4.17.1", "extract-zip": "2.0.1", - "formidable": "1.2.2", + "formidable": "1.2.6", "fs-extra": "10.0.0", "helmet": "4.6.0", "jschardet": "3.0.0", From 2d8c47e26b12f9f351a9fc9045754635d7ded4e3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 1 Nov 2021 21:53:24 +0000 Subject: [PATCH 100/347] fix(deps): update dependency validator to v13.7.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a4186b9..12a56d95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7813,9 +7813,9 @@ } }, "validator": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.6.0.tgz", - "integrity": "sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==" + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" }, "vary": { "version": "1.1.2", diff --git a/package.json b/package.json index 67af6aeb..d7408db4 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "serve-favicon": "2.5.0", "slash": "3.0.0", "upyun": "3.4.4", - "validator": "13.6.0", + "validator": "13.7.0", "yargs": "17.1.1", "yazl": "2.5.1" }, From 1b2a20a554b05e5e94cc90c633254d76807243ef Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 11 Nov 2021 09:37:02 +0000 Subject: [PATCH 101/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.7.0 --- package-lock.json | 945 +++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 421 insertions(+), 526 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a4186b9..396b024b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,23 +14,29 @@ } }, "@babel/generator": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/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" }, "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/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" } }, @@ -43,86 +49,110 @@ } }, "@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-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" }, "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/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" } } } }, "@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-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" }, "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/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" } } } }, "@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-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" }, "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/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" } } } }, "@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-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" }, "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/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" } } @@ -150,83 +180,135 @@ "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" }, "@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", - "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz", + "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", "dev": true, "requires": { - "core-js-pure": "^3.16.0", + "core-js-pure": "^3.19.0", "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/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" }, "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, "@babel/parser": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.3.tgz", + "integrity": "sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw==", "dev": true }, "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/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" } } } }, "@babel/traverse": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", - "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", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "requires": { + "@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.3", + "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, "@babel/parser": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.3.tgz", + "integrity": "sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw==", "dev": true }, "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/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" } }, @@ -256,23 +338,40 @@ "to-fast-properties": "^2.0.0" } }, + "@delagen/eslint-plugin-deprecation": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@delagen/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.0.tgz", + "integrity": "sha512-hPe516znPnWrwyW1DFPcUKp+NQWPR4nx0+ycVbETIviw2G7V7vlqHRnf18skCniD15fGEGYzxOh1ZeuJndW9tQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^5.0.0", + "tslib": "^2.3.1", + "tsutils": "^3.21.0" + } + }, "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz", + "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.0.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -282,16 +381,10 @@ "ms": "2.1.2" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -304,13 +397,12 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "ms": { @@ -328,9 +420,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.0", @@ -356,9 +448,9 @@ } }, "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@hutson/parse-repository-url": { @@ -448,26 +540,26 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.6.5.tgz", - "integrity": "sha512-6WMbx/8tXszySqZltJqfPxZ2RRv079vaHQQiqpXrODNbZTuHVEf2g29E0YAN9NZ/XS0Cswi/pDl2d+nApUFWYQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.0.tgz", + "integrity": "sha512-/XrQL3L+gYntMpVtmi/O6QqH/UN2rLbU4DfQzs1K5jcdCTAUbl3K9k+LpNZm7aLkIefzQeH6W8e1wNbfjd/ROg==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "4.33.0", - "@typescript-eslint/parser": "4.33.0", + "@delagen/eslint-plugin-deprecation": "1.3.0", + "@typescript-eslint/eslint-plugin": "5.3.1", + "@typescript-eslint/parser": "5.3.1", "babel-eslint": "10.1.0", - "eslint": "7.32.0", - "eslint-config-airbnb-base": "14.2.1", + "eslint": "8.2.0", + "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", - "eslint-plugin-deprecation": "1.2.1", - "eslint-plugin-import": "2.25.2", - "eslint-plugin-jsx-a11y": "6.4.1", + "eslint-plugin-import": "2.25.3", + "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-react": "7.26.1", - "eslint-plugin-react-hooks": "4.2.0", + "eslint-plugin-react": "7.27.0", + "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.10", + "eslint-plugin-taro": "3.3.12", "prettier": "2.4.1" } }, @@ -520,17 +612,17 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.1.tgz", + "integrity": "sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", + "@typescript-eslint/experimental-utils": "5.3.1", + "@typescript-eslint/scope-manager": "5.3.1", + "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", - "regexpp": "^3.1.0", + "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" }, @@ -577,29 +669,29 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", + "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.3.1", + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/typescript-estree": "5.3.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.1.tgz", + "integrity": "sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" + "@typescript-eslint/scope-manager": "5.3.1", + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/typescript-estree": "5.3.1", + "debug": "^4.3.2" }, "dependencies": { "debug": { @@ -620,32 +712,32 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", + "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/visitor-keys": "5.3.1" } }, "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", + "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", + "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/visitor-keys": "5.3.1", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" }, @@ -659,6 +751,15 @@ "ms": "2.1.2" } }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -692,13 +793,13 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", + "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.3.1", + "eslint-visitor-keys": "^3.0.0" } }, "@ungap/promise-all-settled": { @@ -1034,12 +1135,6 @@ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", "dev": true }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, "async": { "version": "1.5.2", "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", @@ -1109,9 +1204,9 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axe-core": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.3.tgz", - "integrity": "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", "dev": true }, "axios": { @@ -1839,9 +1934,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.18.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", - "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.1.tgz", + "integrity": "sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ==", "dev": true }, "core-util-is": { @@ -2311,37 +2406,36 @@ } }, "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.2.0.tgz", + "integrity": "sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.0.4", + "@humanwhocodes/config-array": "^0.6.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^6.0.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", + "glob-parent": "^6.0.1", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -2349,23 +2443,19 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.1.0", + "regexpp": "^3.2.0", "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", @@ -2376,6 +2466,12 @@ "color-convert": "^2.0.1" } }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2416,33 +2512,46 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "is-glob": "^4.0.3" }, "dependencies": { - "eslint-visitor-keys": { - "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==", - "dev": true + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } } } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -2461,13 +2570,12 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "levn": { @@ -2524,6 +2632,15 @@ "lru-cache": "^6.0.0" } }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2557,14 +2674,23 @@ } }, "eslint-config-airbnb-base": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "requires": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", - "object.entries": "^1.1.2" + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "eslint-config-prettier": { @@ -2715,141 +2841,10 @@ } } }, - "eslint-plugin-deprecation": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.2.1.tgz", - "integrity": "sha512-8KFAWPO3AvF0szxIh1ivRtHotd1fzxVOuNR3NI8dfCsQKgcxu9fAgEY+eTKvCRLAwwI8kaDDfImMt+498+EgRw==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^2.19.2 || ^3.0.0", - "tslib": "^1.10.0", - "tsutils": "^3.0.0" - }, - "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "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==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, "eslint-plugin-import": { - "version": "2.25.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz", - "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==", + "version": "2.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", + "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -2857,9 +2852,9 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.0", + "eslint-module-utils": "^2.7.1", "has": "^1.0.3", - "is-core-module": "^2.7.0", + "is-core-module": "^2.8.0", "is-glob": "^4.0.3", "minimatch": "^3.0.4", "object.values": "^1.1.5", @@ -2906,22 +2901,23 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", - "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", "dev": true, "requires": { - "@babel/runtime": "^7.11.2", + "@babel/runtime": "^7.16.3", "aria-query": "^4.2.2", - "array-includes": "^3.1.1", + "array-includes": "^3.1.4", "ast-types-flow": "^0.0.7", - "axe-core": "^4.0.2", + "axe-core": "^4.3.5", "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.6", - "emoji-regex": "^9.0.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", "has": "^1.0.3", - "jsx-ast-utils": "^3.1.0", - "language-tags": "^1.0.5" + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" }, "dependencies": { "emoji-regex": { @@ -2942,25 +2938,25 @@ } }, "eslint-plugin-react": { - "version": "7.26.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", - "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.0.tgz", + "integrity": "sha512-0Ut+CkzpppgFtoIhdzi2LpdpxxBvgFf99eFqWxJnUrO7mMe0eOiNpou6rvNYeVVV6lWZvTah0BFne7k5xHjARg==", "dev": true, "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", "doctrine": "^2.1.0", - "estraverse": "^5.2.0", + "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.hasown": "^1.0.0", - "object.values": "^1.1.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.5" + "string.prototype.matchall": "^4.0.6" }, "dependencies": { "doctrine": { @@ -2973,9 +2969,9 @@ } }, "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "resolve": { @@ -2997,9 +2993,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", - "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", + "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", "dev": true }, "eslint-plugin-react-native": { @@ -3019,9 +3015,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.10.tgz", - "integrity": "sha512-N6V6CgWAqhGR2YIVi3SabsOqgmUfbjy50wXcycgH4/89m0nLtQx6F2JAYgnuxZ579LAzXQFHdcINd1S0+qndQA==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.12.tgz", + "integrity": "sha512-KCUCBBP0+HqEvjdXHG+VfmaFYsiWPugMATU5de3tD7Ifv0UDYM01cCu4N0miYHCenr7uQUshrPEgKODnZGKgyQ==", "dev": true, "requires": { "has": "^1.0.1" @@ -3052,29 +3048,37 @@ "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", "dev": true, "requires": { - "acorn": "^7.4.0", + "acorn": "^8.5.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "eslint-visitor-keys": "^3.0.0" }, "dependencies": { - "eslint-visitor-keys": { - "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==", + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true } } @@ -3094,9 +3098,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -3111,9 +3115,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -3389,9 +3393,9 @@ }, "dependencies": { "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true } } @@ -4010,9 +4014,9 @@ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true }, "import-fresh": { @@ -4632,12 +4636,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -4685,12 +4683,6 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -6776,43 +6768,6 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -7314,66 +7269,6 @@ "has-flag": "^1.0.0" } }, - "table": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", - "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, "text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", diff --git a/package.json b/package.json index 67af6aeb..b5f24eb3 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.6.5", + "@shm-open/eslint-config-bundle": "1.7.0", "istanbul": "0.4.5", "mocha": "9.1.3", "should": "13.2.3", From 521061abfe34bceae6da244f03855f842ad3e67f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 15 Nov 2021 09:01:26 +0000 Subject: [PATCH 102/347] fix(deps): update dependency nodemailer to v6.7.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 396b024b..ad1ac502 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5367,9 +5367,9 @@ } }, "nodemailer": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.3.tgz", - "integrity": "sha512-faZFufgTMrphYoDjvyVpbpJcYzwyFnbAMmQtj1lVBYAUSm3SOy2fIdd9+Mr4UxPosBa0JRw9bJoIwQn+nswiew==" + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.1.tgz", + "integrity": "sha512-E1C8G3rnXrGjznwGP1k+OrW5k4rl0XtqTEB19f7vtJAMYwfxZVSsAu2iY5xJkrZsbVYr6PwwAwRmFlakPoFC0A==" }, "nopt": { "version": "3.0.6", diff --git a/package.json b/package.json index b5f24eb3..586c12a1 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "moment": "2.29.1", "mysql2": "2.3.0", "node-fetch": "2.6.1", - "nodemailer": "6.6.3", + "nodemailer": "6.7.1", "pug": "3.0.2", "qiniu": "7.4.0", "rand-token": "1.0.1", From 82858f78d70abecd52c68300cfad3b64a091ee7e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 16 Nov 2021 19:28:54 +0000 Subject: [PATCH 103/347] fix(deps): update dependency cookie-parser to v1.4.6 --- package-lock.json | 15 +++++++++++---- package.json | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 396b024b..6e7b9e9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1909,12 +1909,19 @@ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, "cookie-parser": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz", - "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", "requires": { - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + } } }, "cookie-signature": { diff --git a/package.json b/package.json index b5f24eb3..87ba6872 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "aws-sdk": "2.979.0", "bcryptjs": "2.4.3", "body-parser": "1.19.0", - "cookie-parser": "1.4.5", + "cookie-parser": "1.4.6", "cos-nodejs-sdk-v5": "2.10.0", "diff-match-patch": "1.0.5", "express": "4.17.1", From 5d1d791b17da2fa7eb6be52576ac03d91bef3d28 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 18 Nov 2021 19:48:03 +0000 Subject: [PATCH 104/347] fix(deps): update dependency sequelize to v6.11.0 --- package-lock.json | 25 ++++++++++++++++++------- package.json | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 396b024b..8faa8e87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5247,9 +5247,9 @@ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", "requires": { "moment": ">= 2.9.0" } @@ -5743,6 +5743,11 @@ "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -6574,9 +6579,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "6.6.5", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.6.5.tgz", - "integrity": "sha512-QyRrJrDRiwuiILqTMHUA1yWOPIL12KlfmgZ3hnzQwbMvp2vJ6fzu9bYJQB+qPMosck4mBUggY4Cjoc6Et8FBIQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.11.0.tgz", + "integrity": "sha512-+j3N5lr+FR1eicMRGR3bRsGOl9HMY0UGb2PyB2i1yZ64XBgsz3xejMH0UD45LcUitj40soDGIa9CyvZG0dfzKg==", "requires": { "debug": "^4.1.1", "dottie": "^2.0.0", @@ -6584,12 +6589,13 @@ "lodash": "^4.17.20", "moment": "^2.26.0", "moment-timezone": "^0.5.31", + "pg-connection-string": "^2.5.0", "retry-as-promised": "^3.2.0", "semver": "^7.3.2", "sequelize-pool": "^6.0.0", "toposort-class": "^1.0.1", "uuid": "^8.1.0", - "validator": "^13.6.0", + "validator": "^13.7.0", "wkx": "^0.5.0" }, "dependencies": { @@ -6627,6 +6633,11 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, + "validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index b5f24eb3..dfee77a2 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "3.1.2", - "sequelize": "6.6.5", + "sequelize": "6.11.0", "serve-favicon": "2.5.0", "slash": "3.0.0", "upyun": "3.4.4", From 5c7b64fe3022af76f1ccad34efaeac027b3e37c8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 19 Nov 2021 03:18:53 +0000 Subject: [PATCH 105/347] fix(deps): update dependency aliyun-sdk to v1.12.4 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 396b024b..f1e81bb9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -973,9 +973,9 @@ "integrity": "sha1-ODAbGfA0QGhDjrY5d6DNldYEcMA=" }, "aliyun-sdk": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/aliyun-sdk/-/aliyun-sdk-1.12.3.tgz", - "integrity": "sha512-CvSfl8HpLgxYmfQjFEDyGXmLpEfpMzICYtCwYVPJiAln0MAqOLfzakV3+JSgRgQrDCDKPxXwjQqWQhNIFmTebA==", + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/aliyun-sdk/-/aliyun-sdk-1.12.4.tgz", + "integrity": "sha512-g8BQkmWO3clzWMp49MuXVUKqEQl2IV19/SaIyyoQXq6e0UjqFGTZsn5PFN9C4UQeGDO9cxsGlgWZE8ZOD3Au5Q==", "requires": { "node_memcached": "1.1.3", "pomelo-protobuf": "^0.4.0", @@ -5894,9 +5894,9 @@ }, "dependencies": { "@types/node": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.2.tgz", - "integrity": "sha512-LSw8TZt12ZudbpHc6EkIyDM3nHVWKYrAvGy6EAJfNfjusbwnThqjqxUKKRwuV3iWYeW/LYMzNgaq3MaLffQ2xA==" + "version": "16.11.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.8.tgz", + "integrity": "sha512-hmT5gfpRkkHr7DZZHMf3jBe/zNcVGN+jXSL2f8nAsYfBPxQFToKwQlS/zES4Sjp488Bi73i+p6bvrNRRGU0x9Q==" } } }, diff --git a/package.json b/package.json index b5f24eb3..85485fef 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ }, "dependencies": { "aliyun-oss-upload-stream": "1.3.0", - "aliyun-sdk": "1.12.3", + "aliyun-sdk": "1.12.4", "aws-sdk": "2.979.0", "bcryptjs": "2.4.3", "body-parser": "1.19.0", From 4e21899a83281f5074a444034734e4b7eba1d2cc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 19 Nov 2021 03:18:21 +0000 Subject: [PATCH 106/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.7.1 --- package-lock.json | 104 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/package-lock.json b/package-lock.json index 396b024b..9695261c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -236,9 +236,9 @@ } }, "@babel/parser": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.3.tgz", - "integrity": "sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw==", + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", "dev": true }, "@babel/types": { @@ -297,9 +297,9 @@ } }, "@babel/parser": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.3.tgz", - "integrity": "sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw==", + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", "dev": true }, "@babel/types": { @@ -540,14 +540,14 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.0.tgz", - "integrity": "sha512-/XrQL3L+gYntMpVtmi/O6QqH/UN2rLbU4DfQzs1K5jcdCTAUbl3K9k+LpNZm7aLkIefzQeH6W8e1wNbfjd/ROg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.1.tgz", + "integrity": "sha512-29goXuFraNqAVHpBZXKdMZ2NZoPbTInZYJzNey92Jup2UlhY92de4AcJOihu923abtkzdzFBFNsWyntrGK+gHw==", "dev": true, "requires": { "@delagen/eslint-plugin-deprecation": "1.3.0", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.4.0", + "@typescript-eslint/parser": "5.4.0", "babel-eslint": "10.1.0", "eslint": "8.2.0", "eslint-config-airbnb-base": "15.0.0", @@ -559,7 +559,7 @@ "eslint-plugin-react": "7.27.0", "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.12", + "eslint-plugin-taro": "3.3.14", "prettier": "2.4.1" } }, @@ -612,13 +612,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.1.tgz", - "integrity": "sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.4.0.tgz", + "integrity": "sha512-9/yPSBlwzsetCsGEn9j24D8vGQgJkOTr4oMLas/w886ZtzKIs1iyoqFrwsX2fqYEeUwsdBpC21gcjRGo57u0eg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "5.3.1", - "@typescript-eslint/scope-manager": "5.3.1", + "@typescript-eslint/experimental-utils": "5.4.0", + "@typescript-eslint/scope-manager": "5.4.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -669,28 +669,28 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", - "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz", + "integrity": "sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", + "@typescript-eslint/scope-manager": "5.4.0", + "@typescript-eslint/types": "5.4.0", + "@typescript-eslint/typescript-estree": "5.4.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.1.tgz", - "integrity": "sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.4.0.tgz", + "integrity": "sha512-JoB41EmxiYpaEsRwpZEYAJ9XQURPFer8hpkIW9GiaspVLX8oqbqNM8P4EP8HOZg96yaALiLEVWllA2E8vwsIKw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", + "@typescript-eslint/scope-manager": "5.4.0", + "@typescript-eslint/types": "5.4.0", + "@typescript-eslint/typescript-estree": "5.4.0", "debug": "^4.3.2" }, "dependencies": { @@ -712,29 +712,29 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", - "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.4.0.tgz", + "integrity": "sha512-pRxFjYwoi8R+n+sibjgF9iUiAELU9ihPBtHzocyW8v8D8G8KeQvXTsW7+CBYIyTYsmhtNk50QPGLE3vrvhM5KA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1" + "@typescript-eslint/types": "5.4.0", + "@typescript-eslint/visitor-keys": "5.4.0" } }, "@typescript-eslint/types": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", - "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.4.0.tgz", + "integrity": "sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", - "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz", + "integrity": "sha512-nhlNoBdhKuwiLMx6GrybPT3SFILm5Gij2YBdPEPFlYNFAXUJWX6QRgvi/lwVoadaQEFsizohs6aFRMqsXI2ewA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1", + "@typescript-eslint/types": "5.4.0", + "@typescript-eslint/visitor-keys": "5.4.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -793,12 +793,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", - "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz", + "integrity": "sha512-PVbax7MeE7tdLfW5SA0fs8NGVVr+buMPrcj+CWYWPXsZCH8qZ1THufDzbXm1xrZ2b2PA1iENJ0sRq5fuUtvsJg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/types": "5.4.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -3015,9 +3015,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.12.tgz", - "integrity": "sha512-KCUCBBP0+HqEvjdXHG+VfmaFYsiWPugMATU5de3tD7Ifv0UDYM01cCu4N0miYHCenr7uQUshrPEgKODnZGKgyQ==", + "version": "3.3.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.14.tgz", + "integrity": "sha512-PzT8NDoZhaYIz0JXZhUYJ2L5a34HU8zSLWgVAT5WWUVHymiFM0LyTJNpjWyffarbDaasdYjeMVJAZEIFdOEMsw==", "dev": true, "requires": { "has": "^1.0.1" @@ -3076,9 +3076,9 @@ }, "dependencies": { "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true } } diff --git a/package.json b/package.json index b5f24eb3..459ea5ad 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.7.0", + "@shm-open/eslint-config-bundle": "1.7.1", "istanbul": "0.4.5", "mocha": "9.1.3", "should": "13.2.3", From 76052d68fcdaa27ccc631b305639c00760ae400d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 22 Nov 2021 02:51:15 +0000 Subject: [PATCH 107/347] fix(deps): update dependency yargs to v17.2.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 04ca18f4..b3d5302c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7890,9 +7890,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", - "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", + "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", diff --git a/package.json b/package.json index 9996b843..9052724e 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "slash": "3.0.0", "upyun": "3.4.4", "validator": "13.7.0", - "yargs": "17.1.1", + "yargs": "17.2.1", "yazl": "2.5.1" }, "devDependencies": { From 1ca57d5000436ca84a48caefff994864ed5a422d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 22 Nov 2021 02:53:10 +0000 Subject: [PATCH 108/347] fix(deps): update dependency cos-nodejs-sdk-v5 to v2.11.2 --- package-lock.json | 139 +++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 65 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a3cdc79..382d92e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1107,9 +1107,12 @@ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "asn1": { - "version": "0.2.3", - "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } }, "assert-never": { "version": "1.2.1", @@ -1118,7 +1121,7 @@ }, "assert-plus": { "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "ast-types": { @@ -1195,7 +1198,7 @@ }, "aws-sign2": { "version": "0.7.0", - "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { @@ -1269,10 +1272,9 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { "tweetnacl": "^0.14.3" } @@ -1428,7 +1430,7 @@ }, "caseless": { "version": "0.12.0", - "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "center-align": { @@ -1525,9 +1527,9 @@ "dev": true }, "combined-stream": { - "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } @@ -1952,9 +1954,9 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cos-nodejs-sdk-v5": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.10.0.tgz", - "integrity": "sha512-FA/lrydYCQSXzo8An4vITOsADxO995Km0YY+2lcKxH161cP1ztPRXp9uTwP3y0Bv85rzmif6By1rlTduu318TQ==", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.11.2.tgz", + "integrity": "sha512-0/22YmN+yBDyr+wo+t4SzgIysX9n4bvNb941ebtF5YIglWn0fRNXKNQXKP7EvHhAiRssKwMeciVPcJR7pDIEsQ==", "requires": { "@types/node": "^14.14.20", "conf": "^9.0.0", @@ -1964,35 +1966,23 @@ }, "dependencies": { "@types/node": { - "version": "14.17.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", - "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==" + "version": "14.17.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.34.tgz", + "integrity": "sha512-USUftMYpmuMzeWobskoPfzDi+vkpe0dvcOBRNOscFrGxVp4jomnRxWuVohgqBow2xyIPC0S3gjxV/5079jhmDg==" }, "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.49.0" + "mime-db": "1.51.0" } }, - "punycode": { - "version": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "safe-buffer": { - "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, "xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", @@ -2055,7 +2045,7 @@ }, "dashdash": { "version": "1.14.1", - "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { "assert-plus": "^1.0.0" @@ -2272,12 +2262,12 @@ "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { - "jsbn": "~0.1.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ecdsa-sig-formatter": { @@ -3259,7 +3249,7 @@ }, "extsprintf": { "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { @@ -3422,16 +3412,16 @@ }, "forever-agent": { "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.2", - "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "1.0.6", + "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, @@ -3712,7 +3702,7 @@ }, "getpass": { "version": "0.1.7", - "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { "assert-plus": "^1.0.0" @@ -3835,7 +3825,7 @@ }, "har-schema": { "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { @@ -3967,7 +3957,7 @@ }, "http-signature": { "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { "assert-plus": "^1.0.0", @@ -4277,7 +4267,7 @@ }, "is-typedarray": { "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-unicode-supported": { @@ -4308,7 +4298,7 @@ }, "isstream": { "version": "0.1.2", - "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul": { @@ -4390,9 +4380,8 @@ }, "jsbn": { "version": "0.1.1", - "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jschardet": { "version": "3.0.0", @@ -4419,7 +4408,7 @@ }, "json-schema": { "version": "0.2.3", - "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { @@ -4505,7 +4494,7 @@ }, "jsprim": { "version": "1.4.1", - "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "requires": { "assert-plus": "1.0.0", @@ -5747,7 +5736,7 @@ }, "performance-now": { "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pg-connection-string": { @@ -6402,16 +6391,16 @@ }, "dependencies": { "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.49.0" + "mime-db": "1.51.0" } }, "qs": { @@ -6896,9 +6885,9 @@ "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==" }, "sshpk": { - "version": "1.14.1", - "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -6907,6 +6896,7 @@ "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" } }, @@ -7432,9 +7422,8 @@ }, "tweetnacl": { "version": "0.14.5", - "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type-check": { "version": "0.3.2", @@ -7737,7 +7726,7 @@ }, "verror": { "version": "1.10.0", - "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { "assert-plus": "^1.0.0", diff --git a/package.json b/package.json index 4fbee935..03d494f5 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "bcryptjs": "2.4.3", "body-parser": "1.19.0", "cookie-parser": "1.4.6", - "cos-nodejs-sdk-v5": "2.10.0", + "cos-nodejs-sdk-v5": "2.11.2", "diff-match-patch": "1.0.5", "express": "4.17.1", "extract-zip": "2.0.1", From 885a88a23fa35a43cbb24f0b3058fb80a932361d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 22 Nov 2021 06:49:59 +0000 Subject: [PATCH 109/347] fix(deps): update dependency node-fetch to v2.6.6 --- package-lock.json | 28 +++++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a3cdc79..4a6f5381 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5351,9 +5351,12 @@ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "requires": { + "whatwg-url": "^5.0.0" + } }, "node_memcached": { "version": "1.1.3", @@ -7374,6 +7377,11 @@ } } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -7750,6 +7758,20 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=" }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "1.3.0", "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", diff --git a/package.json b/package.json index 4fbee935..836a20de 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "log4js": "6.3.0", "moment": "2.29.1", "mysql2": "2.3.0", - "node-fetch": "2.6.1", + "node-fetch": "2.6.6", "nodemailer": "6.7.1", "pug": "3.0.2", "qiniu": "7.4.0", From a57da57e05070306df5b17ddae3c6ab9f92ebe74 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 22 Nov 2021 20:24:05 +0000 Subject: [PATCH 110/347] fix(deps): update dependency aws-sdk to v2.1034.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a3cdc79..fb6aa4be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1152,9 +1152,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.979.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.979.0.tgz", - "integrity": "sha512-pKKhpYZwmihCvuH3757WHY8JQI9g2wvtF3s0aiyH2xCUmX/6uekhExz/utD4uqZP3m3PwKZPGQkQkH30DtHrPw==", + "version": "2.1034.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1034.0.tgz", + "integrity": "sha512-yo0B9nOZAKgsQqIKXqkeOJ2Wrt8zx4wd1JmCP1XZzdz1O4b1TfZA/mTN5cMiszOaEk8EWqvPESrw8MaIHFS3wA==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index 4fbee935..67bd9028 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.979.0", + "aws-sdk": "2.1034.0", "bcryptjs": "2.4.3", "body-parser": "1.19.0", "cookie-parser": "1.4.6", From b8b0276f4a54199ce66fb646b327d323a434c7cc Mon Sep 17 00:00:00 2001 From: Byron Igoe Date: Sat, 20 Nov 2021 17:01:43 -0800 Subject: [PATCH 111/347] fix: handle registration and confirmation --- routes/auth.js | 9 ++++-- views/auth/confirm.pug | 62 +++++++++++++++++++++++++++++++++++++++++ views/auth/register.pug | 37 +++++++----------------- 3 files changed, 79 insertions(+), 29 deletions(-) create mode 100644 views/auth/confirm.pug diff --git a/routes/auth.js b/routes/auth.js index e3bb5c02..3b9db6ee 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -16,7 +16,7 @@ router.get('/login', (req, res) => { log.debug(`login redirect:${codePushWebUrl}`); res.redirect(`${codePushWebUrl}/login`); } else { - res.render('auth/login', { title: 'CodePushServer' }); + res.render('auth/login', { title: 'CodePushServer', email: req.query.email || '' }); } }); @@ -31,10 +31,15 @@ router.get('/register', (req, res) => { log.debug(`register redirect:${codePushWebUrl}`); res.redirect(`${codePushWebUrl}/register`); } else { - res.render('auth/login', { title: 'CodePushServer' }); + res.render('auth/register', { title: 'CodePushServer', email: req.query.email || '' }); } }); +router.get('/confirm', (req, res) => { + log.debug(`confirmation form`); + res.render('auth/confirm', { title: 'CodePushServer', email: req.query.email || '' }); +}); + router.post('/logout', (req, res) => { res.send('ok'); }); diff --git a/views/auth/confirm.pug b/views/auth/confirm.pug new file mode 100644 index 00000000..4b182f44 --- /dev/null +++ b/views/auth/confirm.pug @@ -0,0 +1,62 @@ +extends ../layout +block css + link(rel='stylesheet', href='/stylesheets/signin.css') + +block content + .container + form#form.form-signin(method="post") + h2.form-signin-heading Please confirm your token and create a password + .form-group + label.sr-only(for="inputEmail") Email address + input#inputEmail.form-control(type="text" name="email" placeholder="Email address" value=email required readonly=email ? true : false) + .form-group + label.sr-only(for="inputToken") Token + input#inputToken.form-control(type="text" name="token" placeholder="Token" required autofocus) + .form-group + label.sr-only(for="inputPassword") Create password + input#inputPassword.form-control(type="password" name="password" placeholder="Password" required) + a#submitBtn.btn.btn-lg.btn-primary.btn-block Confirm + + #myModal.modal.fade.bs-example-modal-sm(tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel") + .modal-dialog.modal-md + .modal-content + .modal-header + button.close(data-dismiss="modal" aria-label="Close") + span(aria-hidden="true") × + h4#mySmallModalLabel.modal-title Registration complete + .modal-body Please proceed to login. + .modal-footer + button.btn.btn-default(type="button" data-dismiss="modal") Close + button#okBtn.btn.btn-primary(type="button" data-dismiss="modal") OK +block js + script(). + var submit = false; + $('#inputEmail').on('click', function () { + location.href = '/auth/register?email=' + $('#inputEmail').val(); + }); + $('#okBtn').on('click', function () { + location.href = '/auth/login?email=' + $('#inputEmail').val(); + }); + $('#submitBtn').on('click', function () { + if (submit) { + return ; + } + console.log($('#form').serializeArray()); + submit = true; + $.ajax({ + type: 'post', + data: $('#form').serializeArray(), + url: "/users/", + dataType: 'json', + success: function (data) { + if (data.status == "OK") { + myModal = $('#myModal'); + myModal.modal('show'); + submit = false; + } else { + alert(data.message); + submit = false; + } + } + }); + }); diff --git a/views/auth/register.pug b/views/auth/register.pug index 1b91290e..5ae3fd49 100644 --- a/views/auth/register.pug +++ b/views/auth/register.pug @@ -5,28 +5,12 @@ block css block content .container form#form.form-signin(method="post") - h2.form-signin-heading Please sign in - label.sr-only(for="inputEmail") Email address - input#inputEmail.form-control(type="text" name="account" placeholder="Email address" required autofocus) - label.sr-only(for="inputPassword") Password - input#inputPassword.form-control(type="password" name="password" placeholder="Password" required) - .checkbox - label - input(type="checkbox" value="remember-me") - span Remember me - a#submitBtn.btn.btn-lg.btn-primary.btn-block Sign in + h2.form-signin-heading Please register + .form-group + label.sr-only(for="inputEmail") Email address + input#inputEmail.form-control(type="text" name="email" placeholder="Email address" value=email required autofocus) + a#submitBtn.btn.btn-lg.btn-primary.btn-block Register - #myModal.modal.fade.bs-example-modal-sm(tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel") - .modal-dialog.modal-md - .modal-content - .modal-header - button.close(data-dismiss="modal" aria-label="Close") - span(aria-hidden="true") × - h4#mySmallModalLabel.modal-title login token - .modal-body ... - .modal-footer - button.btn.btn-default(type="button" data-dismiss="modal") Close - button.btn.btn-primary(type="button" data-dismiss="modal") OK block js script(). var submit = false; @@ -38,19 +22,18 @@ block js $.ajax({ type: 'post', data: $('#form').serializeArray(), - url: $('#form').attr('action'), + url: "/users/registerCode", dataType: 'json', success: function (data) { if (data.status == "OK") { - myModal = $('#myModal'); - myModal.find(".modal-body").text(data.results.tokens) - myModal.modal('show'); + let email = $('#inputEmail').val(); + sessionStorage.setItem('email', email); + location.href = '/auth/confirm?email=' + email; submit = false; } else { - alert(data.errorMessage); + alert(data.message); submit = false; } } }); }); - From 53ffab6a2b18abd9468a87370c2300bf27fc27ec Mon Sep 17 00:00:00 2001 From: Byron Igoe Date: Mon, 22 Nov 2021 15:59:20 -0800 Subject: [PATCH 112/347] feat: check config flag `common.allowRegistration` to allow registration --- config/config.js | 2 ++ routes/auth.js | 6 +++++- test/api/auth/auth.test.js | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index e3f5db3e..88606101 100644 --- a/config/config.js +++ b/config/config.js @@ -68,6 +68,8 @@ config.development = { tokenSecret: process.env.TOKEN_SECRET || 'INSERT_RANDOM_TOKEN_KEY', }, common: { + // determine whether new account registrations are allowed + allowRegistration: false, /* * tryLoginTimes is control login error times to avoid force attack. * if value is 0, no limit for login auth, it may not safe for account. when it's a number, it means you can diff --git a/routes/auth.js b/routes/auth.js index 3b9db6ee..15f46508 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -31,7 +31,11 @@ router.get('/register', (req, res) => { log.debug(`register redirect:${codePushWebUrl}`); res.redirect(`${codePushWebUrl}/register`); } else { - res.render('auth/register', { title: 'CodePushServer', email: req.query.email || '' }); + if (_.get(config, 'common.allowRegistration')) { + res.render('auth/register', { title: 'CodePushServer', email: req.query.email || '' }); + } else { + res.redirect(`/auth/login`); + } } }); diff --git a/test/api/auth/auth.test.js b/test/api/auth/auth.test.js index 4e0fc2af..c8defaa4 100644 --- a/test/api/auth/auth.test.js +++ b/test/api/auth/auth.test.js @@ -35,8 +35,21 @@ describe('api/auth/test.js', function () { }); describe('sign up view', function (done) { + it('should show sign in redirect view if sign up not enabled', function (done) { + _.set(config, 'common.allowRegistration', false); + request + .get('/auth/register') + .send() + .end(function (err, res) { + should.not.exist(err); + res.status.should.equal(302); + done(); + }); + }); + it('should show sign up redirect view successful', function (done) { _.set(config, 'common.codePushWebUrl', 'http://127.0.0.1:3001'); + _.set(config, 'common.allowRegistration', true); request .get('/auth/register') .send() @@ -49,6 +62,7 @@ describe('api/auth/test.js', function () { it('should show sign up view successful', function (done) { _.set(config, 'common.codePushWebUrl', null); + _.set(config, 'common.allowRegistration', true); request .get('/auth/register') .send() From eafe1864808502aafab6404624a75a640a96fc51 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 23 Nov 2021 01:52:06 +0000 Subject: [PATCH 113/347] fix(deps): update dependency mysql2 to v2.3.3 --- package-lock.json | 63 ++++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36ae3cb2..de45fc4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4789,12 +4789,11 @@ } }, "lru-cache": { - "version": "4.1.3", - "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.3.tgz", - "integrity": "sha1-oRdc80lt/IQ2wVbDNLSVWZK85pw=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^4.0.0" } }, "make-dir": { @@ -5256,13 +5255,13 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mysql2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.0.tgz", - "integrity": "sha512-0t5Ivps5Tdy5YHk5NdKwQhe/4Qyn2pload+S+UooDBvsqngtzujG1BaTWBihQLfeKO3t3122/GtusBtmHEHqww==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", "requires": { - "denque": "^1.4.1", + "denque": "^2.0.1", "generate-function": "^2.3.1", - "iconv-lite": "^0.6.2", + "iconv-lite": "^0.6.3", "long": "^4.0.0", "lru-cache": "^6.0.0", "named-placeholders": "^1.1.2", @@ -5270,6 +5269,11 @@ "sqlstring": "^2.3.2" }, "dependencies": { + "denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -5277,19 +5281,6 @@ "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -5309,6 +5300,22 @@ "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", "requires": { "lru-cache": "^4.1.3" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } } }, "nanoid": { @@ -5963,7 +5970,7 @@ }, "pseudomap": { "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { @@ -6574,7 +6581,7 @@ }, "seq-queue": { "version": "0.0.5", - "resolved": "http://registry.npm.taobao.org/seq-queue/download/seq-queue-0.0.5.tgz", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { @@ -7903,9 +7910,9 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { - "version": "2.1.2", - "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { "version": "17.2.1", diff --git a/package.json b/package.json index 83f264ad..c9699c4b 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "lodash": "4.17.21", "log4js": "6.3.0", "moment": "2.29.1", - "mysql2": "2.3.0", + "mysql2": "2.3.3", "node-fetch": "2.6.6", "nodemailer": "6.7.1", "pug": "3.0.2", From 9949913c4014e29c294bddc283a9cb706c324f62 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 23 Nov 2021 10:21:41 +0800 Subject: [PATCH 114/347] fix(deps): update formidable to v2 --- core/services/package-manager.js | 5 ++-- package-lock.json | 39 +++++++++++++++++++++++++++++--- package.json | 2 +- routes/apps.js | 6 ++--- 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/core/services/package-manager.js b/core/services/package-manager.js index 793ecacf..003063ae 100644 --- a/core/services/package-manager.js +++ b/core/services/package-manager.js @@ -45,15 +45,14 @@ proto.findLatestPackageInfoByDeployVersion = function (deploymentsVersionsId) { proto.parseReqFile = function (req) { log.debug('parseReqFile'); return new Promise((resolve, reject) => { - var form = new formidable.IncomingForm(); - form.maxFieldsSize = 200 * 1024 * 1024; + var form = formidable(); form.parse(req, (err, fields, files) => { if (err) { log.debug('parseReqFile:', err); reject(new AppError.AppError('upload error')); } else { log.debug('parseReqFile fields:', fields); - log.debug('parseReqFile file location:', _.get(files, 'package.path')); + log.debug('parseReqFile file location:', _.get(files, 'package.filepath')); if (_.isEmpty(fields.packageInfo) || _.isEmpty(_.get(files, 'package'))) { log.debug('parseReqFile upload info lack'); reject(new AppError.AppError('upload info lack')); diff --git a/package-lock.json b/package-lock.json index 36ae3cb2..e0457c36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2178,6 +2178,15 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -3426,9 +3435,22 @@ } }, "formidable": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "requires": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "dependencies": { + "qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" + } + } }, "formstream": { "version": "1.1.1", @@ -3887,6 +3909,11 @@ "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz", "integrity": "sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==" }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + }, "hmacsha1": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hmacsha1/-/hmacsha1-1.0.0.tgz", @@ -7204,6 +7231,12 @@ "mime-types": "^2.1.12" } }, + "formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", diff --git a/package.json b/package.json index 83f264ad..03f0e6cb 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "diff-match-patch": "1.0.5", "express": "4.17.1", "extract-zip": "2.0.1", - "formidable": "1.2.6", + "formidable": "2.0.1", "fs-extra": "10.0.0", "helmet": "4.6.0", "jschardet": "3.0.0", diff --git a/routes/apps.js b/routes/apps.js index 03eb02c2..223bdb07 100644 --- a/routes/apps.js +++ b/routes/apps.js @@ -303,7 +303,7 @@ router.post( return packageManager .parseReqFile(req) .then((data) => { - if (data.package.type != 'application/zip') { + if (data.package.mimetype != 'application/zip') { log.debug(`upload file type is invlidate`, data.package); throw new AppError.AppError('upload file type is invalidate'); } @@ -313,11 +313,11 @@ router.post( deploymentInfo.appid, deploymentInfo.id, data.packageInfo, - data.package.path, + data.package.filepath, uid, ) .finally(() => { - common.deleteFolderSync(data.package.path); + common.deleteFolderSync(data.package.filepath); }); }) .then((packages) => { From 1611adcadd46affa896b7f227ff263c7305b1185 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 23 Nov 2021 10:26:22 +0800 Subject: [PATCH 115/347] chore(release): 1.1.0 --- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d74710d1..6c2bda0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,34 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.1.0](https://github.com/shm-open/code-push-server/compare/v1.0.6...v1.1.0) (2021-11-23) + + +### Features + +* check config flag `common.allowRegistration` to allow registration ([53ffab6](https://github.com/shm-open/code-push-server/commit/53ffab6a2b18abd9468a87370c2300bf27fc27ec)) + + +### Bug Fixes + +* **deps:** update dependency aliyun-sdk to v1.12.4 ([5c7b64f](https://github.com/shm-open/code-push-server/commit/5c7b64fe3022af76f1ccad34efaeac027b3e37c8)) +* **deps:** update dependency aws-sdk to v2.1034.0 ([a57da57](https://github.com/shm-open/code-push-server/commit/a57da57e05070306df5b17ddae3c6ab9f92ebe74)) +* **deps:** update dependency aws-sdk to v2.975.0 ([ce7eb3f](https://github.com/shm-open/code-push-server/commit/ce7eb3f86e4f31b8172fc93500d4c6f209a26d37)) +* **deps:** update dependency aws-sdk to v2.976.0 ([e598d4b](https://github.com/shm-open/code-push-server/commit/e598d4b07676615f02514ede88f071d2534bd091)) +* **deps:** update dependency aws-sdk to v2.978.0 ([1ff838c](https://github.com/shm-open/code-push-server/commit/1ff838c85bfc96744943621dcee54abbdb20c76e)) +* **deps:** update dependency aws-sdk to v2.979.0 ([f046a22](https://github.com/shm-open/code-push-server/commit/f046a22864429000a3d43537a683c7dbb911a3f2)) +* **deps:** update dependency cookie-parser to v1.4.6 ([82858f7](https://github.com/shm-open/code-push-server/commit/82858f78d70abecd52c68300cfad3b64a091ee7e)) +* **deps:** update dependency cos-nodejs-sdk-v5 to v2.11.2 ([1ca57d5](https://github.com/shm-open/code-push-server/commit/1ca57d5000436ca84a48caefff994864ed5a422d)) +* **deps:** update dependency formidable to v1.2.6 ([8b6efad](https://github.com/shm-open/code-push-server/commit/8b6efad55800db13a4f79f6d4950516adae94ee2)) +* **deps:** update dependency mysql2 to v2.3.3 ([eafe186](https://github.com/shm-open/code-push-server/commit/eafe1864808502aafab6404624a75a640a96fc51)) +* **deps:** update dependency node-fetch to v2.6.6 ([885a88a](https://github.com/shm-open/code-push-server/commit/885a88a23fa35a43cbb24f0b3058fb80a932361d)) +* **deps:** update dependency nodemailer to v6.7.1 ([521061a](https://github.com/shm-open/code-push-server/commit/521061abfe34bceae6da244f03855f842ad3e67f)) +* **deps:** update dependency sequelize to v6.11.0 ([5d1d791](https://github.com/shm-open/code-push-server/commit/5d1d791b17da2fa7eb6be52576ac03d91bef3d28)) +* **deps:** update dependency validator to v13.7.0 ([2d8c47e](https://github.com/shm-open/code-push-server/commit/2d8c47e26b12f9f351a9fc9045754635d7ded4e3)) +* **deps:** update dependency yargs to v17.2.1 ([76052d6](https://github.com/shm-open/code-push-server/commit/76052d68fcdaa27ccc631b305639c00760ae400d)) +* **deps:** update formidable to v2 ([9949913](https://github.com/shm-open/code-push-server/commit/9949913c4014e29c294bddc283a9cb706c324f62)) +* handle registration and confirmation ([b8b0276](https://github.com/shm-open/code-push-server/commit/b8b0276f4a54199ce66fb646b327d323a434c7cc)) + ### [1.0.6](https://github.com/shm-open/code-push-server/compare/v1.0.5...v1.0.6) (2021-08-23) diff --git a/package-lock.json b/package-lock.json index 09a4e1b3..cf9ac43e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "1.0.6", + "version": "1.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ee73f590..246c1bdf 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "1.0.6", + "version": "1.1.0", "license": "MIT", "repository": { "type": "git", From 187c198bc84acaf835c84f434438a8eb40720ad1 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 23 Nov 2021 15:00:21 +0800 Subject: [PATCH 116/347] fix: make all config items accessible with environment variables --- config/config.js | 74 ++++++++++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/config/config.js b/config/config.js index 88606101..9c6f3435 100644 --- a/config/config.js +++ b/config/config.js @@ -1,5 +1,17 @@ var os = require('os'); +function toBool(str) { + return str === 'true' || str === '1'; +} + +function toNumber(str, defaultValue) { + var num = Number(str); + if (Number.isNaN(num)) { + return defaultValue; + } + return num; +} + var config = {}; config.development = { // Config for database, only support mysql. @@ -14,10 +26,10 @@ config.development = { }, // Config for qiniu (http://www.qiniu.com/) cloud storage when storageType value is "qiniu". qiniu: { - accessKey: '', - secretKey: '', - bucketName: '', - downloadUrl: '', // Binary files download host address. + accessKey: process.env.QINIU_ACCESS_KEY, + secretKey: process.env.QINIU_SECRET_KEY, + bucketName: process.env.QINIU_BUCKET_NAME, + downloadUrl: process.env.QINIU_DOWNLOAD_URL || process.env.DOWNLOAD_URL, }, // Config for upyun (https://www.upyun.com/) storage when storageType value is "upyun" upyun: { @@ -25,16 +37,17 @@ config.development = { serviceName: process.env.UPYUN_SERVICE_NAME, operatorName: process.env.UPYUN_OPERATOR_NAME, operatorPass: process.env.UPYUN_OPERATOR_PASS, - downloadUrl: process.env.DOWNLOAD_URL, + downloadUrl: process.env.UPYUN_DOWNLOAD_URL || process.env.DOWNLOAD_URL, }, // Config for Amazon s3 (https://aws.amazon.com/cn/s3/) storage when storageType value is "s3". s3: { accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, sessionToken: process.env.AWS_SESSION_TOKEN, //(optional) - bucketName: process.env.BUCKET_NAME, - region: process.env.REGION, - downloadUrl: process.env.DOWNLOAD_URL, // binary files download host address. + bucketName: process.env.AWS_BUCKET_NAME, + region: process.env.AWS_REGION, + // binary files download host address. + downloadUrl: process.env.AWS_DOWNLOAD_URL || process.env.DOWNLOAD_URL, }, // Config for Aliyun OSS (https://www.aliyun.com/product/oss) when storageType value is "oss". oss: { @@ -42,23 +55,29 @@ config.development = { secretAccessKey: process.env.OSS_SECRET_ACCESS_KEY, endpoint: process.env.OSS_ENDPOINT, bucketName: process.env.OSS_BUCKET_NAME, - prefix: process.env.OSS_PREFIX, // Key prefix in object key - downloadUrl: process.env.OSS_DOWNLOAD_URL, // binary files download host address. + // Key prefix in object key + prefix: process.env.OSS_PREFIX, + // binary files download host address + downloadUrl: process.env.OSS_DOWNLOAD_URL || process.env.DOWNLOAD_URL, }, // Config for tencentyun COS (https://cloud.tencent.com/product/cos) when storageType value is "oss". tencentcloud: { - accessKeyId: '', - secretAccessKey: '', - bucketName: '', - region: '', - downloadUrl: '', // binary files download host address. + accessKeyId: process.env.COS_ACCESS_KEY_ID, + secretAccessKey: process.env.COS_SECRET_ACCESS_KEY, + bucketName: process.env.COS_BUCKET_NAME, + region: process.env.COS_REGION, + // binary files download host address + downloadUrl: process.env.COS_DOWNLOAD_URL || process.env.DOWNLOAD_URL, }, // Config for local storage when storageType value is "local". local: { // Binary files storage dir, Do not use tmpdir and it's public download dir. storageDir: process.env.STORAGE_DIR || os.tmpdir(), // Binary files download host address which Code Push Server listen to. the files storage in storageDir. - downloadUrl: process.env.LOCAL_DOWNLOAD_URL || 'http://127.0.0.1:3000/download', + downloadUrl: + process.env.LOCAL_DOWNLOAD_URL || + process.env.DOWNLOAD_URL || + 'http://127.0.0.1:3000/download', // public static download spacename. public: '/download', }, @@ -69,34 +88,35 @@ config.development = { }, common: { // determine whether new account registrations are allowed - allowRegistration: false, + allowRegistration: toBool(process.env.ALLOW_REGISTRATION), /* * tryLoginTimes is control login error times to avoid force attack. * if value is 0, no limit for login auth, it may not safe for account. when it's a number, it means you can * try that times today. but it need config redis server. */ - tryLoginTimes: 4, - // CodePush Web(https://github.com/lisong/code-push-web) login address. - //codePushWebUrl: "http://127.0.0.1:3001/login", + tryLoginTimes: toNumber(process.env.TRY_LOGIN_TIMES, 4), // create patch updates's number. default value is 3 - diffNums: 3, + diffNums: toNumber(process.env.DIFF_NUMS, 3), // data dir for caclulate diff files. it's optimization. dataDir: process.env.DATA_DIR || os.tmpdir(), // storageType which is your binary package files store. options value is ("local" | "qiniu" | "s3"| "oss" || "tencentcloud") storageType: process.env.STORAGE_TYPE || 'local', // options value is (true | false), when it's true, it will cache updateCheck results in redis. - updateCheckCache: false, + updateCheckCache: toBool(process.env.UPDATE_CHECK_CACHE), // options value is (true | false), when it's true, it will cache rollout results in redis - rolloutClientUniqueIdCache: false, + rolloutClientUniqueIdCache: toBool(process.env.ROLLOUT_CLIENT_UNIQUE_ID_CACHE), + + // CodePush Web(https://github.com/lisong/code-push-web) login address. + //codePushWebUrl: "http://127.0.0.1:3001/login", }, // Config for smtp email,register module need validate user email project source https://github.com/nodemailer/nodemailer smtpConfig: { - host: '', - port: 465, + host: process.env.SMTP_HOST, + port: process.env.SMTP_PORT || 465, secure: true, auth: { - user: '', - pass: '', + user: process.env.SMTP_USERNAME, + pass: process.env.SMTP_PASSWORD, }, }, // Config for redis (register module, tryLoginTimes module) From 66991276444efcabd2d8b08244f7e459df9ef4e3 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 23 Nov 2021 15:20:09 +0800 Subject: [PATCH 117/347] fix: use unified log level config and config it by LOG_LEVEL --- app.js | 1 - config/config.js | 4 +--- routes/account.js | 3 --- routes/apps.js | 3 --- 4 files changed, 1 insertion(+), 10 deletions(-) diff --git a/app.js b/app.js index 4f706bac..14107891 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,5 @@ var express = require('express'); var path = require('path'); -var favicon = require('serve-favicon'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var helmet = require('helmet'); diff --git a/config/config.js b/config/config.js index 9c6f3435..0b9fbe95 100644 --- a/config/config.js +++ b/config/config.js @@ -149,9 +149,7 @@ config.development = { config.development.log4js = { appenders: { console: { type: 'console' } }, categories: { - default: { appenders: ['console'], level: 'error' }, - startup: { appenders: ['console'], level: 'info' }, - http: { appenders: ['console'], level: 'info' }, + default: { appenders: ['console'], level: process.env.LOG_LEVEL || 'info' }, }, }; diff --git a/routes/account.js b/routes/account.js index 1ad43c4e..63451918 100644 --- a/routes/account.js +++ b/routes/account.js @@ -1,8 +1,5 @@ var express = require('express'); var router = express.Router(); -var models = require('../models'); -var _ = require('lodash'); -var security = require('../core/utils/security'); var middleware = require('../core/middleware'); var log4js = require('log4js'); var log = log4js.getLogger('cps:account'); diff --git a/routes/apps.js b/routes/apps.js index 223bdb07..ee2f0081 100644 --- a/routes/apps.js +++ b/routes/apps.js @@ -11,9 +11,6 @@ var PackageManager = require('../core/services/package-manager'); var AppError = require('../core/app-error'); var common = require('../core/utils/common'); var config = require('../core/config'); -const REGEX = /^(\w+)(-android|-ios)$/; -const REGEX_ANDROID = /^(\w+)(-android)$/; -const REGEX_IOS = /^(\w+)(-ios)$/; var log4js = require('log4js'); var log = log4js.getLogger('cps:apps'); From 15fd585e7d8a4a94b49d1b36aa5e39d53a5b69a7 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 23 Nov 2021 15:20:48 +0800 Subject: [PATCH 118/347] refactor: remove serve-favicon package --- package-lock.json | 19 ------------------- package.json | 1 - 2 files changed, 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index cf9ac43e..118d5014 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6692,25 +6692,6 @@ "randombytes": "^2.1.0" } }, - "serve-favicon": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", - "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", - "requires": { - "etag": "~1.8.1", - "fresh": "0.5.2", - "ms": "2.1.1", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, "serve-static": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", diff --git a/package.json b/package.json index 246c1bdf..90bb17c3 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,6 @@ "recursive-readdir": "2.2.2", "redis": "3.1.2", "sequelize": "6.11.0", - "serve-favicon": "2.5.0", "slash": "3.0.0", "upyun": "3.4.4", "validator": "13.7.0", From 1536408a12f15b218ee04db2accd53b751ac0ac7 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 23 Nov 2021 15:25:00 +0800 Subject: [PATCH 119/347] chore: remove broken coverage test and cleanup --- Makefile | 22 +- package-lock.json | 679 ++++------------------------------------------ package.json | 5 +- 3 files changed, 57 insertions(+), 649 deletions(-) diff --git a/Makefile b/Makefile index 3425b319..54847161 100644 --- a/Makefile +++ b/Makefile @@ -2,29 +2,13 @@ ROOT := $(shell pwd) VERSION := $(shell node -p "require('./package.json').version") .PHONY: test -test: test-integration - -# test-unit: -# @echo "\nRunning unit tests..." -# @NODE_ENV=test CONFIG_FILE=${ROOT}/config/config.test.js mocha test/unit --recursive - -.PHONY: test-integration -test-integration: +test: @echo "\nRunning integration tests..." @mocha test/api/init --exit @mocha test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index --exit --recursive --timeout 15000 -.PHONY: coverage -coverage: - @echo "\n\nRunning coverage report..." - rm -rf coverage - @mocha test/api/init --exit - @./node_modules/istanbul/lib/cli.js cover --report lcovonly --dir coverage/api ./node_modules/.bin/_mocha \ - test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index -- -R spec --exit --recursive --timeout 15000 - @./node_modules/istanbul/lib/cli.js report - -.PHONY: build-docker -build-docker: +.PHONY: release-docker +release-docker: @echo "\nBuilding docker image..." docker pull node:lts-alpine docker build -t shmopen/code-push-server:latest --no-cache . diff --git a/package-lock.json b/package-lock.json index 118d5014..38728e82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,12 +39,6 @@ "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, @@ -366,12 +360,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -396,15 +384,6 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -636,15 +615,6 @@ "ms": "2.1.2" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -659,12 +629,6 @@ "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -760,15 +724,6 @@ "is-extglob": "^2.1.1" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -783,12 +738,6 @@ "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -818,12 +767,6 @@ "through": ">=2.2.7 <3" } }, - "abbrev": { - "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", - "dev": true - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -955,18 +898,6 @@ } } }, - "align-text": { - "version": "0.1.4", - "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, "aliyun-oss-upload-stream": { "version": "1.3.0", "resolved": "http://registry.npm.taobao.org/aliyun-oss-upload-stream/download/aliyun-oss-upload-stream-1.3.0.tgz", @@ -987,7 +918,8 @@ "amdefine": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "optional": true }, "ansi-colors": { "version": "4.1.1", @@ -1025,13 +957,10 @@ } }, "argparse": { - "version": "1.0.10", - "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "aria-query": { "version": "4.2.2", @@ -1138,12 +1067,6 @@ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", "dev": true }, - "async": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", @@ -1433,17 +1356,6 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "center-align": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1453,23 +1365,6 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "character-parser": { @@ -1612,14 +1507,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -1627,11 +1514,6 @@ "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -1825,25 +1707,6 @@ "through2": "^4.0.0" }, "dependencies": { - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -1851,17 +1714,8 @@ "dev": true }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-js": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", - "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", - "dev": true, - "optional": true + "version": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -2013,17 +1867,6 @@ "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, "crypt": { @@ -2472,12 +2315,6 @@ "color-convert": "^2.0.1" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2575,15 +2412,6 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2594,15 +2422,6 @@ "type-check": "~0.4.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2670,12 +2489,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -2754,20 +2567,6 @@ "ms": "2.1.2" } }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3781,14 +3580,15 @@ } }, "glob": { - "version": "5.0.15", - "resolved": "http://registry.npm.taobao.org/glob/download/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { + "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "2 || 3", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -3834,15 +3634,15 @@ "dev": true }, "handlebars": { - "version": "4.0.11", - "resolved": "http://registry.npm.taobao.org/handlebars/download/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" } }, "har-schema": { @@ -3880,9 +3680,9 @@ "dev": true }, "has-flag": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-symbols": { @@ -3926,23 +3726,6 @@ "dev": true, "requires": { "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "http-errors": { @@ -4328,49 +4111,6 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "istanbul": { - "version": "0.4.5", - "resolved": "http://registry.npm.taobao.org/istanbul/download/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "abbrev": { - "version": "1.0.9", - "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "resolve": { - "version": "1.1.7", - "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "source-map": { - "version": "http://registry.npm.taobao.org/source-map/download/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "jmespath": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", @@ -4388,21 +4128,12 @@ "dev": true }, "js-yaml": { - "version": "3.11.0", - "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.11.0.tgz", - "integrity": "sha1-WXwai9VxUvJtYizkEXhRpR9euu8=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.0.tgz", - "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=", - "dev": true - } + "argparse": "^2.0.1" } }, "jsbn": { @@ -4466,14 +4197,6 @@ "dev": true, "requires": { "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } } }, "jsonfile": { @@ -4569,14 +4292,10 @@ } }, "kind-of": { - "version": "3.2.2", - "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true }, "language-subtag-registry": { "version": "0.3.21", @@ -4593,13 +4312,6 @@ "language-subtag-registry": "~0.3.2" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, "levn": { "version": "0.3.0", "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", @@ -4799,13 +4511,6 @@ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, - "longest": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true, - "optional": true - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -5044,10 +4749,9 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minimist-options": { "version": "4.1.0", @@ -5058,23 +4762,14 @@ "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } } }, "mkdirp": { - "version": "0.5.0", - "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "dev": true, + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "mocha": { @@ -5109,12 +4804,6 @@ "yargs-unparser": "2.0.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -5168,15 +4857,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -5225,15 +4905,6 @@ "has-flag": "^4.0.0" } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -5404,15 +5075,6 @@ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.1.tgz", "integrity": "sha512-E1C8G3rnXrGjznwGP1k+OrW5k4rl0XtqTEB19f7vtJAMYwfxZVSsAu2iY5xJkrZsbVYr6PwwAwRmFlakPoFC0A==" }, - "nopt": { - "version": "3.0.6", - "resolved": "http://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, "normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -5425,15 +5087,6 @@ "validate-npm-package-license": "^3.0.1" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -5442,12 +5095,6 @@ "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -5571,24 +5218,6 @@ } } }, - "optimist": { - "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } - } - }, "optionator": { "version": "0.8.2", "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", @@ -5617,13 +5246,6 @@ "integrity": "sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=", "requires": { "minimist": "^1.1.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - } } }, "p-limit": { @@ -6393,13 +6015,6 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "repeat-string": { - "version": "1.6.1", - "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "optional": true - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -6496,16 +6111,6 @@ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, - "right-align": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -6513,22 +6118,6 @@ "dev": true, "requires": { "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } } }, "run-parallel": { @@ -6640,14 +6229,6 @@ "ms": "2.1.2" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6665,16 +6246,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -6833,13 +6404,10 @@ } }, "source-map": { - "version": "0.4.4", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "spdx-correct": { "version": "3.1.1", @@ -6891,12 +6459,6 @@ "readable-stream": "^3.0.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, "sqlstring": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", @@ -6960,15 +6522,6 @@ "p-locate": "^5.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -7002,12 +6555,6 @@ "lru-cache": "^6.0.0" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -7190,15 +6737,6 @@ "semver": "^7.3.2" }, "dependencies": { - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -7225,15 +6763,6 @@ "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "mime": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", @@ -7267,12 +6796,6 @@ "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -7293,12 +6816,12 @@ "dev": true }, "supports-color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "^3.0.0" } }, "text-extensions": { @@ -7409,14 +6932,6 @@ "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } } }, "tslib": { @@ -7499,69 +7014,9 @@ "dev": true }, "uglify-js": { - "version": "2.8.29", - "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", + "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", "dev": true, "optional": true }, @@ -7609,14 +7064,6 @@ "mime-types": "^2.1.15" }, "dependencies": { - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -7700,21 +7147,6 @@ "mkdirp": "^0.5.1", "mz": "^2.7.0", "unescape": "^1.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - } } }, "utils-merge": { @@ -7783,9 +7215,9 @@ } }, "which": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", - "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -7812,13 +7244,6 @@ "semver": "^5.0.1" } }, - "window-size": { - "version": "0.1.0", - "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true - }, "with": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", diff --git a/package.json b/package.json index 90bb17c3..4e64bfae 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ "init": "node ./bin/db init", "upgrade": "node ./bin/db upgrade", "release": "npm test && standard-version && git push --follow-tags origin master && npm publish", - "test": "make test", - "coverage": "make coverage" + "release-docker": "make release-docker", + "test": "make test" }, "dependencies": { "aliyun-oss-upload-stream": "1.3.0", @@ -69,7 +69,6 @@ }, "devDependencies": { "@shm-open/eslint-config-bundle": "1.7.1", - "istanbul": "0.4.5", "mocha": "9.1.3", "should": "13.2.3", "standard-version": "9.3.2", From 7983706afeb2f92ba441dbe2874f1fb28704bd3f Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 23 Nov 2021 15:26:05 +0800 Subject: [PATCH 120/347] chore(release): 1.1.1 --- CHANGELOG.md | 8 ++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c2bda0b..797f7e56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.1.1](https://github.com/shm-open/code-push-server/compare/v1.1.0...v1.1.1) (2021-11-23) + + +### Bug Fixes + +* make all config items accessible with environment variables ([187c198](https://github.com/shm-open/code-push-server/commit/187c198bc84acaf835c84f434438a8eb40720ad1)) +* use unified log level config and config it by LOG_LEVEL ([6699127](https://github.com/shm-open/code-push-server/commit/66991276444efcabd2d8b08244f7e459df9ef4e3)) + ## [1.1.0](https://github.com/shm-open/code-push-server/compare/v1.0.6...v1.1.0) (2021-11-23) diff --git a/package-lock.json b/package-lock.json index 38728e82..15b76b3a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 4e64bfae..12bf0581 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "1.1.0", + "version": "1.1.1", "license": "MIT", "repository": { "type": "git", From 58a2af07a8d23fd2930b4745c28456f50bae16eb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 26 Nov 2021 12:15:09 +0000 Subject: [PATCH 121/347] fix(deps): update dependency nodemailer to v6.7.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15b76b3a..139e8adb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5071,9 +5071,9 @@ } }, "nodemailer": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.1.tgz", - "integrity": "sha512-E1C8G3rnXrGjznwGP1k+OrW5k4rl0XtqTEB19f7vtJAMYwfxZVSsAu2iY5xJkrZsbVYr6PwwAwRmFlakPoFC0A==" + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.2.tgz", + "integrity": "sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q==" }, "normalize-package-data": { "version": "3.0.3", diff --git a/package.json b/package.json index 12bf0581..a6399521 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "moment": "2.29.1", "mysql2": "2.3.3", "node-fetch": "2.6.6", - "nodemailer": "6.7.1", + "nodemailer": "6.7.2", "pug": "3.0.2", "qiniu": "7.4.0", "rand-token": "1.0.1", From 03768f283a89c828258f2810a5620cccdae6081d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 30 Nov 2021 02:27:54 +0000 Subject: [PATCH 122/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.7.2 --- package-lock.json | 192 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 97 insertions(+), 97 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15b76b3a..33b1d604 100644 --- a/package-lock.json +++ b/package-lock.json @@ -307,9 +307,9 @@ } }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -361,9 +361,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -410,9 +410,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -519,27 +519,27 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.1.tgz", - "integrity": "sha512-29goXuFraNqAVHpBZXKdMZ2NZoPbTInZYJzNey92Jup2UlhY92de4AcJOihu923abtkzdzFBFNsWyntrGK+gHw==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.2.tgz", + "integrity": "sha512-O42rHicpMmKcAyy/FClAWRS9iv0SaDHx5g3uofbdCObwJfKww6vaqpeq5dfEmK+h00N8oiQb24d3Wz5UlVq7dA==", "dev": true, "requires": { "@delagen/eslint-plugin-deprecation": "1.3.0", - "@typescript-eslint/eslint-plugin": "5.4.0", - "@typescript-eslint/parser": "5.4.0", + "@typescript-eslint/eslint-plugin": "5.5.0", + "@typescript-eslint/parser": "5.5.0", "babel-eslint": "10.1.0", - "eslint": "8.2.0", + "eslint": "8.3.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", "eslint-plugin-import": "2.25.3", "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-react": "7.27.0", + "eslint-plugin-react": "7.27.1", "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.14", - "prettier": "2.4.1" + "eslint-plugin-taro": "3.3.15", + "prettier": "2.5.0" } }, "@tootallnate/once": { @@ -591,13 +591,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.4.0.tgz", - "integrity": "sha512-9/yPSBlwzsetCsGEn9j24D8vGQgJkOTr4oMLas/w886ZtzKIs1iyoqFrwsX2fqYEeUwsdBpC21gcjRGo57u0eg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.5.0.tgz", + "integrity": "sha512-4bV6fulqbuaO9UMXU0Ia0o6z6if+kmMRW8rMRyfqXj/eGrZZRGedS4n0adeGNnjr8LKAM495hrQ7Tea52UWmQA==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "5.4.0", - "@typescript-eslint/scope-manager": "5.4.0", + "@typescript-eslint/experimental-utils": "5.5.0", + "@typescript-eslint/scope-manager": "5.5.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -607,9 +607,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -633,35 +633,35 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz", - "integrity": "sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.5.0.tgz", + "integrity": "sha512-kjWeeVU+4lQ1SLYErRKV5yDXbWDPkpbzTUUlfAUifPYvpX0qZlrcCZ96/6oWxt3QxtK5WVhXz+KsnwW9cIW+3A==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.4.0", - "@typescript-eslint/types": "5.4.0", - "@typescript-eslint/typescript-estree": "5.4.0", + "@typescript-eslint/scope-manager": "5.5.0", + "@typescript-eslint/types": "5.5.0", + "@typescript-eslint/typescript-estree": "5.5.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.4.0.tgz", - "integrity": "sha512-JoB41EmxiYpaEsRwpZEYAJ9XQURPFer8hpkIW9GiaspVLX8oqbqNM8P4EP8HOZg96yaALiLEVWllA2E8vwsIKw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.5.0.tgz", + "integrity": "sha512-JsXBU+kgQOAgzUn2jPrLA+Rd0Y1dswOlX3hp8MuRO1hQDs6xgHtbCXEiAu7bz5hyVURxbXcA2draasMbNqrhmg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.4.0", - "@typescript-eslint/types": "5.4.0", - "@typescript-eslint/typescript-estree": "5.4.0", + "@typescript-eslint/scope-manager": "5.5.0", + "@typescript-eslint/types": "5.5.0", + "@typescript-eslint/typescript-estree": "5.5.0", "debug": "^4.3.2" }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -676,29 +676,29 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.4.0.tgz", - "integrity": "sha512-pRxFjYwoi8R+n+sibjgF9iUiAELU9ihPBtHzocyW8v8D8G8KeQvXTsW7+CBYIyTYsmhtNk50QPGLE3vrvhM5KA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.5.0.tgz", + "integrity": "sha512-0/r656RmRLo7CbN4Mdd+xZyPJ/fPCKhYdU6mnZx+8msAD8nJSP8EyCFkzbd6vNVZzZvWlMYrSNekqGrCBqFQhg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.4.0", - "@typescript-eslint/visitor-keys": "5.4.0" + "@typescript-eslint/types": "5.5.0", + "@typescript-eslint/visitor-keys": "5.5.0" } }, "@typescript-eslint/types": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.4.0.tgz", - "integrity": "sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.5.0.tgz", + "integrity": "sha512-OaYTqkW3GnuHxqsxxJ6KypIKd5Uw7bFiQJZRyNi1jbMJnK3Hc/DR4KwB6KJj6PBRkJJoaNwzMNv9vtTk87JhOg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz", - "integrity": "sha512-nhlNoBdhKuwiLMx6GrybPT3SFILm5Gij2YBdPEPFlYNFAXUJWX6QRgvi/lwVoadaQEFsizohs6aFRMqsXI2ewA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.5.0.tgz", + "integrity": "sha512-pVn8btYUiYrjonhMAO0yG8lm7RApzy2L4RC7Td/mC/qFkyf6vRbGyZozoA94+w6D2Y2GRqpMoCWcwx/EUOzyoQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.4.0", - "@typescript-eslint/visitor-keys": "5.4.0", + "@typescript-eslint/types": "5.5.0", + "@typescript-eslint/visitor-keys": "5.5.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -707,9 +707,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -742,12 +742,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz", - "integrity": "sha512-PVbax7MeE7tdLfW5SA0fs8NGVVr+buMPrcj+CWYWPXsZCH8qZ1THufDzbXm1xrZ2b2PA1iENJ0sRq5fuUtvsJg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.5.0.tgz", + "integrity": "sha512-4GzJ1kRtsWzHhdM40tv0ZKHNSbkDhF0Woi/TDwVJX6UICwJItvP7ZTXbjTkCdrors7ww0sYe0t+cIKDAJwZ7Kw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.4.0", + "@typescript-eslint/types": "5.5.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -1797,9 +1797,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.1.tgz", - "integrity": "sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ==", + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.2.tgz", + "integrity": "sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg==", "dev": true }, "core-util-is": { @@ -2255,9 +2255,9 @@ } }, "eslint": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.2.0.tgz", - "integrity": "sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz", + "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==", "dev": true, "requires": { "@eslint/eslintrc": "^1.0.4", @@ -2269,10 +2269,10 @@ "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^6.0.0", + "eslint-scope": "^7.1.0", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.1.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2341,9 +2341,9 @@ "dev": true }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -2356,9 +2356,9 @@ "dev": true }, "eslint-scope": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -2559,9 +2559,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -2743,9 +2743,9 @@ } }, "eslint-plugin-react": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.0.tgz", - "integrity": "sha512-0Ut+CkzpppgFtoIhdzi2LpdpxxBvgFf99eFqWxJnUrO7mMe0eOiNpou6rvNYeVVV6lWZvTah0BFne7k5xHjARg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.1.tgz", + "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -2820,9 +2820,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.14", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.14.tgz", - "integrity": "sha512-PzT8NDoZhaYIz0JXZhUYJ2L5a34HU8zSLWgVAT5WWUVHymiFM0LyTJNpjWyffarbDaasdYjeMVJAZEIFdOEMsw==", + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.15.tgz", + "integrity": "sha512-jqUE5zbA1X9QrIkn0Lqk8odh2BVp2/Lw3K+0tV8zokkQEDc6a/iSjVxtwUkWjWexT6hUbZyRzbB3LH2hakf4aA==", "dev": true, "requires": { "has": "^1.0.1" @@ -2870,14 +2870,14 @@ "dev": true }, "espree": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz", + "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==", "dev": true, "requires": { - "acorn": "^8.5.0", + "acorn": "^8.6.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" + "eslint-visitor-keys": "^3.1.0" }, "dependencies": { "acorn": { @@ -5488,9 +5488,9 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", + "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==", "dev": true }, "prettier-linter-helpers": { @@ -6923,9 +6923,9 @@ "dev": true }, "tsconfig-paths": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", - "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", "dev": true, "requires": { "@types/json5": "^0.0.29", diff --git a/package.json b/package.json index 12bf0581..f4ad4f57 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.7.1", + "@shm-open/eslint-config-bundle": "1.7.2", "mocha": "9.1.3", "should": "13.2.3", "standard-version": "9.3.2", From 3f870378d5cf82739ff3392a22c492e57296cb72 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 6 Dec 2021 08:57:25 +0000 Subject: [PATCH 123/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.7.3 --- package-lock.json | 64 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 33b1d604..8e2d5071 100644 --- a/package-lock.json +++ b/package-lock.json @@ -344,14 +344,14 @@ } }, "@eslint/eslintrc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz", - "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.0.0", + "espree": "^9.2.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", @@ -399,12 +399,12 @@ } }, "@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.0", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" }, @@ -519,16 +519,16 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.2.tgz", - "integrity": "sha512-O42rHicpMmKcAyy/FClAWRS9iv0SaDHx5g3uofbdCObwJfKww6vaqpeq5dfEmK+h00N8oiQb24d3Wz5UlVq7dA==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.3.tgz", + "integrity": "sha512-vyNEeXeDroJt7wZ1dHrezDASzIS9tRiC+ftIEFG6pgqUCqOuWmedit9R8oEervQ5ckoG4i63lTDZi7Jel+r9Kg==", "dev": true, "requires": { "@delagen/eslint-plugin-deprecation": "1.3.0", "@typescript-eslint/eslint-plugin": "5.5.0", "@typescript-eslint/parser": "5.5.0", "babel-eslint": "10.1.0", - "eslint": "8.3.0", + "eslint": "8.4.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", @@ -538,8 +538,8 @@ "eslint-plugin-react": "7.27.1", "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.15", - "prettier": "2.5.0" + "eslint-plugin-taro": "3.3.16", + "prettier": "2.5.1" } }, "@tootallnate/once": { @@ -1797,9 +1797,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.19.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.2.tgz", - "integrity": "sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg==", + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.3.tgz", + "integrity": "sha512-N3JruInmCyt7EJj5mAq3csCgGYgiSqu7p7TQp2KOztr180/OAIxyIvL1FCjzgmQk/t3Yniua50Fsak7FShI9lA==", "dev": true }, "core-util-is": { @@ -2255,13 +2255,13 @@ } }, "eslint": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz", - "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.4.0.tgz", + "integrity": "sha512-kv0XQcAQJL/VD9THQKhTQZVqkJKA+tIj/v2ZKNaIHRAADcJWFb+B/BAewUYuF6UVg1s2xC5qXVoDk0G8sKGeTA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.4", - "@humanwhocodes/config-array": "^0.6.0", + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2272,7 +2272,7 @@ "eslint-scope": "^7.1.0", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.1.0", - "espree": "^9.1.0", + "espree": "^9.2.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2820,9 +2820,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.15", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.15.tgz", - "integrity": "sha512-jqUE5zbA1X9QrIkn0Lqk8odh2BVp2/Lw3K+0tV8zokkQEDc6a/iSjVxtwUkWjWexT6hUbZyRzbB3LH2hakf4aA==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.16.tgz", + "integrity": "sha512-wAA1Kddvinq4dmapuFQ+bPKk7yS3g7XmBaQylBd0IFvwCCg3Y/hH3zVOZF3FSuHfQVQzZIXASXuNxgSC9n5l+A==", "dev": true, "requires": { "has": "^1.0.1" @@ -2870,9 +2870,9 @@ "dev": true }, "espree": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz", - "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", + "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", "dev": true, "requires": { "acorn": "^8.6.0", @@ -5488,9 +5488,9 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", - "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, "prettier-linter-helpers": { diff --git a/package.json b/package.json index f4ad4f57..13f3d1be 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.7.2", + "@shm-open/eslint-config-bundle": "1.7.3", "mocha": "9.1.3", "should": "13.2.3", "standard-version": "9.3.2", From abf70238f2ccc043c1bd7e600b6ca4d49de4eb9c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Dec 2021 03:56:14 +0000 Subject: [PATCH 124/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.7.4 --- package-lock.json | 301 ++++++++++++++++++++++++++++++++++------------ package.json | 2 +- 2 files changed, 227 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8e2d5071..4dc29d62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,9 +14,9 @@ } }, "@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.5.tgz", + "integrity": "sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==", "dev": true, "requires": { "@babel/types": "^7.16.0", @@ -42,6 +42,33 @@ } } }, + "@babel/helper-environment-visitor": { + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz", + "integrity": "sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + } + } + } + }, "@babel/helper-function-name": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", @@ -174,18 +201,18 @@ "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" }, "@babel/runtime": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", - "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.5.tgz", + "integrity": "sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz", - "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.5.tgz", + "integrity": "sha512-F1pMwvTiUNSAM8mc45kccMQxj31x3y3P+tA/X8hKNWp3/hUsxdGxZ3D3H8JIkxtfA8qGkaBTKvcmvStaYseAFw==", "dev": true, "requires": { "core-js-pure": "^3.19.0", @@ -230,9 +257,9 @@ } }, "@babel/parser": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.5.tgz", + "integrity": "sha512-+Ce7T5iPNWzfu9C1aB5tN3Lyafs5xb3Ic7vBWyZL2KXT3QSdD1dD3CvgOzPmQKoNNRt6uauc0XwNJTQtXC2/Mw==", "dev": true }, "@babel/types": { @@ -248,17 +275,18 @@ } }, "@babel/traverse": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.5.tgz", + "integrity": "sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==", "dev": true, "requires": { "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", + "@babel/generator": "^7.16.5", + "@babel/helper-environment-visitor": "^7.16.5", "@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.3", + "@babel/parser": "^7.16.5", "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -291,9 +319,9 @@ } }, "@babel/parser": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.5.tgz", + "integrity": "sha512-+Ce7T5iPNWzfu9C1aB5tN3Lyafs5xb3Ic7vBWyZL2KXT3QSdD1dD3CvgOzPmQKoNNRt6uauc0XwNJTQtXC2/Mw==", "dev": true }, "@babel/types": { @@ -333,12 +361,12 @@ } }, "@delagen/eslint-plugin-deprecation": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@delagen/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.0.tgz", - "integrity": "sha512-hPe516znPnWrwyW1DFPcUKp+NQWPR4nx0+ycVbETIviw2G7V7vlqHRnf18skCniD15fGEGYzxOh1ZeuJndW9tQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@delagen/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.2.tgz", + "integrity": "sha512-cA6HE0GPeXMVHMXKuLVJadmjdYsdVEIw0MQ3j+YUx+50e/5jddpDrllBn0SeVqHbPQQqd52eRGctFaDw0NYRJg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "^5.0.0", + "@typescript-eslint/experimental-utils": "~5.3.1", "tslib": "^2.3.1", "tsutils": "^3.21.0" } @@ -519,16 +547,16 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.3.tgz", - "integrity": "sha512-vyNEeXeDroJt7wZ1dHrezDASzIS9tRiC+ftIEFG6pgqUCqOuWmedit9R8oEervQ5ckoG4i63lTDZi7Jel+r9Kg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.4.tgz", + "integrity": "sha512-mK9kAPkqfvfGGIHWwfExBTrXvuZneL//QPbXPxK+A0ib25AHkSmqqmudoFa+iOwOVvoM9ROp+1aY10pB7vvHrg==", "dev": true, "requires": { - "@delagen/eslint-plugin-deprecation": "1.3.0", - "@typescript-eslint/eslint-plugin": "5.5.0", - "@typescript-eslint/parser": "5.5.0", + "@delagen/eslint-plugin-deprecation": "1.3.2", + "@typescript-eslint/eslint-plugin": "5.7.0", + "@typescript-eslint/parser": "5.7.0", "babel-eslint": "10.1.0", - "eslint": "8.4.0", + "eslint": "8.4.1", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", @@ -591,13 +619,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.5.0.tgz", - "integrity": "sha512-4bV6fulqbuaO9UMXU0Ia0o6z6if+kmMRW8rMRyfqXj/eGrZZRGedS4n0adeGNnjr8LKAM495hrQ7Tea52UWmQA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.7.0.tgz", + "integrity": "sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "5.5.0", - "@typescript-eslint/scope-manager": "5.5.0", + "@typescript-eslint/experimental-utils": "5.7.0", + "@typescript-eslint/scope-manager": "5.7.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -606,6 +634,61 @@ "tsutils": "^3.21.0" }, "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.7.0.tgz", + "integrity": "sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.7.0", + "@typescript-eslint/types": "5.7.0", + "@typescript-eslint/typescript-estree": "5.7.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.7.0.tgz", + "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.7.0", + "@typescript-eslint/visitor-keys": "5.7.0" + } + }, + "@typescript-eslint/types": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.7.0.tgz", + "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.7.0.tgz", + "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.7.0", + "@typescript-eslint/visitor-keys": "5.7.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.7.0.tgz", + "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.7.0", + "eslint-visitor-keys": "^3.0.0" + } + }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -615,6 +698,15 @@ "ms": "2.1.2" } }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -633,31 +725,72 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.5.0.tgz", - "integrity": "sha512-kjWeeVU+4lQ1SLYErRKV5yDXbWDPkpbzTUUlfAUifPYvpX0qZlrcCZ96/6oWxt3QxtK5WVhXz+KsnwW9cIW+3A==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", + "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.5.0", - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/typescript-estree": "5.5.0", + "@typescript-eslint/scope-manager": "5.3.1", + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/typescript-estree": "5.3.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.5.0.tgz", - "integrity": "sha512-JsXBU+kgQOAgzUn2jPrLA+Rd0Y1dswOlX3hp8MuRO1hQDs6xgHtbCXEiAu7bz5hyVURxbXcA2draasMbNqrhmg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.7.0.tgz", + "integrity": "sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.5.0", - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/typescript-estree": "5.5.0", + "@typescript-eslint/scope-manager": "5.7.0", + "@typescript-eslint/types": "5.7.0", + "@typescript-eslint/typescript-estree": "5.7.0", "debug": "^4.3.2" }, "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.7.0.tgz", + "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.7.0", + "@typescript-eslint/visitor-keys": "5.7.0" + } + }, + "@typescript-eslint/types": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.7.0.tgz", + "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.7.0.tgz", + "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.7.0", + "@typescript-eslint/visitor-keys": "5.7.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.7.0.tgz", + "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.7.0", + "eslint-visitor-keys": "^3.0.0" + } + }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -667,38 +800,56 @@ "ms": "2.1.2" } }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "@typescript-eslint/scope-manager": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.5.0.tgz", - "integrity": "sha512-0/r656RmRLo7CbN4Mdd+xZyPJ/fPCKhYdU6mnZx+8msAD8nJSP8EyCFkzbd6vNVZzZvWlMYrSNekqGrCBqFQhg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", + "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/visitor-keys": "5.5.0" + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/visitor-keys": "5.3.1" } }, "@typescript-eslint/types": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.5.0.tgz", - "integrity": "sha512-OaYTqkW3GnuHxqsxxJ6KypIKd5Uw7bFiQJZRyNi1jbMJnK3Hc/DR4KwB6KJj6PBRkJJoaNwzMNv9vtTk87JhOg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", + "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.5.0.tgz", - "integrity": "sha512-pVn8btYUiYrjonhMAO0yG8lm7RApzy2L4RC7Td/mC/qFkyf6vRbGyZozoA94+w6D2Y2GRqpMoCWcwx/EUOzyoQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", + "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/visitor-keys": "5.5.0", + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/visitor-keys": "5.3.1", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -742,12 +893,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.5.0.tgz", - "integrity": "sha512-4GzJ1kRtsWzHhdM40tv0ZKHNSbkDhF0Woi/TDwVJX6UICwJItvP7ZTXbjTkCdrors7ww0sYe0t+cIKDAJwZ7Kw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", + "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.5.0", + "@typescript-eslint/types": "5.3.1", "eslint-visitor-keys": "^3.0.0" } }, @@ -2255,9 +2406,9 @@ } }, "eslint": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.4.0.tgz", - "integrity": "sha512-kv0XQcAQJL/VD9THQKhTQZVqkJKA+tIj/v2ZKNaIHRAADcJWFb+B/BAewUYuF6UVg1s2xC5qXVoDk0G8sKGeTA==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg==", "dev": true, "requires": { "@eslint/eslintrc": "^1.0.5", @@ -3992,9 +4143,9 @@ } }, "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-number": { @@ -4087,12 +4238,12 @@ "dev": true }, "is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" } }, "isarray": { diff --git a/package.json b/package.json index 13f3d1be..b0e69e03 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.7.3", + "@shm-open/eslint-config-bundle": "1.7.4", "mocha": "9.1.3", "should": "13.2.3", "standard-version": "9.3.2", From 59a9cd3e4a871c38e024986fb46ba98d457dd617 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 17 Dec 2021 04:18:58 +0000 Subject: [PATCH 125/347] fix(deps): update dependency express to v4.17.2 --- package-lock.json | 193 +++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 133 insertions(+), 62 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4dc29d62..056eb2b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -928,16 +928,16 @@ }, "dependencies": { "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.49.0" + "mime-db": "1.51.0" } } } @@ -1684,17 +1684,17 @@ } }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "dependencies": { "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -1911,9 +1911,9 @@ } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "cookie-parser": { "version": "1.4.6", @@ -3090,7 +3090,7 @@ }, "etag": { "version": "1.8.1", - "resolved": "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "events": { @@ -3099,16 +3099,16 @@ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -3122,19 +3122,41 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { + "body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "requires": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + } + }, + "bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -3143,27 +3165,53 @@ "ms": "2.0.0" } }, - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" - }, - "mime-types": { - "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "requires": { - "mime-db": "1.49.0" + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" } }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + }, + "raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "requires": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" } } }, @@ -3426,7 +3474,7 @@ }, "fresh": { "version": "0.5.2", - "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "fs-access": { @@ -4864,8 +4912,8 @@ }, "mime": { "version": "1.6.0", - "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", - "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.33.0", @@ -6301,9 +6349,9 @@ "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=" }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -6312,9 +6360,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -6335,14 +6383,37 @@ } } }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" } } }, @@ -6415,14 +6486,14 @@ } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, "setprototypeof": { diff --git a/package.json b/package.json index b0e69e03..61458ff4 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "cookie-parser": "1.4.6", "cos-nodejs-sdk-v5": "2.11.2", "diff-match-patch": "1.0.5", - "express": "4.17.1", + "express": "4.17.2", "extract-zip": "2.0.1", "formidable": "2.0.1", "fs-extra": "10.0.0", From a099f8c162a84341b543eeba3683f7afaf067a00 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 23 Dec 2021 23:37:21 +0000 Subject: [PATCH 126/347] fix(deps): update dependency yargs to v17.3.1 --- package-lock.json | 43 +++++++++++++++++++++++++++++++++++++------ package.json | 2 +- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4dc29d62..912021f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7505,23 +7505,54 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "17.2.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", - "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" + } } }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true }, "yargs-unparser": { "version": "2.0.0", diff --git a/package.json b/package.json index b0e69e03..5c989ca8 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "slash": "3.0.0", "upyun": "3.4.4", "validator": "13.7.0", - "yargs": "17.2.1", + "yargs": "17.3.1", "yazl": "2.5.1" }, "devDependencies": { From 4e570d646b3bae386280aa02cab6b7f58d504d1a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 27 Dec 2021 05:10:14 +0000 Subject: [PATCH 127/347] fix(deps): update dependency cos-nodejs-sdk-v5 to v2.11.6 --- package-lock.json | 26 +++++++++++++------------- package.json | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4dc29d62..e5eb4d14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1959,9 +1959,9 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cos-nodejs-sdk-v5": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.11.2.tgz", - "integrity": "sha512-0/22YmN+yBDyr+wo+t4SzgIysX9n4bvNb941ebtF5YIglWn0fRNXKNQXKP7EvHhAiRssKwMeciVPcJR7pDIEsQ==", + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.11.6.tgz", + "integrity": "sha512-K5z9g6yQns1h5tVUUt0T+x9SYrB6QYXslIi5bh8FLVtV4U/Gdv3zpedYSU5IvG+ly23ko9u6usdaKvb+x7Bm7Q==", "requires": { "@types/node": "^14.14.20", "conf": "^9.0.0", @@ -1971,9 +1971,9 @@ }, "dependencies": { "@types/node": { - "version": "14.17.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.34.tgz", - "integrity": "sha512-USUftMYpmuMzeWobskoPfzDi+vkpe0dvcOBRNOscFrGxVp4jomnRxWuVohgqBow2xyIPC0S3gjxV/5079jhmDg==" + "version": "14.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.3.tgz", + "integrity": "sha512-GtTH2crF4MtOIrrAa+jgTV9JX/PfoUCYr6MiZw7O/dkZu5b6gm5dc1nAL0jwGo4ortSBBtGyeVaxdC8X6V+pLg==" }, "mime-db": { "version": "1.51.0", @@ -4316,9 +4316,9 @@ "dev": true }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "json-schema-traverse": { "version": "0.4.1", @@ -4394,13 +4394,13 @@ } }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, diff --git a/package.json b/package.json index b0e69e03..b0ec302c 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "bcryptjs": "2.4.3", "body-parser": "1.19.0", "cookie-parser": "1.4.6", - "cos-nodejs-sdk-v5": "2.11.2", + "cos-nodejs-sdk-v5": "2.11.6", "diff-match-patch": "1.0.5", "express": "4.17.1", "extract-zip": "2.0.1", From 686ab08d87267fd48b903682336184a3aa5be64f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 27 Dec 2021 05:09:21 +0000 Subject: [PATCH 128/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.7.5 --- package-lock.json | 174 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 88 insertions(+), 88 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4dc29d62..aa8bcfdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -257,9 +257,9 @@ } }, "@babel/parser": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.5.tgz", - "integrity": "sha512-+Ce7T5iPNWzfu9C1aB5tN3Lyafs5xb3Ic7vBWyZL2KXT3QSdD1dD3CvgOzPmQKoNNRt6uauc0XwNJTQtXC2/Mw==", + "version": "7.16.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.6.tgz", + "integrity": "sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==", "dev": true }, "@babel/types": { @@ -319,9 +319,9 @@ } }, "@babel/parser": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.5.tgz", - "integrity": "sha512-+Ce7T5iPNWzfu9C1aB5tN3Lyafs5xb3Ic7vBWyZL2KXT3QSdD1dD3CvgOzPmQKoNNRt6uauc0XwNJTQtXC2/Mw==", + "version": "7.16.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.6.tgz", + "integrity": "sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==", "dev": true }, "@babel/types": { @@ -547,26 +547,26 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.4.tgz", - "integrity": "sha512-mK9kAPkqfvfGGIHWwfExBTrXvuZneL//QPbXPxK+A0ib25AHkSmqqmudoFa+iOwOVvoM9ROp+1aY10pB7vvHrg==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.5.tgz", + "integrity": "sha512-ZRWCacF3iUVclLxgnyhnb75SgyfBoPyn7sukzAtatum/BxGTcxTfh1tNBQMsz3iHolRlh6E+xbguG2E5h4Jf9g==", "dev": true, "requires": { "@delagen/eslint-plugin-deprecation": "1.3.2", - "@typescript-eslint/eslint-plugin": "5.7.0", - "@typescript-eslint/parser": "5.7.0", + "@typescript-eslint/eslint-plugin": "5.8.0", + "@typescript-eslint/parser": "5.8.0", "babel-eslint": "10.1.0", - "eslint": "8.4.1", + "eslint": "8.5.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", "eslint-plugin-import": "2.25.3", "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-react": "7.27.1", + "eslint-plugin-react": "7.28.0", "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.16", + "eslint-plugin-taro": "3.3.18", "prettier": "2.5.1" } }, @@ -619,13 +619,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.7.0.tgz", - "integrity": "sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.8.0.tgz", + "integrity": "sha512-spu1UW7QuBn0nJ6+psnfCc3iVoQAifjKORgBngKOmC8U/1tbe2YJMzYQqDGYB4JCss7L8+RM2kKLb1B1Aw9BNA==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "5.7.0", - "@typescript-eslint/scope-manager": "5.7.0", + "@typescript-eslint/experimental-utils": "5.8.0", + "@typescript-eslint/scope-manager": "5.8.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -635,43 +635,43 @@ }, "dependencies": { "@typescript-eslint/experimental-utils": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.7.0.tgz", - "integrity": "sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.0.tgz", + "integrity": "sha512-KN5FvNH71bhZ8fKtL+lhW7bjm7cxs1nt+hrDZWIqb6ViCffQcWyLunGrgvISgkRojIDcXIsH+xlFfI4RCDA0xA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.7.0", - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/typescript-estree": "5.7.0", + "@typescript-eslint/scope-manager": "5.8.0", + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/typescript-estree": "5.8.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/scope-manager": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.7.0.tgz", - "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.8.0.tgz", + "integrity": "sha512-x82CYJsLOjPCDuFFEbS6e7K1QEWj7u5Wk1alw8A+gnJiYwNnDJk0ib6PCegbaPMjrfBvFKa7SxE3EOnnIQz2Gg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/visitor-keys": "5.7.0" + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/visitor-keys": "5.8.0" } }, "@typescript-eslint/types": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.7.0.tgz", - "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.8.0.tgz", + "integrity": "sha512-LdCYOqeqZWqCMOmwFnum6YfW9F3nKuxJiR84CdIRN5nfHJ7gyvGpXWqL/AaW0k3Po0+wm93ARAsOdzlZDPCcXg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.7.0.tgz", - "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.0.tgz", + "integrity": "sha512-srfeZ3URdEcUsSLbkOFqS7WoxOqn8JNil2NSLO9O+I2/Uyc85+UlfpEvQHIpj5dVts7KKOZnftoJD/Fdv0L7nQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/visitor-keys": "5.7.0", + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/visitor-keys": "5.8.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -680,12 +680,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.7.0.tgz", - "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.0.tgz", + "integrity": "sha512-+HDIGOEMnqbxdAHegxvnOqESUH6RWFRR2b8qxP1W9CZnnYh4Usz6MBL+2KMAgPk/P0o9c1HqnYtwzVH6GTIqug==", "dev": true, "requires": { - "@typescript-eslint/types": "5.7.0", + "@typescript-eslint/types": "5.8.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -739,41 +739,41 @@ } }, "@typescript-eslint/parser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.7.0.tgz", - "integrity": "sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.8.0.tgz", + "integrity": "sha512-Gleacp/ZhRtJRYs5/T8KQR3pAQjQI89Dn/k+OzyCKOsLiZH2/Vh60cFBTnFsHNI6WAD+lNUo/xGZ4NeA5u0Ipw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.7.0", - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/typescript-estree": "5.7.0", + "@typescript-eslint/scope-manager": "5.8.0", + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/typescript-estree": "5.8.0", "debug": "^4.3.2" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.7.0.tgz", - "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.8.0.tgz", + "integrity": "sha512-x82CYJsLOjPCDuFFEbS6e7K1QEWj7u5Wk1alw8A+gnJiYwNnDJk0ib6PCegbaPMjrfBvFKa7SxE3EOnnIQz2Gg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/visitor-keys": "5.7.0" + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/visitor-keys": "5.8.0" } }, "@typescript-eslint/types": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.7.0.tgz", - "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.8.0.tgz", + "integrity": "sha512-LdCYOqeqZWqCMOmwFnum6YfW9F3nKuxJiR84CdIRN5nfHJ7gyvGpXWqL/AaW0k3Po0+wm93ARAsOdzlZDPCcXg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.7.0.tgz", - "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.0.tgz", + "integrity": "sha512-srfeZ3URdEcUsSLbkOFqS7WoxOqn8JNil2NSLO9O+I2/Uyc85+UlfpEvQHIpj5dVts7KKOZnftoJD/Fdv0L7nQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/visitor-keys": "5.7.0", + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/visitor-keys": "5.8.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -782,12 +782,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.7.0.tgz", - "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.0.tgz", + "integrity": "sha512-+HDIGOEMnqbxdAHegxvnOqESUH6RWFRR2b8qxP1W9CZnnYh4Usz6MBL+2KMAgPk/P0o9c1HqnYtwzVH6GTIqug==", "dev": true, "requires": { - "@typescript-eslint/types": "5.7.0", + "@typescript-eslint/types": "5.8.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -1669,9 +1669,9 @@ } }, "confusing-browser-globals": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", - "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, "constantinople": { @@ -1948,9 +1948,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.3.tgz", - "integrity": "sha512-N3JruInmCyt7EJj5mAq3csCgGYgiSqu7p7TQp2KOztr180/OAIxyIvL1FCjzgmQk/t3Yniua50Fsak7FShI9lA==", + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.1.tgz", + "integrity": "sha512-yeNNr3L9cEBwNy6vhhIJ0nko7fE7uFO6PgawcacGt2VWep4WqQx0RiqlkgSP7kqUMC1IKdfO9qPeWXcUheHLVQ==", "dev": true }, "core-util-is": { @@ -2406,9 +2406,9 @@ } }, "eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.5.0.tgz", + "integrity": "sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==", "dev": true, "requires": { "@eslint/eslintrc": "^1.0.5", @@ -2894,9 +2894,9 @@ } }, "eslint-plugin-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.1.tgz", - "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -2971,9 +2971,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.16", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.16.tgz", - "integrity": "sha512-wAA1Kddvinq4dmapuFQ+bPKk7yS3g7XmBaQylBd0IFvwCCg3Y/hH3zVOZF3FSuHfQVQzZIXASXuNxgSC9n5l+A==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.18.tgz", + "integrity": "sha512-LYsd4AmcWyF0Tb3l9tRAdNpsSRk5vmYThOysb0KaXr1Qkg1F7lXb3zzdbXnExiXdOTFfoprSspCvFUZ+R+ihfw==", "dev": true, "requires": { "has": "^1.0.1" @@ -3972,9 +3972,9 @@ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "import-fresh": { @@ -5674,14 +5674,14 @@ } }, "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.0.tgz", + "integrity": "sha512-fDGekdaHh65eI3lMi5OnErU6a8Ighg2KjcjQxO7m8VHyWjcPyj5kiOgV1LQDOOOgVy3+5FgjXvdSSX7B8/5/4g==", "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "react-is": "^16.13.1" } }, "protobufjs": { diff --git a/package.json b/package.json index b0e69e03..4e49797d 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.7.4", + "@shm-open/eslint-config-bundle": "1.7.5", "mocha": "9.1.3", "should": "13.2.3", "standard-version": "9.3.2", From 5ec26aed33f2eac595ee9e4de26f0eb5dfc28440 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 28 Dec 2021 21:32:46 +0000 Subject: [PATCH 129/347] fix(deps): update dependency sequelize to v6.12.4 --- package-lock.json | 63 ++++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa8bcfdf..e92759ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -575,6 +575,14 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "requires": { + "@types/ms": "*" + } + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -598,6 +606,11 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, "@types/node": { "version": "9.4.7", "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-9.4.7.tgz", @@ -6244,12 +6257,9 @@ "dev": true }, "retry-as-promised": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz", - "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==", - "requires": { - "any-promise": "^1.3.0" - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-5.0.0.tgz", + "integrity": "sha512-6S+5LvtTl2ggBumk04hBo/4Uf6fRJUwIgunGZ7CYEBCeufGFW1Pu6ucUf/UskHeWOIsUcLOGLFXPig5tR5V1nA==" }, "reusify": { "version": "1.0.4", @@ -6352,30 +6362,31 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.11.0.tgz", - "integrity": "sha512-+j3N5lr+FR1eicMRGR3bRsGOl9HMY0UGb2PyB2i1yZ64XBgsz3xejMH0UD45LcUitj40soDGIa9CyvZG0dfzKg==", - "requires": { - "debug": "^4.1.1", - "dottie": "^2.0.0", - "inflection": "1.13.1", - "lodash": "^4.17.20", - "moment": "^2.26.0", - "moment-timezone": "^0.5.31", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.12.4.tgz", + "integrity": "sha512-P2E8TzlV3VwdvPqTS58ctIpcAOytXdaylUUfxxnALjtMmF6I+kfNtrqTP7WQFaenOboAtXPCJReZ9MPy+Zy/Ig==", + "requires": { + "@types/debug": "^4.1.7", + "debug": "^4.3.3", + "dottie": "^2.0.2", + "inflection": "^1.13.1", + "lodash": "^4.17.21", + "moment": "^2.29.1", + "moment-timezone": "^0.5.34", "pg-connection-string": "^2.5.0", - "retry-as-promised": "^3.2.0", - "semver": "^7.3.2", - "sequelize-pool": "^6.0.0", + "retry-as-promised": "^5.0.0", + "semver": "^7.3.5", + "sequelize-pool": "^7.1.0", "toposort-class": "^1.0.1", - "uuid": "^8.1.0", + "uuid": "^8.3.2", "validator": "^13.7.0", "wkx": "^0.5.0" }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -6401,9 +6412,9 @@ } }, "sequelize-pool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-6.1.0.tgz", - "integrity": "sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg==" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==" }, "serialize-javascript": { "version": "6.0.0", diff --git a/package.json b/package.json index 4e49797d..e73eed3d 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "3.1.2", - "sequelize": "6.11.0", + "sequelize": "6.12.4", "slash": "3.0.0", "upyun": "3.4.4", "validator": "13.7.0", From ffff5dab25bb001e5772bfe7c189e337fe108aaa Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 3 Jan 2022 16:45:49 +0000 Subject: [PATCH 130/347] fix(deps): update dependency helmet to v5 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa8bcfdf..0807a221 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3856,9 +3856,9 @@ "dev": true }, "helmet": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz", - "integrity": "sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.0.1.tgz", + "integrity": "sha512-iyYpGYH2nbQVaQtauYDnemWg45S2RyGvJ+iKj+V9jp7Dc1NTtAJHmD+hFOSYS7Xdwe1GeyVEYSydggXLOg6TKQ==" }, "hexoid": { "version": "1.0.0", diff --git a/package.json b/package.json index 4e49797d..7865e53f 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "extract-zip": "2.0.1", "formidable": "2.0.1", "fs-extra": "10.0.0", - "helmet": "4.6.0", + "helmet": "5.0.1", "jschardet": "3.0.0", "jsonwebtoken": "8.5.1", "lodash": "4.17.21", From e653f76a2fc134ca300cb1617eac2ff3eb55b45e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 4 Jan 2022 02:29:22 +0000 Subject: [PATCH 131/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.7.6 --- package-lock.json | 585 +++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 317 insertions(+), 270 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa8bcfdf..30be98e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,166 +14,166 @@ } }, "@babel/generator": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.5.tgz", - "integrity": "sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", + "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", "dev": true, "requires": { - "@babel/types": "^7.16.0", + "@babel/types": "^7.16.7", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-environment-visitor": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz", - "integrity": "sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } } @@ -201,18 +201,18 @@ "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" }, "@babel/runtime": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.5.tgz", - "integrity": "sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.5.tgz", - "integrity": "sha512-F1pMwvTiUNSAM8mc45kccMQxj31x3y3P+tA/X8hKNWp3/hUsxdGxZ3D3H8JIkxtfA8qGkaBTKvcmvStaYseAFw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.7.tgz", + "integrity": "sha512-MiYR1yk8+TW/CpOD0CyX7ve9ffWTKqLk/L6pk8TPl0R8pNi+1pFY8fH9yET55KlvukQ4PAWfXsGr2YHVjcI4Pw==", "dev": true, "requires": { "core-js-pure": "^3.19.0", @@ -220,117 +220,117 @@ } }, "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" }, "dependencies": { "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.16.0" + "@babel/highlight": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.16.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.6.tgz", - "integrity": "sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", + "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", "dev": true }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } } } }, "@babel/traverse": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.5.tgz", - "integrity": "sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.5", - "@babel/helper-environment-visitor": "^7.16.5", - "@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.5", - "@babel/types": "^7.16.0", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", + "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.16.0" + "@babel/highlight": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.16.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.6.tgz", - "integrity": "sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", + "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", "dev": true }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, @@ -547,26 +547,26 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.5.tgz", - "integrity": "sha512-ZRWCacF3iUVclLxgnyhnb75SgyfBoPyn7sukzAtatum/BxGTcxTfh1tNBQMsz3iHolRlh6E+xbguG2E5h4Jf9g==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.6.tgz", + "integrity": "sha512-I9XkyfYYOXWIL6TvLsRpCVhAqbuJXlsCQDUPF6l/MH7FZqP9FIKpTBn1U6YHoChAFKJwMx0Y1/JVJtAhQre0LA==", "dev": true, "requires": { "@delagen/eslint-plugin-deprecation": "1.3.2", - "@typescript-eslint/eslint-plugin": "5.8.0", - "@typescript-eslint/parser": "5.8.0", + "@typescript-eslint/eslint-plugin": "5.9.0", + "@typescript-eslint/parser": "5.9.0", "babel-eslint": "10.1.0", - "eslint": "8.5.0", + "eslint": "8.6.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", - "eslint-plugin-import": "2.25.3", + "eslint-plugin-import": "2.25.4", "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-prettier": "4.0.0", "eslint-plugin-react": "7.28.0", "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.18", + "eslint-plugin-taro": "3.3.19", "prettier": "2.5.1" } }, @@ -619,13 +619,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.8.0.tgz", - "integrity": "sha512-spu1UW7QuBn0nJ6+psnfCc3iVoQAifjKORgBngKOmC8U/1tbe2YJMzYQqDGYB4JCss7L8+RM2kKLb1B1Aw9BNA==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", + "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "5.8.0", - "@typescript-eslint/scope-manager": "5.8.0", + "@typescript-eslint/experimental-utils": "5.9.0", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/type-utils": "5.9.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -635,43 +636,43 @@ }, "dependencies": { "@typescript-eslint/experimental-utils": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.0.tgz", - "integrity": "sha512-KN5FvNH71bhZ8fKtL+lhW7bjm7cxs1nt+hrDZWIqb6ViCffQcWyLunGrgvISgkRojIDcXIsH+xlFfI4RCDA0xA==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", + "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.8.0", - "@typescript-eslint/types": "5.8.0", - "@typescript-eslint/typescript-estree": "5.8.0", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/scope-manager": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.8.0.tgz", - "integrity": "sha512-x82CYJsLOjPCDuFFEbS6e7K1QEWj7u5Wk1alw8A+gnJiYwNnDJk0ib6PCegbaPMjrfBvFKa7SxE3EOnnIQz2Gg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", + "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.8.0", - "@typescript-eslint/visitor-keys": "5.8.0" + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0" } }, "@typescript-eslint/types": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.8.0.tgz", - "integrity": "sha512-LdCYOqeqZWqCMOmwFnum6YfW9F3nKuxJiR84CdIRN5nfHJ7gyvGpXWqL/AaW0k3Po0+wm93ARAsOdzlZDPCcXg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", + "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.0.tgz", - "integrity": "sha512-srfeZ3URdEcUsSLbkOFqS7WoxOqn8JNil2NSLO9O+I2/Uyc85+UlfpEvQHIpj5dVts7KKOZnftoJD/Fdv0L7nQ==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", + "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.8.0", - "@typescript-eslint/visitor-keys": "5.8.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -680,12 +681,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.0.tgz", - "integrity": "sha512-+HDIGOEMnqbxdAHegxvnOqESUH6RWFRR2b8qxP1W9CZnnYh4Usz6MBL+2KMAgPk/P0o9c1HqnYtwzVH6GTIqug==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", + "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/types": "5.9.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -739,41 +740,41 @@ } }, "@typescript-eslint/parser": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.8.0.tgz", - "integrity": "sha512-Gleacp/ZhRtJRYs5/T8KQR3pAQjQI89Dn/k+OzyCKOsLiZH2/Vh60cFBTnFsHNI6WAD+lNUo/xGZ4NeA5u0Ipw==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", + "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.8.0", - "@typescript-eslint/types": "5.8.0", - "@typescript-eslint/typescript-estree": "5.8.0", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", "debug": "^4.3.2" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.8.0.tgz", - "integrity": "sha512-x82CYJsLOjPCDuFFEbS6e7K1QEWj7u5Wk1alw8A+gnJiYwNnDJk0ib6PCegbaPMjrfBvFKa7SxE3EOnnIQz2Gg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", + "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.8.0", - "@typescript-eslint/visitor-keys": "5.8.0" + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0" } }, "@typescript-eslint/types": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.8.0.tgz", - "integrity": "sha512-LdCYOqeqZWqCMOmwFnum6YfW9F3nKuxJiR84CdIRN5nfHJ7gyvGpXWqL/AaW0k3Po0+wm93ARAsOdzlZDPCcXg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", + "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.0.tgz", - "integrity": "sha512-srfeZ3URdEcUsSLbkOFqS7WoxOqn8JNil2NSLO9O+I2/Uyc85+UlfpEvQHIpj5dVts7KKOZnftoJD/Fdv0L7nQ==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", + "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.8.0", - "@typescript-eslint/visitor-keys": "5.8.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -782,12 +783,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.0.tgz", - "integrity": "sha512-+HDIGOEMnqbxdAHegxvnOqESUH6RWFRR2b8qxP1W9CZnnYh4Usz6MBL+2KMAgPk/P0o9c1HqnYtwzVH6GTIqug==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", + "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/types": "5.9.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -836,6 +837,107 @@ "@typescript-eslint/visitor-keys": "5.3.1" } }, + "@typescript-eslint/type-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", + "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "5.9.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", + "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", + "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0" + } + }, + "@typescript-eslint/types": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", + "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", + "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", + "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "@typescript-eslint/types": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", @@ -1948,9 +2050,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.1.tgz", - "integrity": "sha512-yeNNr3L9cEBwNy6vhhIJ0nko7fE7uFO6PgawcacGt2VWep4WqQx0RiqlkgSP7kqUMC1IKdfO9qPeWXcUheHLVQ==", + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.2.tgz", + "integrity": "sha512-CmWHvSKn2vNL6p6StNp1EmMIfVY/pqn3JLAjfZQ8WZGPOlGoO92EkX9/Mk81i6GxvoPXjUqEQnpM3rJ5QxxIOg==", "dev": true }, "core-util-is": { @@ -2406,9 +2508,9 @@ } }, "eslint": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.5.0.tgz", - "integrity": "sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", "dev": true, "requires": { "@eslint/eslintrc": "^1.0.5", @@ -2423,7 +2525,7 @@ "eslint-scope": "^7.1.0", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.1.0", - "espree": "^9.2.0", + "espree": "^9.3.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2727,14 +2829,13 @@ } }, "eslint-module-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", - "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", + "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", "dev": true, "requires": { "debug": "^3.2.7", - "find-up": "^2.1.0", - "pkg-dir": "^2.0.0" + "find-up": "^2.1.0" }, "dependencies": { "debug": { @@ -2798,9 +2899,9 @@ } }, "eslint-plugin-import": { - "version": "2.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -2808,14 +2909,14 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.1", + "eslint-module-utils": "^2.7.2", "has": "^1.0.3", "is-core-module": "^2.8.0", "is-glob": "^4.0.3", "minimatch": "^3.0.4", "object.values": "^1.1.5", "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" + "tsconfig-paths": "^3.12.0" }, "dependencies": { "debug": { @@ -2971,9 +3072,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.18.tgz", - "integrity": "sha512-LYsd4AmcWyF0Tb3l9tRAdNpsSRk5vmYThOysb0KaXr1Qkg1F7lXb3zzdbXnExiXdOTFfoprSspCvFUZ+R+ihfw==", + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.19.tgz", + "integrity": "sha512-S116amhBUO8/rYJGIAcktOu2n/le9D1Ow3LhbQXBlAVtslPipEStN+14AUSllIIZevtDMDCoGMwFJHj8h6zdbQ==", "dev": true, "requires": { "has": "^1.0.1" @@ -3021,20 +3122,20 @@ "dev": true }, "espree": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", - "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", "dev": true, "requires": { - "acorn": "^8.6.0", + "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^3.1.0" }, "dependencies": { "acorn": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true } } @@ -5566,60 +5667,6 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } - } - }, "pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", diff --git a/package.json b/package.json index 4e49797d..c5643d1f 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.7.5", + "@shm-open/eslint-config-bundle": "1.7.6", "mocha": "9.1.3", "should": "13.2.3", "standard-version": "9.3.2", From 117367240a63028eebd992161a354d1404827fd6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 4 Jan 2022 03:05:02 +0000 Subject: [PATCH 132/347] fix(deps): update dependency body-parser to v1.19.1 --- package-lock.json | 65 +++++++++++++++++++++++++++++++++++++++-------- package.json | 2 +- 2 files changed, 55 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 216a7161..685cd9f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1499,22 +1499,27 @@ } }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "requires": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" }, "dependencies": { + "bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1523,10 +1528,48 @@ "ms": "2.0.0" } }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + }, + "raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "requires": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" } } }, diff --git a/package.json b/package.json index 9dd613b0..6bf5aa22 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "aliyun-sdk": "1.12.4", "aws-sdk": "2.1034.0", "bcryptjs": "2.4.3", - "body-parser": "1.19.0", + "body-parser": "1.19.1", "cookie-parser": "1.4.6", "cos-nodejs-sdk-v5": "2.11.6", "diff-match-patch": "1.0.5", From e19b1737de45e6046b0bbb21a391161ed8470ed8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 10 Jan 2022 02:40:31 +0000 Subject: [PATCH 133/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.7.7 --- package-lock.json | 42 +++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c6bc242..de229ad6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -547,9 +547,9 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.6.tgz", - "integrity": "sha512-I9XkyfYYOXWIL6TvLsRpCVhAqbuJXlsCQDUPF6l/MH7FZqP9FIKpTBn1U6YHoChAFKJwMx0Y1/JVJtAhQre0LA==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.7.tgz", + "integrity": "sha512-+SFQSxy8j3QMzE7sYHGQesCgksgoN7wBVNYpVxbeuA6Oa9EADB2ftiu5Erd0JIrn86aJ560Bmz2LIc9qQqJJxw==", "dev": true, "requires": { "@delagen/eslint-plugin-deprecation": "1.3.2", @@ -2184,9 +2184,9 @@ "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" }, "damerau-levenshtein": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", - "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, "dargs": { @@ -2994,9 +2994,9 @@ } }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" @@ -3428,9 +3428,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz", + "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -3965,16 +3965,16 @@ "dev": true }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, @@ -5825,9 +5825,9 @@ } }, "prop-types": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.0.tgz", - "integrity": "sha512-fDGekdaHh65eI3lMi5OnErU6a8Ighg2KjcjQxO7m8VHyWjcPyj5kiOgV1LQDOOOgVy3+5FgjXvdSSX7B8/5/4g==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "requires": { "loose-envify": "^1.4.0", diff --git a/package.json b/package.json index 05c3380e..fe71b643 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.7.6", + "@shm-open/eslint-config-bundle": "1.7.7", "mocha": "9.1.3", "should": "13.2.3", "standard-version": "9.3.2", From 4fcdf56f99890787f94ea5f879616d37a3b774a2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 11 Jan 2022 00:23:17 +0000 Subject: [PATCH 134/347] chore(deps): update dependency supertest to v6.2.0 --- package-lock.json | 76 ++++++++++++++++++++--------------------------- package.json | 2 +- 2 files changed, 34 insertions(+), 44 deletions(-) diff --git a/package-lock.json b/package-lock.json index de229ad6..93b1f362 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2095,9 +2095,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", "dev": true }, "copy-to": { @@ -3451,9 +3451,9 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fast-safe-stringify": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", - "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, "fastq": { @@ -7042,37 +7042,37 @@ "dev": true }, "superagent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", - "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.0.1.tgz", + "integrity": "sha512-2nFiZ2ds29iRFSjZ291vq+AxqUDg8BdFeg/AObJkDpCVJX6IJT8fU7egBOkYwmxPwaDoNrNu8qRDvtAV/7ZTPw==", "dev": true, "requires": { "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", + "cookiejar": "^2.1.3", + "debug": "^4.3.3", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", + "mime": "^2.5.0", + "qs": "^6.10.1", "readable-stream": "^3.6.0", - "semver": "^7.3.2" + "semver": "^7.3.5" }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" } }, "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -7080,16 +7080,10 @@ "mime-types": "^2.1.12" } }, - "formidable": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "dev": true - }, "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "ms": { @@ -7099,18 +7093,14 @@ "dev": true }, "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", + "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", "dev": true, "requires": { "side-channel": "^1.0.4" } }, - "safe-buffer": { - "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -7123,13 +7113,13 @@ } }, "supertest": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.1.6.tgz", - "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.0.tgz", + "integrity": "sha512-JU30iTy0Utm5GbVJvrtt6RHNQECiqVl6KckEVhnR0AoGzFGq0IFMmBXnoTxYy9pM/vgufiPevjxlF39XaKn77Q==", "dev": true, "requires": { "methods": "^1.1.2", - "superagent": "^6.1.0" + "superagent": "^7.0.1" } }, "supervisor": { diff --git a/package.json b/package.json index fe71b643..e8a5a351 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "mocha": "9.1.3", "should": "13.2.3", "standard-version": "9.3.2", - "supertest": "6.1.6", + "supertest": "6.2.0", "supervisor": "0.12.0" }, "files": [ From be54cc53d8c0d9a4a6fb7a4e2f5c51197d008af5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 11 Jan 2022 23:14:57 +0000 Subject: [PATCH 135/347] chore(deps): update dependency supertest to v6.2.1 --- package-lock.json | 20 ++++++++++---------- package.json | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 93b1f362..5662951c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7042,9 +7042,9 @@ "dev": true }, "superagent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.0.1.tgz", - "integrity": "sha512-2nFiZ2ds29iRFSjZ291vq+AxqUDg8BdFeg/AObJkDpCVJX6IJT8fU7egBOkYwmxPwaDoNrNu8qRDvtAV/7ZTPw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.0.2.tgz", + "integrity": "sha512-2Kx35bZxLLJMBKtuXezxvD0aZQ7l923VwoCn7EtUx+aFxdG7co7PeRIddfrNtvvMuGaLZXA0mKzX+yWRhjrJ7A==", "dev": true, "requires": { "component-emitter": "^1.3.0", @@ -7093,9 +7093,9 @@ "dev": true }, "qs": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", - "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -7113,13 +7113,13 @@ } }, "supertest": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.0.tgz", - "integrity": "sha512-JU30iTy0Utm5GbVJvrtt6RHNQECiqVl6KckEVhnR0AoGzFGq0IFMmBXnoTxYy9pM/vgufiPevjxlF39XaKn77Q==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.1.tgz", + "integrity": "sha512-2kBKhfZgnPLmjpzB0n7A2ZnEAWTaLXq4bn3EEVY9w8rUpLyIlSusqKKvWA1Cav7hxXBnXGpxBsSeOHj5wQGe1Q==", "dev": true, "requires": { "methods": "^1.1.2", - "superagent": "^7.0.1" + "superagent": "^7.0.2" } }, "supervisor": { diff --git a/package.json b/package.json index e8a5a351..05a431ba 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "mocha": "9.1.3", "should": "13.2.3", "standard-version": "9.3.2", - "supertest": "6.2.0", + "supertest": "6.2.1", "supervisor": "0.12.0" }, "files": [ From a13a8831b1419d249fb72cc40737c5186ecd1514 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 14 Jan 2022 19:22:28 +0000 Subject: [PATCH 136/347] chore(deps): update dependency mocha to v9.1.4 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5662951c..3a2c6814 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5129,9 +5129,9 @@ } }, "mocha": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", - "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.4.tgz", + "integrity": "sha512-+q2aV5VlJZuLgCWoBvGI5zEwPF9eEI0kr/sAA9Jm4xMND7RfIEyF8JE7C0JIg8WXRG+P1sdIAb5ccoHPlXLzcw==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -7729,9 +7729,9 @@ }, "dependencies": { "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "decamelize": { diff --git a/package.json b/package.json index 05a431ba..608adbc2 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ }, "devDependencies": { "@shm-open/eslint-config-bundle": "1.7.7", - "mocha": "9.1.3", + "mocha": "9.1.4", "should": "13.2.3", "standard-version": "9.3.2", "supertest": "6.2.1", From 2bcaa1992f2a2d6e00595728ee4b07edbfb1b727 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 16 Jan 2022 12:49:59 +0000 Subject: [PATCH 137/347] fix(deps): update dependency node-fetch to v2.6.7 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a2c6814..add93bc8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5401,9 +5401,9 @@ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, "node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "requires": { "whatwg-url": "^5.0.0" } diff --git a/package.json b/package.json index 608adbc2..07efb64e 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "log4js": "6.3.0", "moment": "2.29.1", "mysql2": "2.3.3", - "node-fetch": "2.6.6", + "node-fetch": "2.6.7", "nodemailer": "6.7.2", "pug": "3.0.2", "qiniu": "7.4.0", From 372ab2f276a97512310c7dec1373b13931b3e786 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 17 Jan 2022 03:58:35 +0000 Subject: [PATCH 138/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.7.8 --- package-lock.json | 333 +++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 151 insertions(+), 184 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a2c6814..023272fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,12 +14,12 @@ } }, "@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "requires": { - "@babel/types": "^7.16.7", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -31,9 +31,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -58,9 +58,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -87,9 +87,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -114,9 +114,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -141,9 +141,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -168,9 +168,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -210,12 +210,12 @@ } }, "@babel/runtime-corejs3": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.7.tgz", - "integrity": "sha512-MiYR1yk8+TW/CpOD0CyX7ve9ffWTKqLk/L6pk8TPl0R8pNi+1pFY8fH9yET55KlvukQ4PAWfXsGr2YHVjcI4Pw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", + "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", "dev": true, "requires": { - "core-js-pure": "^3.19.0", + "core-js-pure": "^3.20.2", "regenerator-runtime": "^0.13.4" } }, @@ -257,15 +257,15 @@ } }, "@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", "dev": true }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -275,19 +275,19 @@ } }, "@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", + "@babel/generator": "^7.16.8", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -319,15 +319,15 @@ } }, "@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", "dev": true }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -547,16 +547,16 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.7.tgz", - "integrity": "sha512-+SFQSxy8j3QMzE7sYHGQesCgksgoN7wBVNYpVxbeuA6Oa9EADB2ftiu5Erd0JIrn86aJ560Bmz2LIc9qQqJJxw==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.8.tgz", + "integrity": "sha512-RUUpOBm6Jj2M6Hri6Yp9X994rSToYd+aNnYz+IDm1vW9YCfD7Lnl5CQdx/qVVZelD9o5PUJiT0kmVK8MlndHng==", "dev": true, "requires": { "@delagen/eslint-plugin-deprecation": "1.3.2", - "@typescript-eslint/eslint-plugin": "5.9.0", - "@typescript-eslint/parser": "5.9.0", + "@typescript-eslint/eslint-plugin": "5.9.1", + "@typescript-eslint/parser": "5.9.1", "babel-eslint": "10.1.0", - "eslint": "8.6.0", + "eslint": "8.7.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", @@ -566,7 +566,7 @@ "eslint-plugin-react": "7.28.0", "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "3.11.0", - "eslint-plugin-taro": "3.3.19", + "eslint-plugin-taro": "3.3.20", "prettier": "2.5.1" } }, @@ -632,14 +632,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", - "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.1.tgz", + "integrity": "sha512-Xv9tkFlyD4MQGpJgTo6wqDqGvHIRmRgah/2Sjz1PUnJTawjHWIwBivUE9x0QtU2WVii9baYgavo/bHjrZJkqTw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "5.9.0", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/type-utils": "5.9.0", + "@typescript-eslint/experimental-utils": "5.9.1", + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/type-utils": "5.9.1", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -649,43 +649,43 @@ }, "dependencies": { "@typescript-eslint/experimental-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", - "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.1.tgz", + "integrity": "sha512-cb1Njyss0mLL9kLXgS/eEY53SZQ9sT519wpX3i+U457l2UXRDuo87hgKfgRazmu9/tQb0x2sr3Y0yrU+Zz0y+w==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/typescript-estree": "5.9.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/scope-manager": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", - "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.1.tgz", + "integrity": "sha512-8BwvWkho3B/UOtzRyW07ffJXPaLSUKFBjpq8aqsRvu6HdEuzCY57+ffT7QoV4QXJXWSU1+7g3wE4AlgImmQ9pQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0" + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/visitor-keys": "5.9.1" } }, "@typescript-eslint/types": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", - "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.1.tgz", + "integrity": "sha512-SsWegWudWpkZCwwYcKoDwuAjoZXnM1y2EbEerTHho19Hmm+bQ56QG4L4jrtCu0bI5STaRTvRTZmjprWlTw/5NQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", - "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.1.tgz", + "integrity": "sha512-gL1sP6A/KG0HwrahVXI9fZyeVTxEYV//6PmcOn1tD0rw8VhUWYeZeuWHwwhnewnvEMcHjhnJLOBhA9rK4vmb8A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/visitor-keys": "5.9.1", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -694,12 +694,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", - "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.1.tgz", + "integrity": "sha512-Xh37pNz9e9ryW4TVdwiFzmr4hloty8cFj8GTWMXh3Z8swGwyQWeCcNgF0hm6t09iZd6eiZmIf4zHedQVP6TVtg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/types": "5.9.1", "eslint-visitor-keys": "^3.0.0" } }, @@ -753,41 +753,41 @@ } }, "@typescript-eslint/parser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", - "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.1.tgz", + "integrity": "sha512-PLYO0AmwD6s6n0ZQB5kqPgfvh73p0+VqopQQLuNfi7Lm0EpfKyDalchpVwkE+81k5HeiRrTV/9w1aNHzjD7C4g==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/typescript-estree": "5.9.1", "debug": "^4.3.2" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", - "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.1.tgz", + "integrity": "sha512-8BwvWkho3B/UOtzRyW07ffJXPaLSUKFBjpq8aqsRvu6HdEuzCY57+ffT7QoV4QXJXWSU1+7g3wE4AlgImmQ9pQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0" + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/visitor-keys": "5.9.1" } }, "@typescript-eslint/types": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", - "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.1.tgz", + "integrity": "sha512-SsWegWudWpkZCwwYcKoDwuAjoZXnM1y2EbEerTHho19Hmm+bQ56QG4L4jrtCu0bI5STaRTvRTZmjprWlTw/5NQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", - "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.1.tgz", + "integrity": "sha512-gL1sP6A/KG0HwrahVXI9fZyeVTxEYV//6PmcOn1tD0rw8VhUWYeZeuWHwwhnewnvEMcHjhnJLOBhA9rK4vmb8A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/visitor-keys": "5.9.1", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -796,12 +796,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", - "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.1.tgz", + "integrity": "sha512-Xh37pNz9e9ryW4TVdwiFzmr4hloty8cFj8GTWMXh3Z8swGwyQWeCcNgF0hm6t09iZd6eiZmIf4zHedQVP6TVtg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/types": "5.9.1", "eslint-visitor-keys": "^3.0.0" } }, @@ -851,54 +851,54 @@ } }, "@typescript-eslint/type-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", - "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.1.tgz", + "integrity": "sha512-tRSpdBnPRssjlUh35rE9ug5HrUvaB9ntREy7gPXXKwmIx61TNN7+l5YKgi1hMKxo5NvqZCfYhA5FvyuJG6X6vg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "5.9.0", + "@typescript-eslint/experimental-utils": "5.9.1", "debug": "^4.3.2", "tsutils": "^3.21.0" }, "dependencies": { "@typescript-eslint/experimental-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", - "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.1.tgz", + "integrity": "sha512-cb1Njyss0mLL9kLXgS/eEY53SZQ9sT519wpX3i+U457l2UXRDuo87hgKfgRazmu9/tQb0x2sr3Y0yrU+Zz0y+w==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/typescript-estree": "5.9.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/scope-manager": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", - "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.1.tgz", + "integrity": "sha512-8BwvWkho3B/UOtzRyW07ffJXPaLSUKFBjpq8aqsRvu6HdEuzCY57+ffT7QoV4QXJXWSU1+7g3wE4AlgImmQ9pQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0" + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/visitor-keys": "5.9.1" } }, "@typescript-eslint/types": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", - "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.1.tgz", + "integrity": "sha512-SsWegWudWpkZCwwYcKoDwuAjoZXnM1y2EbEerTHho19Hmm+bQ56QG4L4jrtCu0bI5STaRTvRTZmjprWlTw/5NQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", - "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.1.tgz", + "integrity": "sha512-gL1sP6A/KG0HwrahVXI9fZyeVTxEYV//6PmcOn1tD0rw8VhUWYeZeuWHwwhnewnvEMcHjhnJLOBhA9rK4vmb8A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/visitor-keys": "5.9.1", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -907,12 +907,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", - "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.1.tgz", + "integrity": "sha512-Xh37pNz9e9ryW4TVdwiFzmr4hloty8cFj8GTWMXh3Z8swGwyQWeCcNgF0hm6t09iZd6eiZmIf4zHedQVP6TVtg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/types": "5.9.1", "eslint-visitor-keys": "^3.0.0" } }, @@ -2106,9 +2106,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.20.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.2.tgz", - "integrity": "sha512-CmWHvSKn2vNL6p6StNp1EmMIfVY/pqn3JLAjfZQ8WZGPOlGoO92EkX9/Mk81i6GxvoPXjUqEQnpM3rJ5QxxIOg==", + "version": "3.20.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.3.tgz", + "integrity": "sha512-Q2H6tQ5MtPtcC7f3HxJ48i4Q7T9ybPKgvWyuH7JXIoNa2pm0KuBnycsET/qw1SLLZYfbsbrZQNMeIOClb+6WIA==", "dev": true }, "core-util-is": { @@ -2462,15 +2462,6 @@ "once": "^1.4.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -2564,9 +2555,9 @@ } }, "eslint": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", - "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", + "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", "dev": true, "requires": { "@eslint/eslintrc": "^1.0.5", @@ -2576,11 +2567,10 @@ "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.0", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", + "eslint-visitor-keys": "^3.2.0", "espree": "^9.3.0", "esquery": "^1.4.0", "esutils": "^2.0.2", @@ -2589,7 +2579,7 @@ "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.6.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", @@ -2600,9 +2590,7 @@ "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", "regexpp": "^3.2.0", - "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0", @@ -2715,12 +2703,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2757,15 +2739,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3128,9 +3101,9 @@ "dev": true }, "eslint-plugin-taro": { - "version": "3.3.19", - "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.19.tgz", - "integrity": "sha512-S116amhBUO8/rYJGIAcktOu2n/le9D1Ow3LhbQXBlAVtslPipEStN+14AUSllIIZevtDMDCoGMwFJHj8h6zdbQ==", + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.20.tgz", + "integrity": "sha512-Pse/peAk2s+6DTrD9VnkE4IcHQZ4JWgIKI3tcYbt7pPbAtNWSQJd0+IKAwqvxmNoGepsr5o5JeYOIXVsdZzMPg==", "dev": true, "requires": { "has": "^1.0.1" @@ -3172,9 +3145,9 @@ } }, "eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true }, "espree": { @@ -3428,9 +3401,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz", - "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -5810,12 +5783,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -6302,9 +6269,9 @@ "dev": true }, "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", "dev": true, "requires": { "call-bind": "^1.0.2", diff --git a/package.json b/package.json index 608adbc2..2f6d952b 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.7.7", + "@shm-open/eslint-config-bundle": "1.7.8", "mocha": "9.1.4", "should": "13.2.3", "standard-version": "9.3.2", From 7c93d80a19b39033128bcdf48c1246b28f65458c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 18 Jan 2022 22:49:36 +0000 Subject: [PATCH 139/347] chore(deps): update dependency supertest to v6.2.2 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 023272fc..8fedef59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7009,9 +7009,9 @@ "dev": true }, "superagent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.0.2.tgz", - "integrity": "sha512-2Kx35bZxLLJMBKtuXezxvD0aZQ7l923VwoCn7EtUx+aFxdG7co7PeRIddfrNtvvMuGaLZXA0mKzX+yWRhjrJ7A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.0.tgz", + "integrity": "sha512-hbogIdmfjWtAkTfLlpoObeWb5phVJ95JFSkILCTCHoCG1U7s4XnY3WQ5j9C82YaxqLnMMliuFfngI+3liQ12ng==", "dev": true, "requires": { "component-emitter": "^1.3.0", @@ -7080,13 +7080,13 @@ } }, "supertest": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.1.tgz", - "integrity": "sha512-2kBKhfZgnPLmjpzB0n7A2ZnEAWTaLXq4bn3EEVY9w8rUpLyIlSusqKKvWA1Cav7hxXBnXGpxBsSeOHj5wQGe1Q==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.2.tgz", + "integrity": "sha512-wCw9WhAtKJsBvh07RaS+/By91NNE0Wh0DN19/hWPlBOU8tAfOtbZoVSV4xXeoKoxgPx0rx2y+y+8660XtE7jzg==", "dev": true, "requires": { "methods": "^1.1.2", - "superagent": "^7.0.2" + "superagent": "^7.1.0" } }, "supervisor": { diff --git a/package.json b/package.json index 2f6d952b..c333739e 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "mocha": "9.1.4", "should": "13.2.3", "standard-version": "9.3.2", - "supertest": "6.2.1", + "supertest": "6.2.2", "supervisor": "0.12.0" }, "files": [ From 9a62e4a93855b233befedd6fbcd8aec47fd9d61d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 21 Jan 2022 20:29:39 +0000 Subject: [PATCH 140/347] fix(deps): update dependency aws-sdk to v2.1062.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8fedef59..22a3ecd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1344,14 +1344,14 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.1034.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1034.0.tgz", - "integrity": "sha512-yo0B9nOZAKgsQqIKXqkeOJ2Wrt8zx4wd1JmCP1XZzdz1O4b1TfZA/mTN5cMiszOaEk8EWqvPESrw8MaIHFS3wA==", + "version": "2.1062.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1062.0.tgz", + "integrity": "sha512-QIU8jwi7Uqyvw2HjsXXXUZv3V/6TinUzLewrdl2EdvonqZCXhwMgnZx2F9I2x62IKH1RqnINwFWdoK+OTgcAjA==", "requires": { "buffer": "4.9.2", "events": "1.1.1", "ieee754": "1.1.13", - "jmespath": "0.15.0", + "jmespath": "0.16.0", "querystring": "0.2.0", "sax": "1.2.1", "url": "0.10.3", @@ -4441,9 +4441,9 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" }, "js-stringify": { "version": "1.0.2", diff --git a/package.json b/package.json index c333739e..e9fbf4f1 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1034.0", + "aws-sdk": "2.1062.0", "bcryptjs": "2.4.3", "body-parser": "1.19.1", "cookie-parser": "1.4.6", From 1786ca20b637bc5562aa99b30b4404bbbb89a651 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 22 Jan 2022 14:28:56 +0000 Subject: [PATCH 141/347] fix(deps): update dependency sequelize to v6.14.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8fedef59..6ab36b0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6490,9 +6490,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.12.4.tgz", - "integrity": "sha512-P2E8TzlV3VwdvPqTS58ctIpcAOytXdaylUUfxxnALjtMmF6I+kfNtrqTP7WQFaenOboAtXPCJReZ9MPy+Zy/Ig==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.14.0.tgz", + "integrity": "sha512-rgfJFixBwnrxdouIlYS1G0nTo2xj+Gyn7EDn/miE6r5xCzN3EdjtbNrDXapLHNZxgKfu7hZHLzZvwl3DbfhM6g==", "requires": { "@types/debug": "^4.1.7", "debug": "^4.3.3", diff --git a/package.json b/package.json index c333739e..2c5f7d69 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "3.1.2", - "sequelize": "6.12.4", + "sequelize": "6.14.0", "slash": "3.0.0", "upyun": "3.4.4", "validator": "13.7.0", From b601ee763f9ed49417ac97f51c50bcded62ce2ca Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 22 Jan 2022 21:50:37 +0000 Subject: [PATCH 142/347] fix(deps): update dependency helmet to v5.0.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8fedef59..04ab17a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4034,9 +4034,9 @@ "dev": true }, "helmet": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.0.1.tgz", - "integrity": "sha512-iyYpGYH2nbQVaQtauYDnemWg45S2RyGvJ+iKj+V9jp7Dc1NTtAJHmD+hFOSYS7Xdwe1GeyVEYSydggXLOg6TKQ==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.0.2.tgz", + "integrity": "sha512-QWlwUZZ8BtlvwYVTSDTBChGf8EOcQ2LkGMnQJxSzD1mUu8CCjXJZq/BXP8eWw4kikRnzlhtYo3lCk0ucmYA3Vg==" }, "hexoid": { "version": "1.0.0", diff --git a/package.json b/package.json index c333739e..ef272405 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "extract-zip": "2.0.1", "formidable": "2.0.1", "fs-extra": "10.0.0", - "helmet": "5.0.1", + "helmet": "5.0.2", "jschardet": "3.0.0", "jsonwebtoken": "8.5.1", "lodash": "4.17.21", From 1ceca3d202321dd3c94a0e02da877d80d5df8294 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 7 Feb 2022 03:17:43 +0000 Subject: [PATCH 143/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.8.0 --- package-lock.json | 495 +++++++++++++++++++--------------------------- package.json | 2 +- 2 files changed, 200 insertions(+), 297 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a0babf1..15d3eaa0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,12 +14,12 @@ } }, "@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", "dev": true, "requires": { - "@babel/types": "^7.16.8", + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -31,9 +31,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -58,9 +58,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -87,9 +87,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -114,9 +114,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -141,9 +141,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -168,9 +168,9 @@ "dev": true }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -201,18 +201,18 @@ "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" }, "@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.0.tgz", + "integrity": "sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", - "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.0.tgz", + "integrity": "sha512-qeydncU80ravKzovVncW3EYaC1ji3GpntdPgNcJy9g7hHSY6KX+ne1cbV3ov7Zzm4F1z0+QreZPCuw1ynkmYNg==", "dev": true, "requires": { "core-js-pure": "^3.20.2", @@ -246,9 +246,9 @@ "dev": true }, "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -257,15 +257,15 @@ } }, "@babel/parser": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", - "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", "dev": true }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -275,19 +275,19 @@ } }, "@babel/traverse": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", - "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.17.0", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.8", - "@babel/types": "^7.16.8", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -308,9 +308,9 @@ "dev": true }, "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -319,15 +319,15 @@ } }, "@babel/parser": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", - "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", "dev": true }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -360,17 +360,6 @@ "to-fast-properties": "^2.0.0" } }, - "@delagen/eslint-plugin-deprecation": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@delagen/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.2.tgz", - "integrity": "sha512-cA6HE0GPeXMVHMXKuLVJadmjdYsdVEIw0MQ3j+YUx+50e/5jddpDrllBn0SeVqHbPQQqd52eRGctFaDw0NYRJg==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "~5.3.1", - "tslib": "^2.3.1", - "tsutils": "^3.21.0" - } - }, "@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -398,9 +387,9 @@ } }, "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -427,9 +416,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", + "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -547,25 +536,25 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.7.8.tgz", - "integrity": "sha512-RUUpOBm6Jj2M6Hri6Yp9X994rSToYd+aNnYz+IDm1vW9YCfD7Lnl5CQdx/qVVZelD9o5PUJiT0kmVK8MlndHng==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.8.0.tgz", + "integrity": "sha512-Pa06kcnnep6s590bd/VB9sMuJYbPOJGLULWcO0yasD4K+v8EXNfEE2W1jksjT532JjhFDP8mcUksom8cyn5Fcw==", "dev": true, "requires": { - "@delagen/eslint-plugin-deprecation": "1.3.2", - "@typescript-eslint/eslint-plugin": "5.9.1", - "@typescript-eslint/parser": "5.9.1", + "@typescript-eslint/eslint-plugin": "5.10.1", + "@typescript-eslint/parser": "5.10.1", "babel-eslint": "10.1.0", "eslint": "8.7.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", + "eslint-plugin-deprecation": "1.3.2", "eslint-plugin-import": "2.25.4", "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-prettier": "4.0.0", "eslint-plugin-react": "7.28.0", "eslint-plugin-react-hooks": "4.3.0", - "eslint-plugin-react-native": "3.11.0", + "eslint-plugin-react-native": "4.0.0", "eslint-plugin-taro": "3.3.20", "prettier": "2.5.1" } @@ -632,14 +621,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.1.tgz", - "integrity": "sha512-Xv9tkFlyD4MQGpJgTo6wqDqGvHIRmRgah/2Sjz1PUnJTawjHWIwBivUE9x0QtU2WVii9baYgavo/bHjrZJkqTw==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.1.tgz", + "integrity": "sha512-xN3CYqFlyE/qOcy978/L0xLR2HlcAGIyIK5sMOasxaaAPfQRj/MmMV6OC3I7NZO84oEUdWCOju34Z9W8E0pFDQ==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "5.9.1", - "@typescript-eslint/scope-manager": "5.9.1", - "@typescript-eslint/type-utils": "5.9.1", + "@typescript-eslint/scope-manager": "5.10.1", + "@typescript-eslint/type-utils": "5.10.1", + "@typescript-eslint/utils": "5.10.1", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -648,61 +637,6 @@ "tsutils": "^3.21.0" }, "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.1.tgz", - "integrity": "sha512-cb1Njyss0mLL9kLXgS/eEY53SZQ9sT519wpX3i+U457l2UXRDuo87hgKfgRazmu9/tQb0x2sr3Y0yrU+Zz0y+w==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.9.1", - "@typescript-eslint/types": "5.9.1", - "@typescript-eslint/typescript-estree": "5.9.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.1.tgz", - "integrity": "sha512-8BwvWkho3B/UOtzRyW07ffJXPaLSUKFBjpq8aqsRvu6HdEuzCY57+ffT7QoV4QXJXWSU1+7g3wE4AlgImmQ9pQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.1", - "@typescript-eslint/visitor-keys": "5.9.1" - } - }, - "@typescript-eslint/types": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.1.tgz", - "integrity": "sha512-SsWegWudWpkZCwwYcKoDwuAjoZXnM1y2EbEerTHho19Hmm+bQ56QG4L4jrtCu0bI5STaRTvRTZmjprWlTw/5NQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.1.tgz", - "integrity": "sha512-gL1sP6A/KG0HwrahVXI9fZyeVTxEYV//6PmcOn1tD0rw8VhUWYeZeuWHwwhnewnvEMcHjhnJLOBhA9rK4vmb8A==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.1", - "@typescript-eslint/visitor-keys": "5.9.1", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.1.tgz", - "integrity": "sha512-Xh37pNz9e9ryW4TVdwiFzmr4hloty8cFj8GTWMXh3Z8swGwyQWeCcNgF0hm6t09iZd6eiZmIf4zHedQVP6TVtg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.1", - "eslint-visitor-keys": "^3.0.0" - } - }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -712,15 +646,6 @@ "ms": "2.1.2" } }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -739,55 +664,38 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", - "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.1.tgz", - "integrity": "sha512-PLYO0AmwD6s6n0ZQB5kqPgfvh73p0+VqopQQLuNfi7Lm0EpfKyDalchpVwkE+81k5HeiRrTV/9w1aNHzjD7C4g==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.10.2.tgz", + "integrity": "sha512-stRnIlxDduzxtaVLtEohESoXI1k7J6jvJHGyIkOT2pvXbg5whPM6f9tzJ51bJJxaJTdmvwgVFDNCopFRb2F5Gw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.9.1", - "@typescript-eslint/types": "5.9.1", - "@typescript-eslint/typescript-estree": "5.9.1", - "debug": "^4.3.2" + "@typescript-eslint/utils": "5.10.2" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.1.tgz", - "integrity": "sha512-8BwvWkho3B/UOtzRyW07ffJXPaLSUKFBjpq8aqsRvu6HdEuzCY57+ffT7QoV4QXJXWSU1+7g3wE4AlgImmQ9pQ==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", + "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.1", - "@typescript-eslint/visitor-keys": "5.9.1" + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2" } }, "@typescript-eslint/types": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.1.tgz", - "integrity": "sha512-SsWegWudWpkZCwwYcKoDwuAjoZXnM1y2EbEerTHho19Hmm+bQ56QG4L4jrtCu0bI5STaRTvRTZmjprWlTw/5NQ==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", + "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.1.tgz", - "integrity": "sha512-gL1sP6A/KG0HwrahVXI9fZyeVTxEYV//6PmcOn1tD0rw8VhUWYeZeuWHwwhnewnvEMcHjhnJLOBhA9rK4vmb8A==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", + "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.1", - "@typescript-eslint/visitor-keys": "5.9.1", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -795,13 +703,27 @@ "tsutils": "^3.21.0" } }, + "@typescript-eslint/utils": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", + "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, "@typescript-eslint/visitor-keys": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.1.tgz", - "integrity": "sha512-Xh37pNz9e9ryW4TVdwiFzmr4hloty8cFj8GTWMXh3Z8swGwyQWeCcNgF0hm6t09iZd6eiZmIf4zHedQVP6TVtg==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", + "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/types": "5.10.2", "eslint-visitor-keys": "^3.0.0" } }, @@ -840,82 +762,56 @@ } } }, + "@typescript-eslint/parser": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.1.tgz", + "integrity": "sha512-GReo3tjNBwR5RnRO0K2wDIDN31cM3MmDtgyQ85oAxAmC5K3j/g85IjP+cDfcqDsDDBf1HNKQAD0WqOYL8jXqUA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.10.1", + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/typescript-estree": "5.10.1", + "debug": "^4.3.2" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "@typescript-eslint/scope-manager": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", - "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.1.tgz", + "integrity": "sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1" + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/visitor-keys": "5.10.1" } }, "@typescript-eslint/type-utils": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.1.tgz", - "integrity": "sha512-tRSpdBnPRssjlUh35rE9ug5HrUvaB9ntREy7gPXXKwmIx61TNN7+l5YKgi1hMKxo5NvqZCfYhA5FvyuJG6X6vg==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.1.tgz", + "integrity": "sha512-AfVJkV8uck/UIoDqhu+ptEdBoQATON9GXnhOpPLzkQRJcSChkvD//qsz9JVffl2goxX+ybs5klvacE9vmrQyCw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "5.9.1", + "@typescript-eslint/utils": "5.10.1", "debug": "^4.3.2", "tsutils": "^3.21.0" }, "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.1.tgz", - "integrity": "sha512-cb1Njyss0mLL9kLXgS/eEY53SZQ9sT519wpX3i+U457l2UXRDuo87hgKfgRazmu9/tQb0x2sr3Y0yrU+Zz0y+w==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.9.1", - "@typescript-eslint/types": "5.9.1", - "@typescript-eslint/typescript-estree": "5.9.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.1.tgz", - "integrity": "sha512-8BwvWkho3B/UOtzRyW07ffJXPaLSUKFBjpq8aqsRvu6HdEuzCY57+ffT7QoV4QXJXWSU1+7g3wE4AlgImmQ9pQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.1", - "@typescript-eslint/visitor-keys": "5.9.1" - } - }, - "@typescript-eslint/types": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.1.tgz", - "integrity": "sha512-SsWegWudWpkZCwwYcKoDwuAjoZXnM1y2EbEerTHho19Hmm+bQ56QG4L4jrtCu0bI5STaRTvRTZmjprWlTw/5NQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.1.tgz", - "integrity": "sha512-gL1sP6A/KG0HwrahVXI9fZyeVTxEYV//6PmcOn1tD0rw8VhUWYeZeuWHwwhnewnvEMcHjhnJLOBhA9rK4vmb8A==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.1", - "@typescript-eslint/visitor-keys": "5.9.1", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.1.tgz", - "integrity": "sha512-Xh37pNz9e9ryW4TVdwiFzmr4hloty8cFj8GTWMXh3Z8swGwyQWeCcNgF0hm6t09iZd6eiZmIf4zHedQVP6TVtg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.1", - "eslint-visitor-keys": "^3.0.0" - } - }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -925,46 +821,28 @@ "ms": "2.1.2" } }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, "@typescript-eslint/types": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", - "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.1.tgz", + "integrity": "sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", - "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.1.tgz", + "integrity": "sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1", + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/visitor-keys": "5.10.1", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1007,13 +885,27 @@ } } }, + "@typescript-eslint/utils": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.1.tgz", + "integrity": "sha512-RRmlITiUbLuTRtn/gcPRi4202niF+q7ylFLCKu4c+O/PcpRvZ/nAUwQ2G00bZgpWkhrNLNnvhZLbDn8Ml0qsQw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.10.1", + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/typescript-estree": "5.10.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, "@typescript-eslint/visitor-keys": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", - "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.1.tgz", + "integrity": "sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/types": "5.10.1", "eslint-visitor-keys": "^3.0.0" } }, @@ -1396,9 +1288,9 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axe-core": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", - "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", + "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==", "dev": true }, "axios": { @@ -2106,9 +1998,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.3.tgz", - "integrity": "sha512-Q2H6tQ5MtPtcC7f3HxJ48i4Q7T9ybPKgvWyuH7JXIoNa2pm0KuBnycsET/qw1SLLZYfbsbrZQNMeIOClb+6WIA==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.0.tgz", + "integrity": "sha512-VaJUunCZLnxuDbo1rNOzwbet9E1K9joiXS5+DQMPtgxd24wfsZbJZMMfQLGYMlCUvSxLfsRUUhoOR2x28mFfeg==", "dev": true }, "core-util-is": { @@ -2689,9 +2581,9 @@ } }, "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -2858,9 +2750,9 @@ } }, "eslint-module-utils": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", - "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", "dev": true, "requires": { "debug": "^3.2.7", @@ -2927,6 +2819,17 @@ } } }, + "eslint-plugin-deprecation": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.2.tgz", + "integrity": "sha512-z93wbx9w7H/E3ogPw6AZMkkNJ6m51fTZRNZPNQqxQLmx+KKt7aLkMU9wN67s71i+VVHN4tLOZ3zT3QLbnlC0Mg==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^5.0.0", + "tslib": "^2.3.1", + "tsutils": "^3.21.0" + } + }, "eslint-plugin-import": { "version": "2.25.4", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", @@ -3085,9 +2988,9 @@ "dev": true }, "eslint-plugin-react-native": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.11.0.tgz", - "integrity": "sha512-7F3OTwrtQPfPFd+VygqKA2VZ0f2fz0M4gJmry/TRE18JBb94/OtMxwbL7Oqwu7FGyrdeIOWnXQbBAveMcSTZIA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-4.0.0.tgz", + "integrity": "sha512-kMmdxrSY7A1WgdqaGC+rY/28rh7kBGNBRsk48ovqkQmdg5j4K+DaFmegENDzMrdLkoufKGRNkKX6bgSwQTCAxQ==", "dev": true, "requires": { "@babel/traverse": "^7.7.4", @@ -3527,9 +3430,9 @@ }, "dependencies": { "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true } } diff --git a/package.json b/package.json index fa41e461..e5ed17cc 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.7.8", + "@shm-open/eslint-config-bundle": "1.8.0", "mocha": "9.1.4", "should": "13.2.3", "standard-version": "9.3.2", From c7e6ff1d844faa506eef630874405ecf10eb00f7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 7 Feb 2022 03:24:03 +0000 Subject: [PATCH 144/347] chore(deps): update dependency mocha to v9.2.0 --- package-lock.json | 54 ++++++++++++++++++----------------------------- package.json | 2 +- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15d3eaa0..8001c615 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1582,9 +1582,9 @@ "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -5005,41 +5005,41 @@ } }, "mocha": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.4.tgz", - "integrity": "sha512-+q2aV5VlJZuLgCWoBvGI5zEwPF9eEI0kr/sAA9Jm4xMND7RfIEyF8JE7C0JIg8WXRG+P1sdIAb5ccoHPlXLzcw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", + "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", + "chokidar": "3.5.3", + "debug": "4.3.3", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.1.7", + "glob": "7.2.0", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", - "nanoid": "3.1.25", + "nanoid": "3.2.0", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", - "workerpool": "6.1.5", + "workerpool": "6.2.0", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -5069,20 +5069,6 @@ "path-exists": "^4.0.0" } }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5249,9 +5235,9 @@ } }, "nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true }, "natural-compare": { @@ -7458,9 +7444,9 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true }, "wrap-ansi": { diff --git a/package.json b/package.json index e5ed17cc..9afbb8fd 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ }, "devDependencies": { "@shm-open/eslint-config-bundle": "1.8.0", - "mocha": "9.1.4", + "mocha": "9.2.0", "should": "13.2.3", "standard-version": "9.3.2", "supertest": "6.2.2", From 9967398dbb724abf677838cae65b0241a8ad4be1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 7 Feb 2022 05:26:25 +0000 Subject: [PATCH 145/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.8.1 --- package-lock.json | 186 ++++++++++++---------------------------------- package.json | 2 +- 2 files changed, 49 insertions(+), 139 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8001c615..775a628e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -536,15 +536,15 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.8.0.tgz", - "integrity": "sha512-Pa06kcnnep6s590bd/VB9sMuJYbPOJGLULWcO0yasD4K+v8EXNfEE2W1jksjT532JjhFDP8mcUksom8cyn5Fcw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.8.1.tgz", + "integrity": "sha512-ogDArsmily6IJmVB26z7VfyB/qiwx2AD1BikhnI+i8EHYr6X0k2NShwDLPkILzE5rZgOD10ZjBIs6poiv80goA==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.10.1", - "@typescript-eslint/parser": "5.10.1", + "@typescript-eslint/eslint-plugin": "5.10.2", + "@typescript-eslint/parser": "5.10.2", "babel-eslint": "10.1.0", - "eslint": "8.7.0", + "eslint": "8.8.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", @@ -621,14 +621,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.1.tgz", - "integrity": "sha512-xN3CYqFlyE/qOcy978/L0xLR2HlcAGIyIK5sMOasxaaAPfQRj/MmMV6OC3I7NZO84oEUdWCOju34Z9W8E0pFDQ==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz", + "integrity": "sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.10.1", - "@typescript-eslint/type-utils": "5.10.1", - "@typescript-eslint/utils": "5.10.1", + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/type-utils": "5.10.2", + "@typescript-eslint/utils": "5.10.2", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -670,107 +670,17 @@ "dev": true, "requires": { "@typescript-eslint/utils": "5.10.2" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", - "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2" - } - }, - "@typescript-eslint/types": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", - "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", - "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", - "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", - "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.10.2", - "eslint-visitor-keys": "^3.0.0" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/parser": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.1.tgz", - "integrity": "sha512-GReo3tjNBwR5RnRO0K2wDIDN31cM3MmDtgyQ85oAxAmC5K3j/g85IjP+cDfcqDsDDBf1HNKQAD0WqOYL8jXqUA==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", + "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.10.1", - "@typescript-eslint/types": "5.10.1", - "@typescript-eslint/typescript-estree": "5.10.1", + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", "debug": "^4.3.2" }, "dependencies": { @@ -792,22 +702,22 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.1.tgz", - "integrity": "sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", + "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.10.1", - "@typescript-eslint/visitor-keys": "5.10.1" + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2" } }, "@typescript-eslint/type-utils": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.1.tgz", - "integrity": "sha512-AfVJkV8uck/UIoDqhu+ptEdBoQATON9GXnhOpPLzkQRJcSChkvD//qsz9JVffl2goxX+ybs5klvacE9vmrQyCw==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz", + "integrity": "sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.10.1", + "@typescript-eslint/utils": "5.10.2", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -830,19 +740,19 @@ } }, "@typescript-eslint/types": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.1.tgz", - "integrity": "sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", + "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.1.tgz", - "integrity": "sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", + "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.10.1", - "@typescript-eslint/visitor-keys": "5.10.1", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -886,26 +796,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.1.tgz", - "integrity": "sha512-RRmlITiUbLuTRtn/gcPRi4202niF+q7ylFLCKu4c+O/PcpRvZ/nAUwQ2G00bZgpWkhrNLNnvhZLbDn8Ml0qsQw==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", + "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.10.1", - "@typescript-eslint/types": "5.10.1", - "@typescript-eslint/typescript-estree": "5.10.1", + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.1.tgz", - "integrity": "sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", + "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/types": "5.10.2", "eslint-visitor-keys": "^3.0.0" } }, @@ -2447,9 +2357,9 @@ } }, "eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", + "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", "dev": true, "requires": { "@eslint/eslintrc": "^1.0.5", diff --git a/package.json b/package.json index 9afbb8fd..09308300 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.8.0", + "@shm-open/eslint-config-bundle": "1.8.1", "mocha": "9.2.0", "should": "13.2.3", "standard-version": "9.3.2", From 7e1829edac2886e1370590696b7815fb922b7b47 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 7 Feb 2022 17:13:31 +0800 Subject: [PATCH 146/347] fix: replace log4js with simple kv-logger --- app.js | 41 +++++------ bin/www | 27 +++----- config/config.js | 20 +++--- core/config.js | 35 +++++++--- core/services/account-manager.js | 11 ++- core/services/client-manager.js | 15 +++-- core/services/datacenter-manager.js | 21 +++--- core/services/deployments.js | 8 ++- core/services/package-manager.js | 55 ++++++++------- core/utils/common.js | 88 ++++++++++++------------ core/utils/security.js | 31 ++++----- package-lock.json | 101 ++++------------------------ package.json | 4 +- routes/accessKeys.js | 17 +++-- routes/account.js | 5 +- routes/apps.js | 23 +++---- routes/auth.js | 19 +++--- routes/index.js | 19 ++++-- routes/indexV1.js | 13 ++-- 19 files changed, 239 insertions(+), 314 deletions(-) diff --git a/app.js b/app.js index 14107891..c4a6b36f 100644 --- a/app.js +++ b/app.js @@ -6,6 +6,7 @@ var helmet = require('helmet'); var config = require('./core/config'); var _ = require('lodash'); var fs = require('fs'); +var { logger } = require('kv-logger'); var routes = require('./routes/index'); var indexV1 = require('./routes/indexV1'); @@ -15,8 +16,7 @@ var account = require('./routes/account'); var users = require('./routes/users'); var apps = require('./routes/apps'); var AppError = require('./core/app-error'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:app'); + var app = express(); app.use( @@ -28,13 +28,6 @@ app.use( app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'pug'); -app.use( - log4js.connectLogger(log4js.getLogger('http'), { - level: log4js.levels.INFO, - nolog: '\\.gif|\\.jpg|\\.js|\\.css$', - }), -); - app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); @@ -42,7 +35,7 @@ app.use(express.static(path.join(__dirname, 'public'))); //use nginx in production //if (app.get('env') === 'development') { -log.debug('set Access-Control Header'); +logger.debug('set Access-Control Header'); app.all('*', function (req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header( @@ -50,35 +43,35 @@ app.all('*', function (req, res, next) { 'Origin, X-Requested-With, Content-Type, Accept, Authorization, X-CodePush-Plugin-Version, X-CodePush-Plugin-Name, X-CodePush-SDK-Version', ); res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,PATCH,DELETE,OPTIONS'); - log.debug('use set Access-Control Header'); + logger.debug('use set Access-Control Header'); next(); }); //} -log.debug('config common.storageType value: ' + _.get(config, 'common.storageType')); +logger.debug('config common.storageType value: ' + _.get(config, 'common.storageType')); if (_.get(config, 'common.storageType') === 'local') { var localStorageDir = _.get(config, 'local.storageDir'); if (localStorageDir) { - log.debug('config common.storageDir value: ' + localStorageDir); + logger.debug('config common.storageDir value: ' + localStorageDir); if (!fs.existsSync(localStorageDir)) { var e = new Error(`Please create dir ${localStorageDir}`); - log.error(e); + logger.error(e); throw e; } try { - log.debug('checking storageDir fs.W_OK | fs.R_OK'); + logger.debug('checking storageDir fs.W_OK | fs.R_OK'); fs.accessSync(localStorageDir, fs.W_OK | fs.R_OK); - log.debug('storageDir fs.W_OK | fs.R_OK is ok'); + logger.debug('storageDir fs.W_OK | fs.R_OK is ok'); } catch (e) { - log.error(e); + logger.error(e); throw e; } - log.debug('static download uri value: ' + _.get(config, 'local.public', '/download')); + logger.debug('static download uri value: ' + _.get(config, 'local.public', '/download')); app.use(_.get(config, 'local.public', '/download'), express.static(localStorageDir)); } else { - log.error('please config local storageDir'); + logger.error('please config local storageDir'); } } @@ -100,7 +93,7 @@ if (app.get('env') === 'development') { message: err.message, error: err, }); - log.error(err); + logger.error(err); }); app.use(function (err, req, res, next) { res.status(err.status || 500); @@ -108,23 +101,23 @@ if (app.get('env') === 'development') { message: err.message, error: err, }); - log.error(err); + logger.error(err); }); } else { app.use(function (req, res, next) { var e = new AppError.NotFound(); res.status(404).send(e.message); - log.debug(e); + logger.debug(e); }); // production error handler // no stacktraces leaked to user app.use(function (err, req, res, next) { if (err instanceof AppError.AppError) { res.send(err.message); - log.debug(err); + logger.debug(err); } else { res.status(err.status || 500).send(err.message); - log.error(err); + logger.error(err); } }); } diff --git a/bin/www b/bin/www index e3f3e739..7419fd08 100755 --- a/bin/www +++ b/bin/www @@ -4,19 +4,12 @@ * Module dependencies. */ -var log4js = require('log4js'); +var { logger } = require('kv-logger'); var http = require('http'); var validator = require('validator'); var _ = require('lodash'); var config = require('../core/config'); var constConfig = require('../core/const'); -log4js.configure( - _.get(config, 'log4js', { - appenders: { console: { type: 'console' } }, - categories: { default: { appenders: ['console'], level: 'info' } }, - }), -); -var log = log4js.getLogger('startup'); var app = require('../app'); @@ -25,16 +18,16 @@ var app = require('../app'); */ var port = normalizePort(process.env.PORT || '3000'); -log.debug('port ' + port); +logger.debug('port ' + port); var host = null; if (process.env.HOST) { - log.debug('process.env.HOST ' + process.env.HOST); + logger.debug('process.env.HOST ' + process.env.HOST); if (validator.isIP(process.env.HOST)) { - log.trace(process.env.HOST + ' valid'); + logger.debug(process.env.HOST + ' valid'); host = process.env.HOST; } else { - log.warn('process.env.HOST ' + process.env.HOST + ' invalid, use 0.0.0.0 instead'); + logger.warn('process.env.HOST ' + process.env.HOST + ' invalid, use 0.0.0.0 instead'); } } app.set('port', port); @@ -63,13 +56,13 @@ models.Versions.findOne({ where: { type: 1 } }) }) .catch(function (e) { if (_.startsWith(e.message, 'ER_NO_SUCH_TABLE')) { - log.error( + logger.error( new Error( `Please upgrade your database. usage bin/db upgrade or code-push-server-db upgrade`, ), ); } else { - log.error(e); + logger.error(e); } process.exit(1); }); @@ -108,11 +101,11 @@ function onError(error) { // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': - log.error(bind + ' requires elevated privileges'); + logger.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': - log.error(bind + ' is already in use'); + logger.error(bind + ' is already in use'); process.exit(1); break; default: @@ -127,5 +120,5 @@ function onError(error) { function onListening() { var addr = server.address(); var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; - log.info('Listening on ' + bind); + logger.info('Listening on ' + bind); } diff --git a/config/config.js b/config/config.js index 0b9fbe95..f7a6e06a 100644 --- a/config/config.js +++ b/config/config.js @@ -1,4 +1,4 @@ -var os = require('os'); +const os = require('os'); function toBool(str) { return str === 'true' || str === '1'; @@ -12,8 +12,14 @@ function toNumber(str, defaultValue) { return num; } -var config = {}; -config.development = { +const config = { + // Config for log + log: { + // debug, info, warn, error + level: process.env.LOG_LEVEL || 'info', + // text, json + format: process.env.LOG_FORMAT || 'text', + }, // Config for database, only support mysql. db: { username: process.env.RDS_USERNAME || 'root', @@ -146,12 +152,4 @@ config.development = { }, }; -config.development.log4js = { - appenders: { console: { type: 'console' } }, - categories: { - default: { appenders: ['console'], level: process.env.LOG_LEVEL || 'info' }, - }, -}; - -config.production = Object.assign({}, config.development); module.exports = config; diff --git a/core/config.js b/core/config.js index c7edadf9..f19a6282 100644 --- a/core/config.js +++ b/core/config.js @@ -1,17 +1,30 @@ -var env = process.env.NODE_ENV || 'development'; -var _ = require('lodash'); -var path = require('path'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:config'); -var CONFIG_PATH = path.join(__dirname, '../config/config.js'); +const _ = require('lodash'); +const path = require('path'); +const { setLogTransports, ConsoleTransport, LogLevelFilter, logger } = require('kv-logger'); + +const env = process.env.NODE_ENV || 'development'; + +let CONFIG_PATH = path.join(__dirname, '../config/config.js'); if (process.env.CONFIG_FILE) { CONFIG_PATH = path.join(__dirname, path.relative(__dirname, process.env.CONFIG_FILE)); - log.info(`process.env.CONFIG_FILE value: ${process.env.CONFIG_FILE}`); } -log.info(`use config file ${CONFIG_PATH}`); -log.info(`use env ${env}`); -var config = _.get(require(CONFIG_PATH), env); + +const config = require(CONFIG_PATH); if (_.isEmpty(config)) { - throw new Error(`config is {}, check the env and config`); + throw new Error(`config is {}, check the config`); } + +// config logger +setLogTransports([ + new LogLevelFilter( + new ConsoleTransport(_.get(config, 'log.format')), + _.get(config, 'log.level'), + ), +]); + +logger.info(`use config`, { + config: CONFIG_PATH, + env: env, +}); + module.exports = config; diff --git a/core/services/account-manager.js b/core/services/account-manager.js index 9d2b9da1..836620e4 100644 --- a/core/services/account-manager.js +++ b/core/services/account-manager.js @@ -2,14 +2,13 @@ var models = require('../../models'); var _ = require('lodash'); var validator = require('validator'); +var { logger } = require('kv-logger'); var security = require('../utils/security'); var factory = require('../utils/factory'); var moment = require('moment'); var EmailManager = require('./email-manager'); var config = require('../config'); var AppError = require('../app-error'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:AccountManager'); var proto = (module.exports = function () { function AccountManager() {} @@ -20,10 +19,10 @@ var proto = (module.exports = function () { proto.collaboratorCan = function (uid, appName) { return this.getCollaborator(uid, appName).then((data) => { if (!data) { - log.debug(`collaboratorCan App ${appName} not exists.`); + logger.debug(`collaboratorCan App ${appName} not exists.`); throw new AppError.AppError(`App ${appName} not exists.`); } - log.debug('collaboratorCan yes'); + logger.debug('collaboratorCan yes'); return data; }); }; @@ -31,11 +30,11 @@ proto.collaboratorCan = function (uid, appName) { proto.ownerCan = function (uid, appName) { return this.getCollaborator(uid, appName).then((data) => { if (!data) { - log.debug(`ownerCan App ${appName} not exists.`); + logger.debug(`ownerCan App ${appName} not exists.`); throw new AppError.AppError(`App ${appName} not exists.`); } if (!_.eq(_.get(data, 'roles'), 'Owner')) { - log.debug(`ownerCan Permission Deny, You are not owner!`); + logger.debug(`ownerCan Permission Deny, You are not owner!`); throw new AppError.AppError('Permission Deny, You are not owner!'); } return data; diff --git a/core/services/client-manager.js b/core/services/client-manager.js index 83e66677..619705db 100644 --- a/core/services/client-manager.js +++ b/core/services/client-manager.js @@ -5,8 +5,7 @@ var common = require('../utils/common'); var factory = require('../utils/factory'); var AppError = require('../app-error'); var config = require('../config'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:ClientManager'); +var { logger } = require('kv-logger'); var Sequelize = require('sequelize'); var proto = (module.exports = function () { @@ -24,7 +23,9 @@ proto.getUpdateCheckCacheKey = function (deploymentKey, appVersion, label, packa }; proto.clearUpdateCheckCache = function (deploymentKey, appVersion, label, packageHash) { - log.debug('clear cache Deployments key:', deploymentKey); + logger.debug('clear cache Deployments key:', { + key: deploymentKey, + }); let redisCacheKey = this.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); var client = factory.getRedisClient('default'); return client @@ -61,7 +62,7 @@ proto.updateCheckFromCache = function ( .then((data) => { if (data) { try { - log.debug('updateCheckFromCache read from catch'); + logger.debug('updateCheckFromCache read from catch'); var obj = JSON.parse(data); return obj; } catch (e) {} @@ -70,7 +71,7 @@ proto.updateCheckFromCache = function ( .updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId) .then((rs) => { try { - log.debug('updateCheckFromCache read from db'); + logger.debug('updateCheckFromCache read from db'); var strRs = JSON.stringify(rs); client.setex(redisCacheKey, EXPIRED, strRs); } catch (e) {} @@ -171,7 +172,9 @@ proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, cli } } }); - log.debug(item); + logger.debug({ + item, + }); return item; }); }) diff --git a/core/services/datacenter-manager.js b/core/services/datacenter-manager.js index 116c337d..bd8ecd9b 100644 --- a/core/services/datacenter-manager.js +++ b/core/services/datacenter-manager.js @@ -7,8 +7,7 @@ var common = require('../utils/common'); const MANIFEST_FILE_NAME = 'manifest.json'; const CONTENTS_NAME = 'contents'; var AppError = require('../app-error'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:DataCenterManager'); +var { logger } = require('kv-logger'); var path = require('path'); var proto = (module.exports = function () { @@ -60,38 +59,38 @@ proto.validateStore = function (providePackageHash) { var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); var contentPath = path.join(packageHashPath, CONTENTS_NAME); if (!this.hasPackageStoreSync(providePackageHash)) { - log.debug(`validateStore providePackageHash not exist`); + logger.debug(`validateStore providePackageHash not exist`); return Promise.resolve(false); } return security.calcAllFileSha256(contentPath).then((manifestJson) => { var packageHash = security.packageHashSync(manifestJson); - log.debug(`validateStore packageHash:`, packageHash); + logger.debug(`validateStore packageHash:`, packageHash); try { var manifestJsonLocal = JSON.parse(fs.readFileSync(manifestFile)); } catch (e) { - log.debug(`validateStore manifestFile contents invilad`); + logger.debug(`validateStore manifestFile contents invilad`); return false; } var packageHashLocal = security.packageHashSync(manifestJsonLocal); - log.debug(`validateStore packageHashLocal:`, packageHashLocal); + logger.debug(`validateStore packageHashLocal:`, packageHashLocal); if (_.eq(providePackageHash, packageHash) && _.eq(providePackageHash, packageHashLocal)) { - log.debug(`validateStore store files is ok`); + logger.debug(`validateStore store files is ok`); return true; } - log.debug(`validateStore store files broken`); + logger.debug(`validateStore store files broken`); return false; }); }; proto.storePackage = function (sourceDst, force) { - log.debug(`storePackage sourceDst:`, sourceDst); + logger.debug(`storePackage sourceDst:`, sourceDst); if (_.isEmpty(force)) { force = false; } var self = this; return security.calcAllFileSha256(sourceDst).then((manifestJson) => { var packageHash = security.packageHashSync(manifestJson); - log.debug('storePackage manifestJson packageHash:', packageHash); + logger.debug('storePackage manifestJson packageHash:', packageHash); var dataDir = self.getDataDir(); var packageHashPath = path.join(dataDir, packageHash); var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); @@ -105,7 +104,7 @@ proto.storePackage = function (sourceDst, force) { manifestFile, ); } else { - log.debug(`storePackage cover from sourceDst:`, sourceDst); + logger.debug(`storePackage cover from sourceDst:`, sourceDst); return common.createEmptyFolder(packageHashPath).then(() => { return common.copy(sourceDst, contentPath).then(() => { var manifestString = JSON.stringify(manifestJson); diff --git a/core/services/deployments.js b/core/services/deployments.js index 8f8e7526..31370b77 100644 --- a/core/services/deployments.js +++ b/core/services/deployments.js @@ -5,8 +5,7 @@ var common = require('../../core/utils/common'); var _ = require('lodash'); var moment = require('moment'); var AppError = require('../app-error'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:deployments'); +var { logger } = require('kv-logger'); var proto = (module.exports = function () { function Deployments() {} @@ -78,7 +77,10 @@ proto.deleteDeloymentByName = function (deploymentName, appId) { }; proto.findDeloymentByName = function (deploymentName, appId) { - log.debug(`findDeloymentByName name:${deploymentName},appId: ${appId}`); + logger.debug('findDeloymentByName', { + name: deploymentName, + appId, + }); return models.Deployments.findOne({ where: { name: deploymentName, appid: appId }, }); diff --git a/core/services/package-manager.js b/core/services/package-manager.js index 003063ae..ec5a2428 100644 --- a/core/services/package-manager.js +++ b/core/services/package-manager.js @@ -12,8 +12,7 @@ var os = require('os'); var path = require('path'); var AppError = require('../app-error'); var constConfig = require('../const'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:PackageManager'); +var { logger } = require('kv-logger'); var proto = (module.exports = function () { function PackageManager() {} @@ -34,7 +33,7 @@ proto.findLatestPackageInfoByDeployVersion = function (deploymentsVersionsId) { (deploymentsVersions) => { if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { var e = new AppError.AppError('not found last packages'); - log.debug(e); + logger.debug(e); throw e; } return models.Packages.findByPk(deploymentsVersions.current_package_id); @@ -43,21 +42,21 @@ proto.findLatestPackageInfoByDeployVersion = function (deploymentsVersionsId) { }; proto.parseReqFile = function (req) { - log.debug('parseReqFile'); + logger.debug('parseReqFile'); return new Promise((resolve, reject) => { var form = formidable(); form.parse(req, (err, fields, files) => { if (err) { - log.debug('parseReqFile:', err); + logger.debug('parseReqFile:', err); reject(new AppError.AppError('upload error')); } else { - log.debug('parseReqFile fields:', fields); - log.debug('parseReqFile file location:', _.get(files, 'package.filepath')); + logger.debug('parseReqFile fields:', fields); + logger.debug('parseReqFile file location:', _.get(files, 'package.filepath')); if (_.isEmpty(fields.packageInfo) || _.isEmpty(_.get(files, 'package'))) { - log.debug('parseReqFile upload info lack'); + logger.debug('parseReqFile upload info lack'); reject(new AppError.AppError('upload info lack')); } else { - log.debug('parseReqFile is ok'); + logger.debug('parseReqFile is ok'); resolve({ packageInfo: JSON.parse(fields.packageInfo), package: files.package, @@ -86,25 +85,25 @@ proto.createDeploymentsVersionIfNotExist = function ( transaction: t, }).then(([data, created]) => { if (created) { - log.debug(`createDeploymentsVersionIfNotExist findOrCreate version ${appVersion}`); + logger.debug(`createDeploymentsVersionIfNotExist findOrCreate version ${appVersion}`); } - log.debug(`createDeploymentsVersionIfNotExist version data:`, data.get()); + logger.debug(`createDeploymentsVersionIfNotExist version data:`, data.get()); return data; }); }; proto.isMatchPackageHash = function (packageId, packageHash) { if (_.lt(packageId, 0)) { - log.debug(`isMatchPackageHash packageId is 0`); + logger.debug(`isMatchPackageHash packageId is 0`); return Promise.resolve(false); } return models.Packages.findByPk(packageId).then((data) => { if (data && _.eq(data.get('package_hash'), packageHash)) { - log.debug(`isMatchPackageHash data:`, data.get()); - log.debug(`isMatchPackageHash packageHash exist`); + logger.debug(`isMatchPackageHash data:`, data.get()); + logger.debug(`isMatchPackageHash packageHash exist`); return true; } else { - log.debug(`isMatchPackageHash package is null`); + logger.debug(`isMatchPackageHash package is null`); return false; } }); @@ -247,8 +246,8 @@ proto.generateOneDiffPackage = function ( if (!_.isEmpty(diffPackage)) { return; } - log.debug('originDataCenter', originDataCenter); - log.debug('oldPackageDataCenter', oldPackageDataCenter); + logger.debug('originDataCenter', originDataCenter); + logger.debug('oldPackageDataCenter', oldPackageDataCenter); var downloadURL = common.getBlobDownloadUrl(diffManifestBlobHash); return common .createFileFromRequest(downloadURL, path.join(workDirectoryPath, diffManifestBlobHash)) @@ -379,7 +378,7 @@ proto.createDiffPackages = function (originalPackage, destPackages, isUseDiffTex var manifest_blob_url = _.get(originalPackage, 'manifest_blob_url'); var blob_url = _.get(originalPackage, 'blob_url'); var workDirectoryPath = path.join(os.tmpdir(), 'codepush_' + security.randToken(32)); - log.debug('workDirectoryPath', workDirectoryPath); + logger.debug('workDirectoryPath', workDirectoryPath); return common .createEmptyFolder(workDirectoryPath) .then(() => self.downloadPackageAndExtract(workDirectoryPath, package_hash, blob_url)) @@ -419,7 +418,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel var appVersion = packageInfo.appVersion; var versionInfo = common.validatorVersion(appVersion); if (!versionInfo[0]) { - log.debug(`releasePackage targetBinaryVersion ${appVersion} not support.`); + logger.debug(`releasePackage targetBinaryVersion ${appVersion} not support.`); return Promise.reject( new AppError.AppError(`targetBinaryVersion ${appVersion} not support.`), ); @@ -431,7 +430,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel var tmpDir = os.tmpdir(); var directoryPathParent = path.join(tmpDir, 'codepuh_' + security.randToken(32)); var directoryPath = path.join(directoryPathParent, 'current'); - log.debug(`releasePackage generate an random dir path: ${directoryPath}`); + logger.debug(`releasePackage generate an random dir path: ${directoryPath}`); return Promise.all([ security.qetag(filePath), common.createEmptyFolder(directoryPath).then(() => { @@ -443,11 +442,11 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel return models.Apps.findByPk(appId).then((appInfo) => { if (type > 0 && appInfo.os > 0 && appInfo.os != type) { var e = new AppError.AppError('it must be publish it by ios type'); - log.debug(e); + logger.debug(e); throw e; } else { //不验证 - log.debug(`Unknown package type:`, type, ',db os:', appInfo.os); + logger.debug(`Unknown package type:`, type, ',db os:', appInfo.os); } return blobHash; }); @@ -475,7 +474,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel var e = new AppError.AppError( "The uploaded package is identical to the contents of the specified deployment's current release.", ); - log.debug(e.message); + logger.debug(e.message); throw e; } return security.qetag(manifestFile); @@ -542,7 +541,7 @@ proto.modifyReleasePackage = function (packageId, params) { ]) .then(([v1, v2]) => { if (v1 && !_.eq(v1.id, v2.id)) { - log.debug(v1); + logger.debug(v1); throw new AppError.AppError(`${appVersion} already exist.`); } if (!v2) { @@ -638,9 +637,9 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param }) .then(([sourcePack, deploymentsVersions]) => { var appFinalVersion = appVersion || deploymentsVersions.app_version; - log.debug('sourcePack', sourcePack); - log.debug('deploymentsVersions', deploymentsVersions); - log.debug('appFinalVersion', appFinalVersion); + logger.debug('sourcePack', sourcePack); + logger.debug('deploymentsVersions', deploymentsVersions); + logger.debug('appFinalVersion', appFinalVersion); return models.DeploymentsVersions.findOne({ where: { deployment_id: destDeploymentInfo.id, @@ -668,7 +667,7 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param .then(([sourcePack, deploymentsVersions, appFinalVersion]) => { var versionInfo = common.validatorVersion(appFinalVersion); if (!versionInfo[0]) { - log.debug(`targetBinaryVersion ${appVersion} not support.`); + logger.debug(`targetBinaryVersion ${appVersion} not support.`); throw new AppError.AppError(`targetBinaryVersion ${appVersion} not support.`); } var create_params = { diff --git a/core/utils/common.js b/core/utils/common.js index d3d30a20..b0aa9f37 100644 --- a/core/utils/common.js +++ b/core/utils/common.js @@ -7,7 +7,6 @@ var validator = require('validator'); var qiniu = require('qiniu'); var upyun = require('upyun'); const jschardet = require('jschardet'); -const log4js = require('log4js'); const path = require('path'); const util = require('util'); const streamPipeline = util.promisify(require('stream').pipeline); @@ -16,7 +15,7 @@ const fetch = require('node-fetch'); var config = require('../config'); var AppError = require('../app-error'); -var log = log4js.getLogger('cps:utils:common'); +var { logger } = require('kv-logger'); var common = {}; module.exports = common; @@ -27,7 +26,10 @@ common.detectIsTextFile = function (filePath) { fs.readSync(fd, buffer, 0, 4096, 0); fs.closeSync(fd); var rs = jschardet.detect(buffer); - log.debug('detectIsTextFile:', filePath, rs); + logger.debug('detectIsTextFile:', { + filePath, + rs, + }); if (rs.confidence == 1) { return true; } @@ -107,7 +109,7 @@ common.createFileFromRequest = async function (url, filePath) { } } - log.debug(`createFileFromRequest url:${url}`); + logger.debug(`createFileFromRequest url:${url}`); const response = await fetch(url); if (!response.ok) { throw new AppError.AppError(`unexpected response ${response.statusText}`); @@ -123,10 +125,10 @@ common.copy = function (sourceDst, targertDst) { return new Promise((resolve, reject) => { fsextra.copy(sourceDst, targertDst, { overwrite: true }, function (err) { if (err) { - log.error(err); + logger.error(err); reject(err); } else { - log.debug(`copy success sourceDst:${sourceDst} targertDst:${targertDst}`); + logger.debug(`copy success sourceDst:${sourceDst} targertDst:${targertDst}`); resolve(); } }); @@ -137,10 +139,10 @@ common.move = function (sourceDst, targertDst) { return new Promise((resolve, reject) => { fsextra.move(sourceDst, targertDst, { overwrite: true }, function (err) { if (err) { - log.error(err); + logger.error(err); reject(err); } else { - log.debug(`move success sourceDst:${sourceDst} targertDst:${targertDst}`); + logger.debug(`move success sourceDst:${sourceDst} targertDst:${targertDst}`); resolve(); } }); @@ -151,10 +153,10 @@ common.deleteFolder = function (folderPath) { return new Promise((resolve, reject) => { fsextra.remove(folderPath, function (err) { if (err) { - log.error(err); + logger.error(err); reject(err); } else { - log.debug(`deleteFolder delete ${folderPath} success.`); + logger.debug(`deleteFolder delete ${folderPath} success.`); resolve(null); } }); @@ -167,11 +169,11 @@ common.deleteFolderSync = function (folderPath) { common.createEmptyFolder = function (folderPath) { return new Promise((resolve, reject) => { - log.debug(`createEmptyFolder Create dir ${folderPath}`); + logger.debug(`createEmptyFolder Create dir ${folderPath}`); return common.deleteFolder(folderPath).then((data) => { fsextra.mkdirs(folderPath, (err) => { if (err) { - log.error(err); + logger.error(err); reject(new AppError.AppError(err.message)); } else { resolve(folderPath); @@ -188,19 +190,19 @@ common.createEmptyFolderSync = function (folderPath) { common.unzipFile = async function (zipFile, outputPath) { try { - log.debug(`unzipFile check zipFile ${zipFile} fs.R_OK`); + logger.debug(`unzipFile check zipFile ${zipFile} fs.R_OK`); fs.accessSync(zipFile, fs.R_OK); - log.debug(`Pass unzipFile file ${zipFile}`); + logger.debug(`Pass unzipFile file ${zipFile}`); } catch (err) { - log.error(err); + logger.error(err); throw new AppError.AppError(err.message); } try { await extract(zipFile, { dir: outputPath }); - log.debug(`unzipFile success`); + logger.debug(`unzipFile success`); } catch (err) { - log.error(err); + logger.error(err); throw new AppError.AppError(`it's not a zipFile`); } return outputPath; @@ -239,15 +241,15 @@ common.uploadFileToLocal = function (key, filePath) { throw new AppError.AppError('please set config local storageDir'); } if (key.length < 3) { - log.error(`generate key is too short, key value:${key}`); + logger.error(`generate key is too short, key value:${key}`); throw new AppError.AppError('generate key is too short.'); } try { - log.debug(`uploadFileToLocal check directory ${storageDir} fs.R_OK`); + logger.debug(`uploadFileToLocal check directory ${storageDir} fs.R_OK`); fs.accessSync(storageDir, fs.W_OK); - log.debug(`uploadFileToLocal directory ${storageDir} fs.R_OK is ok`); + logger.debug(`uploadFileToLocal directory ${storageDir} fs.R_OK is ok`); } catch (e) { - log.error(e); + logger.error(e); throw new AppError.AppError(e.message); } var subDir = key.substr(0, 2).toLowerCase(); @@ -259,31 +261,31 @@ common.uploadFileToLocal = function (key, filePath) { var stats = fs.statSync(storageDir); if (!stats.isDirectory()) { var e = new AppError.AppError(`${storageDir} must be directory`); - log.error(e); + logger.error(e); throw e; } if (!fs.existsSync(`${finalDir}`)) { fs.mkdirSync(`${finalDir}`); - log.debug(`uploadFileToLocal mkdir:${finalDir}`); + logger.debug(`uploadFileToLocal mkdir:${finalDir}`); } try { fs.accessSync(filePath, fs.R_OK); } catch (e) { - log.error(e); + logger.error(e); throw new AppError.AppError(e.message); } stats = fs.statSync(filePath); if (!stats.isFile()) { var e = new AppError.AppError(`${filePath} must be file`); - log.error(e); + logger.error(e); throw e; } fsextra.copy(filePath, fileName, (err) => { if (err) { - log.error(new AppError.AppError(err.message)); + logger.error(new AppError.AppError(err.message)); return reject(new AppError.AppError(err.message)); } - log.debug(`uploadFileToLocal copy file ${key} success.`); + logger.debug(`uploadFileToLocal copy file ${key} success.`); resolve(key); }); }); @@ -298,7 +300,7 @@ common.getBlobDownloadUrl = function (blobUrl) { } if (!validator.isURL(downloadUrl)) { var e = new AppError.AppError(`Please config ${storageType}.downloadUrl in config.js`); - log.error(e); + logger.error(e); throw e; } return `${downloadUrl}/${fileName}`; @@ -314,11 +316,11 @@ common.uploadFileToQiniu = function (key, filePath) { var bucketManager = new qiniu.rs.BucketManager(mac, conf); bucketManager.stat(bucket, key, (respErr, respBody, respInfo) => { if (respErr) { - log.debug('uploadFileToQiniu file stat:', respErr); + logger.debug('uploadFileToQiniu file stat:', respErr); return reject(new AppError.AppError(respErr.message)); } - log.debug('uploadFileToQiniu file stat respBody:', respBody); - log.debug('uploadFileToQiniu file stat respInfo:', respInfo); + logger.debug('uploadFileToQiniu file stat respBody:', respBody); + logger.debug('uploadFileToQiniu file stat respInfo:', respInfo); if (respInfo.statusCode == 200) { resolve(respBody.hash); } else { @@ -336,12 +338,12 @@ common.uploadFileToQiniu = function (key, filePath) { putExtra, (respErr, respBody, respInfo) => { if (respErr) { - log.error('uploadFileToQiniu putFile:', respErr); + logger.error('uploadFileToQiniu putFile:', respErr); // 上传失败, 处理返回代码 return reject(new AppError.AppError(JSON.stringify(respErr))); } else { - log.debug('uploadFileToQiniu putFile respBody:', respBody); - log.debug('uploadFileToQiniu putFile respInfo:', respInfo); + logger.debug('uploadFileToQiniu putFile respBody:', respBody); + logger.debug('uploadFileToQiniu putFile respInfo:', respInfo); // 上传成功, 处理返回值 if (respInfo.statusCode == 200) { return resolve(respBody.hash); @@ -372,26 +374,26 @@ common.uploadFileToUpyun = function (key, filePath) { return; } let remotePath = storageDir + '/' + key; - log.debug('uploadFileToUpyun remotePath:', remotePath); - log.debug('uploadFileToUpyun mkDir result:', result); + logger.debug('uploadFileToUpyun remotePath:', remotePath); + logger.debug('uploadFileToUpyun mkDir result:', result); client .putFile(remotePath, fs.createReadStream(filePath)) .then((data) => { - log.debug('uploadFileToUpyun putFile response:', data); + logger.debug('uploadFileToUpyun putFile response:', data); if (data) { resolve(key); } else { - log.debug('uploadFileToUpyun putFile failed!', data); + logger.debug('uploadFileToUpyun putFile failed!', data); reject(new AppError.AppError('Upload file to upyun failed!')); } }) .catch((e1) => { - log.debug('uploadFileToUpyun putFile exception e1:', e1); + logger.debug('uploadFileToUpyun putFile exception e1:', e1); reject(new AppError.AppError(JSON.stringify(e1))); }); }) .catch((e) => { - log.debug('uploadFileToUpyun putFile exception e:', e); + logger.debug('uploadFileToUpyun putFile exception e:', e); reject(new AppError.AppError(JSON.stringify(e))); }); }); @@ -448,12 +450,12 @@ common.uploadFileToOSS = function (key, filePath) { return new Promise((resolve, reject) => { upload.on('error', (error) => { - log.debug('uploadFileToOSS', error); + logger.debug('uploadFileToOSS', error); reject(error); }); upload.on('uploaded', (details) => { - log.debug('uploadFileToOSS', details); + logger.debug('uploadFileToOSS', details); resolve(details.ETag); }); fs.createReadStream(filePath).pipe(upload); @@ -475,7 +477,7 @@ common.uploadFileToTencentCloud = function (key, filePath) { FilePath: filePath, }, function (err, data) { - log.debug('uploadFileToTencentCloud', err, data); + logger.debug('uploadFileToTencentCloud', { err, data }); if (err) { reject(new AppError.AppError(JSON.stringify(err))); } else { diff --git a/core/utils/security.js b/core/utils/security.js index cf089a63..082a8b10 100644 --- a/core/utils/security.js +++ b/core/utils/security.js @@ -4,8 +4,7 @@ var crypto = require('crypto'); var fs = require('fs'); var qetag = require('../utils/qetag'); var _ = require('lodash'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:utils:security'); +var { logger } = require('kv-logger'); var AppError = require('../app-error'); var randToken = require('rand-token').generator({ @@ -65,10 +64,10 @@ security.packageHashSync = function (jsonData) { }).map((v) => { return v.path + ':' + v.hash; }); - log.debug('packageHashSync manifestData:', manifestData); + logger.debug('packageHashSync manifestData:', manifestData); var manifestString = JSON.stringify(manifestData.sort()); manifestString = _.replace(manifestString, /\\\//g, '/'); - log.debug('packageHashSync manifestString:', manifestString); + logger.debug('packageHashSync manifestString:', manifestString); return security.stringSha256Sync(manifestString); }; @@ -76,18 +75,18 @@ security.packageHashSync = function (jsonData) { security.qetag = function (buffer) { if (typeof buffer === 'string') { try { - log.debug(`Check upload file ${buffer} fs.R_OK`); + logger.debug(`Check upload file ${buffer} fs.R_OK`); fs.accessSync(buffer, fs.R_OK); - log.debug(`Pass upload file ${buffer}`); + logger.debug(`Pass upload file ${buffer}`); } catch (e) { - log.error(e); + logger.error(e); return Promise.reject(new AppError.AppError(e.message)); } } - log.debug(`generate file identical`); + logger.debug(`generate file identical`); return new Promise((resolve, reject) => { qetag(buffer, (data) => { - log.debug('identical:', data); + logger.debug('identical:', data); resolve(data); }); }); @@ -113,15 +112,13 @@ security.sha256AllFiles = function (files) { security.uploadPackageType = function (directoryPath) { return new Promise((resolve, reject) => { var recursive = require('recursive-readdir'); - var path = require('path'); - var slash = require('slash'); recursive(directoryPath, (err, files) => { if (err) { - log.error(new AppError.AppError(err.message)); + logger.error(new AppError.AppError(err.message)); reject(new AppError.AppError(err.message)); } else { if (files.length == 0) { - log.debug(`uploadPackageType empty files`); + logger.debug(`uploadPackageType empty files`); reject(new AppError.AppError('empty files')); } else { var constName = require('../const'); @@ -138,7 +135,7 @@ security.uploadPackageType = function (directoryPath) { return false; } }); - log.debug(`uploadPackageType packageType: ${packageType}`); + logger.debug(`uploadPackageType packageType: ${packageType}`); resolve(packageType); } } @@ -185,7 +182,7 @@ security.calcAllFileSha256 = function (directoryPath) { var slash = require('slash'); recursive(directoryPath, (error, files) => { if (error) { - log.error(error); + logger.error(error); reject(new AppError.AppError(error.message)); } else { // filter files that should be ignored @@ -195,7 +192,7 @@ security.calcAllFileSha256 = function (directoryPath) { }); if (files.length == 0) { - log.debug(`calcAllFileSha256 empty files in directoryPath:`, directoryPath); + logger.debug(`calcAllFileSha256 empty files in directoryPath:`, directoryPath); reject(new AppError.AppError('empty files')); } else { security.sha256AllFiles(files).then((results) => { @@ -209,7 +206,7 @@ security.calcAllFileSha256 = function (directoryPath) { relativePath = slash(relativePath); data[relativePath] = value; }); - log.debug(`calcAllFileSha256 files:`, data); + logger.debug(`calcAllFileSha256 files:`, data); resolve(data); }); } diff --git a/package-lock.json b/package-lock.json index 775a628e..1271d22b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2010,11 +2010,6 @@ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" }, - "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==" - }, "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -3347,11 +3342,6 @@ } } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, "follow-redirects": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", @@ -3783,8 +3773,17 @@ "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", + "source-map": "^0.6.1", "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "har-schema": { @@ -4439,6 +4438,11 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "kv-logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/kv-logger/-/kv-logger-0.4.0.tgz", + "integrity": "sha512-9zj0/lW8dyj/Mbi8cfDIeXRzyLE52RlU17uSL4Z+aUwTvhZN2c3c2bAgI02iacsivxXartiefCsLdlND8zzdmg==" + }, "language-subtag-registry": { "version": "0.3.21", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", @@ -4621,33 +4625,6 @@ } } }, - "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", - "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", @@ -6171,11 +6148,6 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -6666,51 +6638,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "requires": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", diff --git a/package.json b/package.json index 09308300..16831a70 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "npm": ">= 3.10.8" }, "scripts": { - "dev": "supervisor ./bin/www", + "dev": "LOG_LEVEL=debug supervisor ./bin/www", "start": "node ./bin/www", "init": "node ./bin/db init", "upgrade": "node ./bin/db upgrade", @@ -49,8 +49,8 @@ "helmet": "5.0.2", "jschardet": "3.0.0", "jsonwebtoken": "8.5.1", + "kv-logger": "0.4.0", "lodash": "4.17.21", - "log4js": "6.3.0", "moment": "2.29.1", "mysql2": "2.3.3", "node-fetch": "2.6.7", diff --git a/routes/accessKeys.js b/routes/accessKeys.js index 259bf2e6..8a4ab723 100644 --- a/routes/accessKeys.js +++ b/routes/accessKeys.js @@ -6,16 +6,15 @@ var models = require('../models'); var middleware = require('../core/middleware'); var accountManager = require('../core/services/account-manager')(); var AppError = require('../core/app-error'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:accessKey'); +var { logger } = require('kv-logger'); router.get('/', middleware.checkToken, (req, res, next) => { - log.debug('request get acceesKeys'); + logger.debug('request get acceesKeys'); var uid = req.users.id; accountManager .getAllAccessKeyByUid(uid) .then((accessKeys) => { - log.debug('acceesKeys:', accessKeys); + logger.debug('acceesKeys:', accessKeys); res.send({ accessKeys: accessKeys }); }) .catch((e) => { @@ -30,7 +29,7 @@ router.post('/', middleware.checkToken, (req, res, next) => { var friendlyName = _.trim(req.body.friendlyName); var ttl = parseInt(req.body.ttl); var description = _.trim(req.body.description); - log.debug(req.body); + logger.debug(req.body); var newAccessKey = security.randToken(28).concat(identical); return accountManager .isExsitAccessKeyName(uid, friendlyName) @@ -59,12 +58,12 @@ router.post('/', middleware.checkToken, (req, res, next) => { description: newToken.description, friendlyName: newToken.name, }; - log.debug(info); + logger.debug(info); res.send({ accessKey: info }); }) .catch((e) => { if (e instanceof AppError.AppError) { - log.debug(e); + logger.debug(e); res.status(406).send(e.message); } else { next(e); @@ -77,12 +76,12 @@ router.delete('/:name', middleware.checkToken, (req, res, next) => { var uid = req.users.id; return models.UserTokens.destroy({ where: { name: name, uid: uid } }) .then((rowNum) => { - log.debug('delete acceesKey:', name); + logger.debug('delete acceesKey:', name); res.send({ friendlyName: name }); }) .catch((e) => { if (e instanceof AppError.AppError) { - log.debug(e); + logger.debug(e); res.status(406).send(e.message); } else { next(e); diff --git a/routes/account.js b/routes/account.js index 63451918..143cd928 100644 --- a/routes/account.js +++ b/routes/account.js @@ -1,8 +1,7 @@ var express = require('express'); var router = express.Router(); var middleware = require('../core/middleware'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:account'); +var { logger } = require('kv-logger'); router.get('/', middleware.checkToken, (req, res) => { var userInfo = { @@ -10,7 +9,7 @@ router.get('/', middleware.checkToken, (req, res) => { linkedProviders: [], name: req.users.username, }; - log.debug(userInfo); + logger.debug(userInfo); res.send({ account: userInfo }); }); diff --git a/routes/apps.js b/routes/apps.js index ee2f0081..1c3338c5 100644 --- a/routes/apps.js +++ b/routes/apps.js @@ -11,8 +11,7 @@ var PackageManager = require('../core/services/package-manager'); var AppError = require('../core/app-error'); var common = require('../core/utils/common'); var config = require('../core/config'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:apps'); +var { logger } = require('kv-logger'); function delay(ms) { return new Promise(function (resolve) { @@ -289,22 +288,22 @@ router.post( accountManager .collaboratorCan(uid, appName) .then((col) => { - log.debug(col); + logger.debug(col); return deployments .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { - log.debug(`does not find the deployment`); + logger.debug(`does not find the deployment`); throw new AppError.AppError('does not find the deployment'); } return packageManager .parseReqFile(req) .then((data) => { if (data.package.mimetype != 'application/zip') { - log.debug(`upload file type is invlidate`, data.package); + logger.debug(`upload file type is invlidate`, data.package); throw new AppError.AppError('upload file type is invalidate'); } - log.debug('packageInfo:', data.packageInfo); + logger.debug('packageInfo:', data.packageInfo); return packageManager .releasePackage( deploymentInfo.appid, @@ -327,7 +326,7 @@ router.post( _.get(config, 'common.diffNums', 1), ) .catch((e) => { - log.error(e); + logger.error(e); }); }); } @@ -365,7 +364,7 @@ router.patch( '/:appName/deployments/:deploymentName/release', middleware.checkToken, (req, res, next) => { - log.debug('req.body', req.body); + logger.debug('req.body', req.body); var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); var uid = req.users.id; @@ -436,7 +435,7 @@ router.post( '/:appName/deployments/:sourceDeploymentName/promote/:destDeploymentName', middleware.checkToken, (req, res, next) => { - log.debug('req.body:', req.body); + logger.debug('req.body:', req.body); var appName = _.trim(req.params.appName); var sourceDeploymentName = _.trim(req.params.sourceDeploymentName); var destDeploymentName = _.trim(req.params.destDeploymentName); @@ -482,7 +481,7 @@ router.post( _.get(config, 'common.diffNums', 1), ) .catch((e) => { - log.error(e); + logger.error(e); }); }); } @@ -536,7 +535,7 @@ var rollbackCb = function (req, res, next) { packageManager .createDiffPackagesByLastNums(dep.appid, packageInfo, 1) .catch((e) => { - log.error(e); + logger.error(e); }); }); } @@ -746,7 +745,7 @@ router.post('/:appName/transfer/:email', middleware.checkToken, (req, res, next) }); router.post('/', middleware.checkToken, (req, res, next) => { - log.debug('addApp params:', req.body); + logger.debug('addApp params:', req.body); var constName = require('../core/const'); var appName = req.body.name; if (_.isEmpty(appName)) { diff --git a/routes/auth.js b/routes/auth.js index 15f46508..78ccea8c 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -3,8 +3,7 @@ var router = express.Router(); var _ = require('lodash'); var config = require('../core/config'); var validator = require('validator'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:auth'); +var { logger } = require('kv-logger'); router.get('/password', (req, res) => { res.render('auth/password', { title: 'CodePushServer' }); @@ -13,7 +12,7 @@ router.get('/password', (req, res) => { router.get('/login', (req, res) => { var codePushWebUrl = _.get(config, 'common.codePushWebUrl'); if (codePushWebUrl && validator.isURL(codePushWebUrl)) { - log.debug(`login redirect:${codePushWebUrl}`); + logger.debug(`login redirect:${codePushWebUrl}`); res.redirect(`${codePushWebUrl}/login`); } else { res.render('auth/login', { title: 'CodePushServer', email: req.query.email || '' }); @@ -28,19 +27,19 @@ router.get('/register', (req, res) => { var codePushWebUrl = _.get(config, 'common.codePushWebUrl'); var isRedirect = false; if (codePushWebUrl && validator.isURL(codePushWebUrl)) { - log.debug(`register redirect:${codePushWebUrl}`); + logger.debug(`register redirect:${codePushWebUrl}`); res.redirect(`${codePushWebUrl}/register`); } else { if (_.get(config, 'common.allowRegistration')) { - res.render('auth/register', { title: 'CodePushServer', email: req.query.email || '' }); + res.render('auth/register', { title: 'CodePushServer', email: req.query.email || '' }); } else { - res.redirect(`/auth/login`); + res.redirect(`/auth/login`); } } }); router.get('/confirm', (req, res) => { - log.debug(`confirmation form`); + logger.debug(`confirmation form`); res.render('auth/confirm', { title: 'CodePushServer', email: req.query.email || '' }); }); @@ -55,7 +54,7 @@ router.post('/login', (req, res, next) => { var account = _.trim(req.body.account); var password = _.trim(req.body.password); var tokenSecret = _.get(config, 'jwt.tokenSecret'); - log.debug(`login:${account}`); + logger.debug(`login:${account}`); accountManager .login(account, password) .then((users) => { @@ -66,12 +65,12 @@ router.post('/login', (req, res, next) => { ); }) .then((token) => { - log.debug(token); + logger.debug(token); res.send({ status: 'OK', results: { tokens: token } }); }) .catch((e) => { if (e instanceof AppError.AppError) { - log.debug(e); + logger.debug(e); res.send({ status: 'ERROR', errorMessage: e.message }); } else { next(e); diff --git a/routes/index.js b/routes/index.js index 09745e5f..84258578 100644 --- a/routes/index.js +++ b/routes/index.js @@ -4,8 +4,7 @@ var AppError = require('../core/app-error'); var middleware = require('../core/middleware'); var ClientManager = require('../core/services/client-manager'); var _ = require('lodash'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:index'); +var { logger } = require('kv-logger'); router.get('/', (req, res, next) => { res.render('index', { title: 'CodePushServer' }); @@ -22,7 +21,9 @@ router.get('/updateCheck', (req, res, next) => { var packageHash = _.get(req, 'query.packageHash'); var clientUniqueId = _.get(req, 'query.clientUniqueId'); var clientManager = new ClientManager(); - log.debug('req.query', req.query); + logger.debug('/updateCheck', { + query: req.query, + }); clientManager .updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) .then((rs) => { @@ -52,21 +53,25 @@ router.get('/updateCheck', (req, res, next) => { }); router.post('/reportStatus/download', (req, res) => { - log.debug('req.body', req.body); + logger.debug('/reportStatus/download', { + body: req.body, + }); var clientUniqueId = _.get(req, 'body.clientUniqueId'); var label = _.get(req, 'body.label'); var deploymentKey = _.get(req, 'body.deploymentKey'); var clientManager = new ClientManager(); clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { if (!err instanceof AppError.AppError) { - console.error(err.stack); + logger.error(err); } }); res.send('OK'); }); router.post('/reportStatus/deploy', (req, res) => { - log.debug('req.body', req.body); + logger.debug('/reportStatus/deploy', { + body: req.body, + }); var clientUniqueId = _.get(req, 'body.clientUniqueId'); var label = _.get(req, 'body.label'); var deploymentKey = _.get(req, 'body.deploymentKey'); @@ -75,7 +80,7 @@ router.post('/reportStatus/deploy', (req, res) => { .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) .catch((err) => { if (!err instanceof AppError.AppError) { - console.error(err.stack); + logger.error(err); } }); res.send('OK'); diff --git a/routes/indexV1.js b/routes/indexV1.js index 915a92ac..9f76e76e 100644 --- a/routes/indexV1.js +++ b/routes/indexV1.js @@ -3,8 +3,7 @@ var router = express.Router(); var AppError = require('../core/app-error'); var ClientManager = require('../core/services/client-manager'); var _ = require('lodash'); -var log4js = require('log4js'); -var log = log4js.getLogger('cps:indexV1'); +var { logger } = require('kv-logger'); router.get('/update_check', (req, res, next) => { var deploymentKey = _.get(req, 'query.deployment_key'); @@ -14,7 +13,7 @@ router.get('/update_check', (req, res, next) => { var isCompanion = _.get(req, 'query.is_companion'); var clientUniqueId = _.get(req, 'query.client_unique_id'); var clientManager = new ClientManager(); - log.debug('req.query', req.query); + logger.debug('/update_check req.query', req.query); clientManager .updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) .then((rs) => { @@ -59,21 +58,21 @@ router.get('/update_check', (req, res, next) => { }); router.post('/report_status/download', (req, res) => { - log.debug('req.body', req.body); + logger.debug('/report_status/download req.body', req.body); var clientUniqueId = _.get(req, 'body.client_unique_id'); var label = _.get(req, 'body.label'); var deploymentKey = _.get(req, 'body.deployment_key'); var clientManager = new ClientManager(); clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { if (!err instanceof AppError.AppError) { - console.error(err.stack); + logger.error(err); } }); res.send('OK'); }); router.post('/report_status/deploy', (req, res) => { - log.debug('req.body', req.body); + logger.debug('/report_status/deploy req.body', req.body); var clientUniqueId = _.get(req, 'body.client_unique_id'); var label = _.get(req, 'body.label'); var deploymentKey = _.get(req, 'body.deployment_key'); @@ -82,7 +81,7 @@ router.post('/report_status/deploy', (req, res) => { .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) .catch((err) => { if (!err instanceof AppError.AppError) { - console.error(err.stack); + logger.error(err); } }); res.send('OK'); From deefe90fd373fd3a7ce0a9d35321b7f32eed724e Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 7 Feb 2022 17:36:50 +0800 Subject: [PATCH 147/347] fix: simplify redis config --- config/config.js | 40 +++++++++++++++----------------- core/services/account-manager.js | 8 +++---- core/services/client-manager.js | 6 ++--- core/services/email-manager.js | 6 +++-- core/utils/factory.js | 14 +++++------ test/api/users/users.test.js | 4 ++-- 6 files changed, 39 insertions(+), 39 deletions(-) diff --git a/config/config.js b/config/config.js index f7a6e06a..2043289f 100644 --- a/config/config.js +++ b/config/config.js @@ -127,27 +127,25 @@ const config = { }, // Config for redis (register module, tryLoginTimes module) redis: { - default: { - host: process.env.REDIS_HOST || '127.0.0.1', - port: process.env.REDIS_PORT || 6379, - password: process.env.REDIS_PASSWORD, - db: process.env.REDIS_DB || 0, - retry_strategy: function (options) { - if (options.error.code === 'ECONNREFUSED') { - // End reconnecting on a specific error and flush all commands with a individual error - return new Error('The server refused the connection'); - } - if (options.total_retry_time > 1000 * 60 * 60) { - // End reconnecting after a specific timeout and flush all commands with a individual error - return new Error('Retry time exhausted'); - } - if (options.times_connected > 10) { - // End reconnecting with built in error - return undefined; - } - // reconnect after - return Math.max(options.attempt * 100, 3000); - }, + host: process.env.REDIS_HOST || '127.0.0.1', + port: process.env.REDIS_PORT || 6379, + password: process.env.REDIS_PASSWORD, + db: process.env.REDIS_DB || 0, + retry_strategy: function (options) { + if (options.error.code === 'ECONNREFUSED') { + // End reconnecting on a specific error and flush all commands with a individual error + return new Error('The server refused the connection'); + } + if (options.total_retry_time > 1000 * 60 * 60) { + // End reconnecting after a specific timeout and flush all commands with a individual error + return new Error('Retry time exhausted'); + } + if (options.times_connected > 10) { + // End reconnecting with built in error + return undefined; + } + // reconnect after + return Math.max(options.attempt * 100, 3000); }, }, }; diff --git a/core/services/account-manager.js b/core/services/account-manager.js index 836620e4..d9ab2a5a 100644 --- a/core/services/account-manager.js +++ b/core/services/account-manager.js @@ -119,7 +119,7 @@ proto.login = function (account, password) { .then((users) => { if (tryLoginTimes > 0) { var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; - var client = factory.getRedisClient('default'); + var client = factory.getRedisClient(); return client .get(loginKey) .then((loginErrorTimes) => { @@ -137,7 +137,7 @@ proto.login = function (account, password) { if (!security.passwordVerifySync(password, users.password)) { if (tryLoginTimes > 0) { var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; - var client = factory.getRedisClient('default'); + var client = factory.getRedisClient(); client .exists(loginKey) .then((isExists) => { @@ -177,7 +177,7 @@ proto.sendRegisterCode = function (email) { .then(() => { //将token临时存储到redis var token = security.randToken(40); - var client = factory.getRedisClient('default'); + var client = factory.getRedisClient(); return client .setex(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) .then(() => { @@ -201,7 +201,7 @@ proto.checkRegisterCode = function (email, token) { }) .then(() => { var registerKey = `${REGISTER_CODE}${security.md5(email)}`; - var client = factory.getRedisClient('default'); + var client = factory.getRedisClient(); return client.get(registerKey).then((storageToken) => { if (_.isEmpty(storageToken)) { throw new AppError.AppError(`验证码已经失效,请您重新获取`); diff --git a/core/services/client-manager.js b/core/services/client-manager.js index 619705db..bb36a8fd 100644 --- a/core/services/client-manager.js +++ b/core/services/client-manager.js @@ -27,7 +27,7 @@ proto.clearUpdateCheckCache = function (deploymentKey, appVersion, label, packag key: deploymentKey, }); let redisCacheKey = this.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); - var client = factory.getRedisClient('default'); + var client = factory.getRedisClient(); return client .keys(redisCacheKey) .then((data) => { @@ -56,7 +56,7 @@ proto.updateCheckFromCache = function ( return self.updateCheck(deploymentKey, appVersion, label, packageHash); } let redisCacheKey = self.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); - var client = factory.getRedisClient('default'); + var client = factory.getRedisClient(); return client .get(redisCacheKey) .then((data) => { @@ -103,7 +103,7 @@ proto.chosenMan = function (packageId, rollout, clientUniqueId) { if (rolloutClientUniqueIdCache === false) { return self.random(rollout); } else { - var client = factory.getRedisClient('default'); + var client = factory.getRedisClient(); var redisCacheKey = self.getChosenManCacheKey(packageId, rollout, clientUniqueId); return client .get(redisCacheKey) diff --git a/core/services/email-manager.js b/core/services/email-manager.js index be8b5778..79be09c1 100644 --- a/core/services/email-manager.js +++ b/core/services/email-manager.js @@ -12,7 +12,8 @@ var proto = (module.exports = function () { proto.sendMail = function (options) { return new Promise((resolve, reject) => { if (!_.get(options, 'to')) { - return reject(new AppError.AppError('to是必传参数')); + reject(new AppError.AppError('to是必传参数')); + return; } var smtpConfig = _.get(config, 'smtpConfig'); if (!smtpConfig || !smtpConfig.host) { @@ -29,7 +30,8 @@ proto.sendMail = function (options) { var mailOptions = _.assign(defaultMailOptions, options); transporter.sendMail(mailOptions, function (error, info) { if (error) { - return reject(error); + reject(error); + return; } resolve(info); }); diff --git a/core/utils/factory.js b/core/utils/factory.js index 311289ac..8811e97f 100644 --- a/core/utils/factory.js +++ b/core/utils/factory.js @@ -1,14 +1,14 @@ 'use strict'; -var util = require('util'); -var redis = require('redis'); -var config = require('../config'); -var _ = require('lodash'); +const util = require('util'); +const redis = require('redis'); +const config = require('../config'); +const _ = require('lodash'); -var factory = {}; +const factory = {}; module.exports = factory; -factory.getRedisClient = function (name) { - const client = redis.createClient(_.get(config, `redis.${name}`)); +factory.getRedisClient = function () { + const client = redis.createClient(_.get(config, 'redis')); return { del: util.promisify(client.del).bind(client), exists: util.promisify(client.exists).bind(client), diff --git a/test/api/users/users.test.js b/test/api/users/users.test.js index 40fbe9cb..b37c5f41 100644 --- a/test/api/users/users.test.js +++ b/test/api/users/users.test.js @@ -88,7 +88,7 @@ describe('api/users/users.test.js', function () { var account2 = '522539441@qq.com2'; var storageToken; before(function (done) { - var client = factory.getRedisClient('default'); + var client = factory.getRedisClient(); client .get(registerKey) .then(function (t) { @@ -155,7 +155,7 @@ describe('api/users/users.test.js', function () { describe('sign up', function (done) { var storageToken; before(function (done) { - var client = factory.getRedisClient('default'); + var client = factory.getRedisClient(); client .get(registerKey) .then(function (t) { From 4e45c7e651c503383e6bb659397d27b3a3c76809 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 8 Feb 2022 09:28:54 +0800 Subject: [PATCH 148/347] fix: add more info logs for account/app management --- app.js | 48 +++++++++++++++----------------- core/services/account-manager.js | 1 - routes/accessKeys.js | 14 ++++++++-- routes/account.js | 2 +- routes/apps.js | 32 +++++++++++++++++++-- routes/auth.js | 29 +++++++++++++------ 6 files changed, 85 insertions(+), 41 deletions(-) diff --git a/app.js b/app.js index c4a6b36f..9b9c6855 100644 --- a/app.js +++ b/app.js @@ -1,23 +1,23 @@ -var express = require('express'); -var path = require('path'); -var cookieParser = require('cookie-parser'); -var bodyParser = require('body-parser'); -var helmet = require('helmet'); -var config = require('./core/config'); -var _ = require('lodash'); -var fs = require('fs'); -var { logger } = require('kv-logger'); +const express = require('express'); +const path = require('path'); +const cookieParser = require('cookie-parser'); +const bodyParser = require('body-parser'); +const helmet = require('helmet'); +const _ = require('lodash'); +const fs = require('fs'); +const { logger } = require('kv-logger'); -var routes = require('./routes/index'); -var indexV1 = require('./routes/indexV1'); -var auth = require('./routes/auth'); -var accessKeys = require('./routes/accessKeys'); -var account = require('./routes/account'); -var users = require('./routes/users'); -var apps = require('./routes/apps'); -var AppError = require('./core/app-error'); +const config = require('./core/config'); +const routes = require('./routes/index'); +const indexV1 = require('./routes/indexV1'); +const auth = require('./routes/auth'); +const accessKeys = require('./routes/accessKeys'); +const account = require('./routes/account'); +const users = require('./routes/users'); +const apps = require('./routes/apps'); +const { AppError, NotFound } = require('./core/app-error'); -var app = express(); +const app = express(); app.use( helmet({ @@ -33,9 +33,7 @@ app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); -//use nginx in production -//if (app.get('env') === 'development') { -logger.debug('set Access-Control Header'); +logger.debug('use set Access-Control Header'); app.all('*', function (req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header( @@ -43,10 +41,8 @@ app.all('*', function (req, res, next) { 'Origin, X-Requested-With, Content-Type, Accept, Authorization, X-CodePush-Plugin-Version, X-CodePush-Plugin-Name, X-CodePush-SDK-Version', ); res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,PATCH,DELETE,OPTIONS'); - logger.debug('use set Access-Control Header'); next(); }); -//} logger.debug('config common.storageType value: ' + _.get(config, 'common.storageType')); @@ -87,7 +83,7 @@ app.use('/apps', apps); // will print stacktrace if (app.get('env') === 'development') { app.use(function (req, res, next) { - var err = new AppError.NotFound(`${req.method} ${req.url}`); + var err = new NotFound(`${req.method} ${req.url}`); res.status(err.status || 404); res.render('error', { message: err.message, @@ -105,14 +101,14 @@ if (app.get('env') === 'development') { }); } else { app.use(function (req, res, next) { - var e = new AppError.NotFound(); + var e = new NotFound(); res.status(404).send(e.message); logger.debug(e); }); // production error handler // no stacktraces leaked to user app.use(function (err, req, res, next) { - if (err instanceof AppError.AppError) { + if (err instanceof AppError) { res.send(err.message); logger.debug(err); } else { diff --git a/core/services/account-manager.js b/core/services/account-manager.js index d9ab2a5a..30bc725c 100644 --- a/core/services/account-manager.js +++ b/core/services/account-manager.js @@ -22,7 +22,6 @@ proto.collaboratorCan = function (uid, appName) { logger.debug(`collaboratorCan App ${appName} not exists.`); throw new AppError.AppError(`App ${appName} not exists.`); } - logger.debug('collaboratorCan yes'); return data; }); }; diff --git a/routes/accessKeys.js b/routes/accessKeys.js index 8a4ab723..a1b36140 100644 --- a/routes/accessKeys.js +++ b/routes/accessKeys.js @@ -29,7 +29,10 @@ router.post('/', middleware.checkToken, (req, res, next) => { var friendlyName = _.trim(req.body.friendlyName); var ttl = parseInt(req.body.ttl); var description = _.trim(req.body.description); - logger.debug(req.body); + logger.info('try to generate access key', { + uid, + ...req.body, + }); var newAccessKey = security.randToken(28).concat(identical); return accountManager .isExsitAccessKeyName(uid, friendlyName) @@ -58,7 +61,14 @@ router.post('/', middleware.checkToken, (req, res, next) => { description: newToken.description, friendlyName: newToken.name, }; - logger.debug(info); + logger.info('access key created', { + uid, + friendlyName: newToken.name, + }); + logger.debug('access key', { + uid, + ...info, + }); res.send({ accessKey: info }); }) .catch((e) => { diff --git a/routes/account.js b/routes/account.js index 143cd928..6df21c38 100644 --- a/routes/account.js +++ b/routes/account.js @@ -9,7 +9,7 @@ router.get('/', middleware.checkToken, (req, res) => { linkedProviders: [], name: req.users.username, }; - logger.debug(userInfo); + logger.info('check account info', userInfo); res.send({ account: userInfo }); }); diff --git a/routes/apps.js b/routes/apps.js index 1c3338c5..878183fc 100644 --- a/routes/apps.js +++ b/routes/apps.js @@ -665,6 +665,11 @@ router.delete('/:appName/collaborators/:email', middleware.checkToken, (req, res router.delete('/:appName', middleware.checkToken, (req, res, next) => { var appName = _.trim(req.params.appName); var uid = req.users.id; + logger.info('try remove app', { + uid, + appName, + }); + var appManager = new AppManager(); accountManager .ownerCan(uid, appName) @@ -672,6 +677,11 @@ router.delete('/:appName', middleware.checkToken, (req, res, next) => { return appManager.deleteApp(col.appid); }) .then((data) => { + logger.info('remove app success', { + uid, + appName, + }); + res.send(data); }) .catch((e) => { @@ -687,6 +697,11 @@ router.patch('/:appName', middleware.checkToken, (req, res, next) => { var newAppName = _.trim(req.body.name); var appName = _.trim(req.params.appName); var uid = req.users.id; + logger.info('try rename app', { + uid, + appName, + newAppName, + }); if (_.isEmpty(newAppName)) { return res.status(406).send('Please input name!'); } else { @@ -702,6 +717,12 @@ router.patch('/:appName', middleware.checkToken, (req, res, next) => { }); }) .then(() => { + logger.info('rename app success', { + uid, + appName, + newAppName, + }); + res.send(''); }) .catch((e) => { @@ -745,7 +766,11 @@ router.post('/:appName/transfer/:email', middleware.checkToken, (req, res, next) }); router.post('/', middleware.checkToken, (req, res, next) => { - logger.debug('addApp params:', req.body); + var uid = req.users.id; + logger.info('try add app', { + uid, + ...req.body, + }); var constName = require('../core/const'); var appName = req.body.name; if (_.isEmpty(appName)) { @@ -772,7 +797,6 @@ router.post('/', middleware.checkToken, (req, res, next) => { return res.status(406).send('Please input platform [React-Native|Cordova]!'); } var manuallyProvisionDeployments = req.body.manuallyProvisionDeployments; - var uid = req.users.id; var appManager = new AppManager(); appManager @@ -789,6 +813,10 @@ router.post('/', middleware.checkToken, (req, res, next) => { }); }) .then((data) => { + logger.info('add app success', { + uid, + name: appName, + }); res.send({ app: data }); }) .catch((e) => { diff --git a/routes/auth.js b/routes/auth.js index 78ccea8c..0177ebfa 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -1,9 +1,12 @@ -var express = require('express'); -var router = express.Router(); -var _ = require('lodash'); -var config = require('../core/config'); -var validator = require('validator'); -var { logger } = require('kv-logger'); +const express = require('express'); +const _ = require('lodash'); +const validator = require('validator'); +const { logger } = require('kv-logger'); +const jwt = require('jsonwebtoken'); + +const config = require('../core/config'); + +const router = express.Router(); router.get('/password', (req, res) => { res.render('auth/password', { title: 'CodePushServer' }); @@ -54,18 +57,26 @@ router.post('/login', (req, res, next) => { var account = _.trim(req.body.account); var password = _.trim(req.body.password); var tokenSecret = _.get(config, 'jwt.tokenSecret'); - logger.debug(`login:${account}`); + logger.info('try login', { + account, + }); accountManager .login(account, password) .then((users) => { - var jwt = require('jsonwebtoken'); + logger.info('login success', { + account, + uid: users.id, + }); return jwt.sign( { uid: users.id, hash: security.md5(users.ack_code), expiredIn: 7200 }, tokenSecret, ); }) .then((token) => { - logger.debug(token); + logger.debug('login jwt token', { + account, + token, + }); res.send({ status: 'OK', results: { tokens: token } }); }) .catch((e) => { From bb70e62361a0c9e142f8339418add7ea5d72a721 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 8 Feb 2022 09:38:13 +0800 Subject: [PATCH 149/347] refactor: use unified app error handlers --- app.js | 53 ++++++++++++++++------------------------------------- 1 file changed, 16 insertions(+), 37 deletions(-) diff --git a/app.js b/app.js index 9b9c6855..e4f29962 100644 --- a/app.js +++ b/app.js @@ -79,43 +79,22 @@ app.use('/account', account); app.use('/users', users); app.use('/apps', apps); -// development error handler -// will print stacktrace -if (app.get('env') === 'development') { - app.use(function (req, res, next) { - var err = new NotFound(`${req.method} ${req.url}`); - res.status(err.status || 404); - res.render('error', { - message: err.message, - error: err, - }); - logger.error(err); - }); - app.use(function (err, req, res, next) { - res.status(err.status || 500); - res.render('error', { - message: err.message, - error: err, - }); +// 404 handler +app.use(function (req, res, next) { + var e = new NotFound(`${req.method} ${req.url}`); + res.status(404).send(e.message); + logger.debug(e); +}); + +// error handler +app.use(function (err, req, res, next) { + if (err instanceof AppError) { + res.send(err.message); + logger.debug(err); + } else { + res.status(err.status || 500).send(err.message); logger.error(err); - }); -} else { - app.use(function (req, res, next) { - var e = new NotFound(); - res.status(404).send(e.message); - logger.debug(e); - }); - // production error handler - // no stacktraces leaked to user - app.use(function (err, req, res, next) { - if (err instanceof AppError) { - res.send(err.message); - logger.debug(err); - } else { - res.status(err.status || 500).send(err.message); - logger.error(err); - } - }); -} + } +}); module.exports = app; From ed6e08d09f8775b0369686e27b818cb0411b3877 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 8 Feb 2022 10:45:11 +0800 Subject: [PATCH 150/347] chore: update README --- README.cn.md | 61 +++++++++++++ README.md | 91 ++++++------------- docs/react-native-code-push.md | 156 --------------------------------- 3 files changed, 89 insertions(+), 219 deletions(-) create mode 100644 README.cn.md delete mode 100644 docs/react-native-code-push.md diff --git a/README.cn.md b/README.cn.md new file mode 100644 index 00000000..f1452d7c --- /dev/null +++ b/README.cn.md @@ -0,0 +1,61 @@ +# CodePush 服务端 + +微软官方的 CodePush 在国内的网络访问较慢, 所以我们使用这个服务端来架设自己的 CodePush 服务 + +## 关于本项目 + +因为原 [code-push-server](https://github.com/lisong/code-push-server) 项目的作者没有积极维护了, 我们创建了这个项目用来: + +- 保持依赖更新 +- 修复任何与最新的客户端的兼容问题 +- 我们只使用官方的 react-native-code-push 客户端, 所以定制的功能, 比如 [is_use_diff_text](https://github.com/lisong/code-push-server#advance-feature) 会被放弃. +- 我们只在生产环境使用了 react-native-code-push, 对于其他的 CodePush 客户端, 大部分功能应该没有差别, 如果遇到任何问题的话, 都欢迎提交 issue 或者 PR. + +## 支持的存储方式 + +- local: 在本地硬盘存储包文件 +- qiniu: 在[七牛云](http://www.qiniu.com/)存储包文件 +- s3: 在[aws](https://aws.amazon.com/)存储包文件 +- oss: 在[阿里云](https://www.aliyun.com/product/oss)存储包文件 +- tencentcloud: 在[腾迅云](https://cloud.tencent.com/product/cos)存储包文件 + +## 正确使用 code-push 热更新 + +- 苹果 App 允许使用热更新[Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), 为了不影响用户体验,规定必须使用静默更新。 Google Play 不能使用静默更新,必须弹框告知用户 App 有更新。中国的 android 市场必须采用静默更新(如果弹框提示,App 会被“请上传最新版本的二进制应用包”原因驳回)。 +- react-native 不同平台 bundle 包不一样,在使用 code-push-server 的时候必须创建不同的应用来区分(eg. CodePushDemo-ios 和 CodePushDemo-android) +- react-native-code-push 只更新资源文件,不会更新 java 和 Objective C,所以 npm 升级依赖包版本的时候,如果依赖包使用的本地化实现, 这时候必须更改应用版本号(ios 修改 Info.plist 中的 CFBundleShortVersionString, android 修改 build.gradle 中的 versionName), 然后重新编译 app 发布到应用商店。 +- 推荐使用 code-push release-react 命令发布应用,该命令合并了打包和发布命令(eg. code-push release-react CodePushDemo-ios ios -d Production) +- 每次向 App Store 提交新的版本时,也应该基于该提交版本同时向 code-push-server 发布一个初始版本。(因为后面每次向 code-push-server 发布版本时,code-puse-server 都会和初始版本比较,生成补丁版本) + +### CodePush 命令行 + +[code-push-cli](https://github.com/shm-open/code-push-cli) 是用来管理 App 以及发布 CodePush 版本的, 请查看命令行项目的说明了解更多 + +### 客户端 + +- [React Native](https://github.com/Microsoft/react-native-code-push) +- [Cordova](https://github.com/microsoft/cordova-plugin-code-push) +- [Capacitor](https://github.com/mapiacompany/capacitor-codepush) + +## 如何安装 code-push-server + +- [Docker](./docs/install-server-by-docker.md) (推荐) +- [直接安装](./docs/install-server.md) + +## 默认帐号和密码 + +- 帐号: `admin` +- 密码: `123456` + +## 常见问题 + +- [修改密码](https://github.com/lisong/code-push-server/issues/43) +- [code-push-server 使用+一些需要注意的地方](https://github.com/lisong/code-push-server/issues/135) +- 支持的 targetBinaryVersion + - `*` + - `1.2.3` + - `1.2`/`1.2.*` + - `1.2.3 - 1.2.7` + - `>=1.2.3 <1.2.7` + - `~1.2.3` + - `^1.2.3` diff --git a/README.md b/README.md index 10cfcbfd..f7652722 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,25 @@ -# CodePush Server [source](https://github.com/lisong/code-push-server) +# CodePush Server ![Node.js CI](https://github.com/shm-open/code-push-server/workflows/Node.js%20CI/badge.svg) -[![NPM](https://nodei.co/npm/code-push-server.svg?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/code-push-server/) +[[Chinese version 中文版]](./README.cn.md) -[![NPM Version](https://img.shields.io/npm/v/code-push-server.svg)](https://npmjs.org/package/code-push-server) -[![Node.js Version](https://img.shields.io/node/v/code-push-server.svg)](https://nodejs.org/en/download/) -[![Linux Status](https://img.shields.io/travis/lisong/code-push-server/master.svg?label=linux)](https://travis-ci.org/lisong/code-push-server) -[![Windows Status](https://img.shields.io/appveyor/ci/lisong/code-push-server/master.svg?label=windows)](https://ci.appveyor.com/project/lisong/code-push-server) -[![Coverage Status](https://img.shields.io/coveralls/lisong/code-push-server/master.svg)](https://coveralls.io/github/lisong/code-push-server) -[![Dependency Status](https://img.shields.io/david/lisong/code-push-server.svg)](https://david-dm.org/lisong/code-push-server) -[![Known Vulnerabilities](https://snyk.io/test/npm/code-push-server/badge.svg)](https://snyk.io/test/npm/code-push-server) -[![Licenses](https://img.shields.io/npm/l/code-push-server.svg)](https://spdx.org/licenses/MIT) +CodePush Server is a CodePush program server. The official Microsoft CodePush service is slow in China, therefore we use this to host our own server. -CodePush Server is a CodePush progam server! microsoft CodePush cloud is slow in China, we can use this to build our's. I use [qiniu](http://www.qiniu.com/) to store the files, because it's simple and quick! Or you can use [local/s3/oss/tencentcloud] storage, just modify config.js file, it's simple configure. +## About this fork -## Support Storage mode +Since the original [code-push-server](https://github.com/lisong/code-push-server) project is not actively maintained, we created this fork to: -- local _storage bundle file in local machine_ -- qiniu _storage bundle file in [qiniu](http://www.qiniu.com/)_ -- s3 _storage bundle file in [aws](https://aws.amazon.com/)_ -- oss _storage bundle file in [aliyun](https://www.aliyun.com/product/oss)_ -- tencentcloud _storage bundle file in [tencentcloud](https://cloud.tencent.com/product/cos)_ +- keep dependencies up-to-date +- fix any compatiblity issue with latest official code-push clients +- we only stick to official react-native-code-push client, therefore the customized feature like [is_use_diff_text](https://github.com/lisong/code-push-server#advance-feature) won't be supported. +- we only use react-native-code-push client in production, most of the feature should be no difference for the rest CodePush clients, but if you found any, issues and PRs are always welcome. -## qq 交流群 +## Support Storage mode -- QQ 群: 628921445 -- QQ 群: 535491067 +- local: store bundle files in local machine +- qiniu: store bundle files in [qiniu](http://www.qiniu.com/) +- s3: store bundle files in [aws](https://aws.amazon.com/) +- oss: store bundle files in [aliyun](https://www.aliyun.com/product/oss) +- tencentcloud: store bundle files in [tencentcloud](https://cloud.tencent.com/product/cos) ## 正确使用 code-push 热更新 @@ -34,48 +29,30 @@ CodePush Server is a CodePush progam server! microsoft CodePush cloud is slow in - 推荐使用 code-push release-react 命令发布应用,该命令合并了打包和发布命令(eg. code-push release-react CodePushDemo-ios ios -d Production) - 每次向 App Store 提交新的版本时,也应该基于该提交版本同时向 code-push-server 发布一个初始版本。(因为后面每次向 code-push-server 发布版本时,code-puse-server 都会和初始版本比较,生成补丁版本) -### shell login - -```shell -$ code-push login http://api.code-push.com #登录 -``` - -### [web](http://www.code-push.com) +### CodePush Cli -访问:http://www.code-push.com +check out the [code-push-cli](https://github.com/shm-open/code-push-cli) which works with server for manage apps and publish releases -### client eg. +### Clients -[ReactNative CodePushDemo](https://github.com/lisong/code-push-demo-app) +- [React Native](https://github.com/Microsoft/react-native-code-push) +- [Cordova](https://github.com/microsoft/cordova-plugin-code-push) +- [Capacitor](https://github.com/mapiacompany/capacitor-codepush) -[Cordova CodePushDemo](https://github.com/lisong/code-push-cordova-demo-app) +## How To Install code-push-server -## HOW TO INSTALL code-push-server +- [docker](./docs/install-server-by-docker.md) (recommended) +- [manual operation](./docs/install-server.md) -- [docker](https://github.com/lisong/code-push-server/blob/master/docker/README.md) (recommend) -- [manual operation](https://github.com/lisong/code-push-server/blob/master/docs/README.md) - -## DEFAULT ACCOUNT AND PASSWORD +## Default Account and Password - account: `admin` - password: `123456` -## HOW TO USE - -- [normal](https://github.com/lisong/code-push-server/blob/master/docs/react-native-code-push.md) -- [react-native-code-push](https://github.com/Microsoft/react-native-code-push) -- [code-push](https://github.com/Microsoft/code-push) - -## ISSUES - -[code-push-server normal solution](https://github.com/lisong/code-push-server/issues/135) - -[An unknown error occurred](https://github.com/lisong/code-push-server/issues?utf8=%E2%9C%93&q=unknown) - -[modify password](https://github.com/lisong/code-push-server/issues/43) - -# UPDATE TIME LINE +## FAQ +- [modify password](https://github.com/lisong/code-push-server/issues/43) +- [code-push-server normal solution (CN)](https://github.com/lisong/code-push-server/issues/135) - targetBinaryVersion support - `*` - `1.2.3` @@ -84,15 +61,3 @@ $ code-push login http://api.code-push.com #登录 - `>=1.2.3 <1.2.7` - `~1.2.3` - `^1.2.3` - -## Advance Feature - -> use google diff-match-patch calculate text file diff patch - -- support iOS and Android -- use `"react-native-code-push": "git+https://git@github.com/lisong/react-native-code-push.git"` instead `"react-native-code-push": "x.x.x"` in `package.json` -- change `apps`.`is_use_diff_text` to `1` in mysql codepush database - -## License - -MIT License [read](https://github.com/lisong/code-push-server/blob/master/LICENSE) diff --git a/docs/react-native-code-push.md b/docs/react-native-code-push.md deleted file mode 100644 index e9abc015..00000000 --- a/docs/react-native-code-push.md +++ /dev/null @@ -1,156 +0,0 @@ -# `react-native` 如何使用 `code-push` 热更新 - -## 使用前须知 - -- Q: “苹果应用商店和 android 应用商店允不允许使用热更新?” - A: “都允许。” - - > 苹果允许使用热更新[Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), 但是规定不能弹框提示用户更新,影响用户体验。 - > Google Play 也允许热更新,但必须弹框告知用户更新。在中国的 android 市场发布时,都必须关闭更新弹框,否则会在审核应用时以“请上传最新版本的二进制应用包”驳回应用。 - -- Q: “react-native 开发环境更新模式是否可以直接用在生产环境下?” - A: “不能。” - -- Q: “code-push 使用复杂么?” - A: “不复杂。很多网上的文章说复杂,是因为作者没有仔细理解官方文档,而且认为踩坑了。” - -- Q: “为什么推荐 code-push?” - A: ”非常好。除了满足基本更新功能外,还有统计,hash 计算容错和补丁更新功能。微软的项目,大公司技术有保障,而且开源。近几年微软在拥抱开源方面,让大家也是刮目相看。“ - -## 安装依赖包 - -#### 1. [react-native-cli](https://github.com/facebook/react-native) react-native 命令行工具,安装后可以在终端使用`react-native`命令 - -```shell -$ npm install react-native-cli@latest -g -``` - -#### 2. [@shm-open/code-push-cli](https://github.com/shm-open/code-push-cli) 管理发布更新版本命令行工具,安装后可以在终端使用`code-push`命令 - -```shell -$ npm install code-push-cli@latest -g -``` - -#### 3. [react-native-code-push](https://github.com/Microsoft/react-native-code-push) 集成到 react-native 项目,按照以下步骤安装并修改配置既可集成 - -```shell -$ react-native init CodePushDemo #初始化一个react-native项目 -$ cd CodePushDemo -$ npm install --save react-native-code-push@latest #安装react-native-code-push -$ react-native link react-native-code-push #连接到项目中,提示输入配置可以先行忽略 -``` - -#### 4. [@shm-open/code-push-server](https://github.com/shm-open/code-push-server) 微软云服务在中国太慢,可以用它搭建自己的服务端。 - -- [docker](https://github.com/lisong/code-push-server/blob/master/docker/README.md) (recommend) -- [manual operation](https://github.com/lisong/code-push-server/blob/master/docs/README.md) - -## 创建服务端应用 - -基于 code-push-server 服务 - -```shell -$ code-push login http://YOUR_CODE_PUSH_SERVER_IP:3000 #浏览器中登录获取token,用户名:admin, 密码:123456 -$ code-push app add CodePushDemoiOS ios react-native #创建iOS版, 获取Production DeploymentKey -$ code-push app add CodePushDemoAndroid android react-native #创建android版,获取获取Production DeploymentKey -``` - -## 配置 CodePushDemo react-native 项目 - -#### iOS 配置 - -编辑`Info.plist`文件,添加`CodePushDeploymentKey`和`CodePushServerURL` - -1. `CodePushDeploymentKey`值设置为 CodePushDemo-ios 的 Production DeploymentKey 值。 - -2. `CodePushServerURL`值设置为 code-push-server 服务地址 http://YOUR_CODE_PUSH_SERVER_IP:3000/ 不在同一台机器的时候,请将 YOUR_CODE_PUSH_SERVER_IP 改成外网 ip 或者域名地址。 - -3. 将默认版本号 1.0 改成三位 1.0.0 - -```xml -... -CodePushDeploymentKey -YourCodePushKey -CodePushServerURL -YourCodePushServerUrl -... -``` - -#### android 配置 - -编辑`MainApplication.java` - -1. `YourKey`替换成 CodePushDemo-android 的 Production DeploymentKey 值 - -2. `YourCodePushServerUrl`值设置为 code-push-server 服务地址 http://YOUR_CODE_PUSH_SERVER_IP:3000/ 不在同一台机器的时候,请将 YOUR_CODE_PUSH_SERVER_IP 改成外网 ip 或者域名地址。 - -3. 将默认版本号 1.0 改成三位 1.0.0 - -```java -@Override -protected List getPackages() { - return Arrays.asList( - new MainReactPackage(), - new CodePush( - "YourKey", - MainApplication.this, - BuildConfig.DEBUG, - "YourCodePushServerUrl" - ) - ); -} -``` - -## 添加更新检查 - -可以参考[code-push-demo-app](https://github.com/lisong/code-push-demo-app/) -可以在入口 componentDidMount 添加 - -```javascript -CodePush.sync({ - installMode: CodePush.InstallMode.IMMEDIATE, - updateDialog: true, -}); -``` - -不要忘记头部引入 - -```javascript -import CodePush from 'react-native-code-push'; -``` - -## 运行 CodePushDemo react-native 项目 - -#### iOS - -```shell -$ cd /path/to/CodePushDemo -$ open ios/CodePushDemo.xcodeproj -``` - -在 Xcode 中打开菜单 Product > Scheme > Edit Scheme... > Run 选项中 Build Configuration 修改成 Release, 然后运行编译 - -### android - -```shell -$ cd /path/to/CodePushDemo -$ cd android -$ ./gradlew assembleRelease -$ cd app/build/outputs/apk #将打好的包app-release.apk安装到您的手机上 -``` - -## 发布更新到服务上 - -iOS 和 android 要分开发布,所以创建了`CodePushDemo-ios`和`CodePushDemo-android`应用 - -```shell -$ cd /path/to/CodePushDemo -$ code-push release-react CodePushDemo-ios ios -d Production #iOS版 -$ code-push release-react CodePushDemo-android android -d Production #android版 -``` - -## 例子 - -[code-push-demo-app](https://github.com/lisong/code-push-demo-app) - -### 更多信息参考[code-push-server](https://github.com/lisong/code-push-server) From 749912e8f4751a1b03cf2b9fc26891ebcdfa2247 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 8 Feb 2022 11:47:33 +0800 Subject: [PATCH 151/347] refactor: move test to tests/ --- .gitignore | 10 +++------- Makefile | 4 ++-- bin/www | 4 +--- {test => tests}/api/accessKeys/accessKeys.test.js | 0 {test => tests}/api/account/account.test.js | 0 {test => tests}/api/apps/apps.test.js | 0 {test => tests}/api/apps/bundle.zip | Bin {test => tests}/api/apps/bundle_v2.zip | Bin {test => tests}/api/apps/release.test.js | 0 {test => tests}/api/auth/auth.test.js | 0 {test => tests}/api/index/index.test.js | 0 {test => tests}/api/init/database.js | 0 {test => tests}/api/users/users.test.js | 0 {test => tests}/unit/.gitkeep | 0 14 files changed, 6 insertions(+), 12 deletions(-) rename {test => tests}/api/accessKeys/accessKeys.test.js (100%) rename {test => tests}/api/account/account.test.js (100%) rename {test => tests}/api/apps/apps.test.js (100%) rename {test => tests}/api/apps/bundle.zip (100%) rename {test => tests}/api/apps/bundle_v2.zip (100%) rename {test => tests}/api/apps/release.test.js (100%) rename {test => tests}/api/auth/auth.test.js (100%) rename {test => tests}/api/index/index.test.js (100%) rename {test => tests}/api/init/database.js (100%) rename {test => tests}/api/users/users.test.js (100%) rename {test => tests}/unit/.gitkeep (100%) diff --git a/.gitignore b/.gitignore index c8f8d743..ba2fa996 100644 --- a/.gitignore +++ b/.gitignore @@ -8,14 +8,10 @@ pids *.seed *.DS_Store -.grunt +# deps +node_modules/ -# Dependency directory -# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git -node_modules - -coverage # vs code .history -.idea \ No newline at end of file +.idea diff --git a/Makefile b/Makefile index 54847161..e031ea46 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,8 @@ VERSION := $(shell node -p "require('./package.json').version") .PHONY: test test: @echo "\nRunning integration tests..." - @mocha test/api/init --exit - @mocha test/api/users test/api/auth test/api/account test/api/accessKeys test/api/apps test/api/index --exit --recursive --timeout 15000 + @mocha tests/api/init --exit + @mocha tests/api/users tests/api/auth tests/api/account tests/api/accessKeys tests/api/apps tests/api/index --exit --recursive --timeout 15000 .PHONY: release-docker release-docker: diff --git a/bin/www b/bin/www index 7419fd08..a8d224ac 100755 --- a/bin/www +++ b/bin/www @@ -18,7 +18,6 @@ var app = require('../app'); */ var port = normalizePort(process.env.PORT || '3000'); -logger.debug('port ' + port); var host = null; if (process.env.HOST) { @@ -119,6 +118,5 @@ function onError(error) { function onListening() { var addr = server.address(); - var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; - logger.info('Listening on ' + bind); + logger.info('server is listening on ', addr); } diff --git a/test/api/accessKeys/accessKeys.test.js b/tests/api/accessKeys/accessKeys.test.js similarity index 100% rename from test/api/accessKeys/accessKeys.test.js rename to tests/api/accessKeys/accessKeys.test.js diff --git a/test/api/account/account.test.js b/tests/api/account/account.test.js similarity index 100% rename from test/api/account/account.test.js rename to tests/api/account/account.test.js diff --git a/test/api/apps/apps.test.js b/tests/api/apps/apps.test.js similarity index 100% rename from test/api/apps/apps.test.js rename to tests/api/apps/apps.test.js diff --git a/test/api/apps/bundle.zip b/tests/api/apps/bundle.zip similarity index 100% rename from test/api/apps/bundle.zip rename to tests/api/apps/bundle.zip diff --git a/test/api/apps/bundle_v2.zip b/tests/api/apps/bundle_v2.zip similarity index 100% rename from test/api/apps/bundle_v2.zip rename to tests/api/apps/bundle_v2.zip diff --git a/test/api/apps/release.test.js b/tests/api/apps/release.test.js similarity index 100% rename from test/api/apps/release.test.js rename to tests/api/apps/release.test.js diff --git a/test/api/auth/auth.test.js b/tests/api/auth/auth.test.js similarity index 100% rename from test/api/auth/auth.test.js rename to tests/api/auth/auth.test.js diff --git a/test/api/index/index.test.js b/tests/api/index/index.test.js similarity index 100% rename from test/api/index/index.test.js rename to tests/api/index/index.test.js diff --git a/test/api/init/database.js b/tests/api/init/database.js similarity index 100% rename from test/api/init/database.js rename to tests/api/init/database.js diff --git a/test/api/users/users.test.js b/tests/api/users/users.test.js similarity index 100% rename from test/api/users/users.test.js rename to tests/api/users/users.test.js diff --git a/test/unit/.gitkeep b/tests/unit/.gitkeep similarity index 100% rename from test/unit/.gitkeep rename to tests/unit/.gitkeep From 7644969a28d84ae640184596e5569e3cdd34291e Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 8 Feb 2022 14:34:13 +0800 Subject: [PATCH 152/347] chore: update install docs --- docs/install-server-by-docker.md | 6 +- docs/install-server.md | 139 +++++-------------------------- 2 files changed, 25 insertions(+), 120 deletions(-) diff --git a/docs/install-server-by-docker.md b/docs/install-server-by-docker.md index 6480627b..39f04661 100644 --- a/docs/install-server-by-docker.md +++ b/docs/install-server-by-docker.md @@ -14,9 +14,9 @@ - `updateCheckCache` 提升应用性能 - `rolloutClientUniqueIdCache` 灰度发布 -## 安装 docker +## 安装 Docker -参考 docker 官方安装教程 +参考 Docker 官方安装教程 - [>>mac 点这里](https://docs.docker.com/docker-for-mac/install/) - [>>windows 点这里](https://docs.docker.com/docker-for-windows/install/) @@ -112,6 +112,6 @@ $ docker-compose logs server ## 销毁退出应用 -```bash +```shell $ docker-compose down ``` diff --git a/docs/install-server.md b/docs/install-server.md index ed39378c..3d5f65ae 100644 --- a/docs/install-server.md +++ b/docs/install-server.md @@ -1,16 +1,16 @@ -## INSTALL NODE AND NPM +## Install Node and NPM [see](https://nodejs.org/en/download/) > (chosen latest LTS version) -## INSTALL PM2 +## Install PM2 ```bash $ sudo npm i -g pm2 ``` -## INSTALL MYSQL +## Install MySQL - [Linux](https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html) - [macOS](https://dev.mysql.com/doc/refman/8.0/en/osx-installation.html) @@ -19,74 +19,53 @@ $ sudo npm i -g pm2 > notice. mysql8.x default auth caching_sha2_pasword not support in node-mysql2 see [issue](https://github.com/mysqljs/mysql/pull/1962) -## GET code-push-server FROM NPM +## Get code-push-server from NPM ```shell $ npm install @shm-open/code-push-server@latest -g ``` -## GET code-push-server FROM SOURCE CODE - -```shell -$ git clone https://github.com/shm-open/code-push-server.git -$ cd code-push-server -$ npm install -``` - -## INIT DATABASE +## Init Database ```shell $ code-push-server-db init --dbhost "your mysql host" --dbport "your mysql port" --dbuser "your mysql user" --dbpassword "your mysql password" ``` -or from source code - -```shell -$ ./bin/db init --dbhost "your mysql host" --dbport "your mysql port" --dbuser "your mysql user" --dbpassword "your mysql password" -``` - > output: success -## CONFIGURE for code-push-server +## Configure code-push-server + +check out the supported config items in [config.js](../src/config.js) -save the file [config.js](https://github.com/lisong/code-push-server/blob/master/config/config.js) +save the file [process.json](../process.json) for PM2, and add your config items to `"env"` -some config have to change: +some config items have to be changed: -- `local`.`storageDir` change to your directory,make sure have read/write permissions. +- `local`.`storageDir` change to your directory, make sure have read/write permissions. - `local`.`downloadUrl` replace `127.0.0.1` to your machine ip. - `common`.`dataDir` change to your directory,make sure have read/write permissions. - `jwt`.`tokenSecret` get the random string from `https://www.grc.com/passwords.htm`, and replace the value `INSERT_RANDOM_TOKEN_KEY`. -- `db` config: `username`,`password`,`host`,`port` change your own's +- `db` config: `username`,`password`,`host`,`port` change to your own -## CONFIGURE for pm2 - -save the file [process.json](https://github.com/lisong/code-push-server/blob/master/docs/process.json) - -some config have to change: - -- `script` if you install code-push-server from npm use `code-push-server`,or use `"your source code dir"/bin/www` -- `CONFIG_FILE` above config.js file path,use absolute path. - -## START SERVICE +## Start Service ```shell $ pm2 start process.json ``` -## RESTART SERVICE +## Restart Service ```shell $ pm2 restart process.json ``` -## STOP SERVICE +## Stop Service ```shell $ pm2 stop process.json ``` -## CHECK SERVICE IS OK +## Check Service is OK ```shell $ curl -I http://YOUR_CODE_PUSH_SERVER_IP:3000/ @@ -117,26 +96,14 @@ Connection: keep-alive - `rolloutClientUniqueIdCache` - `tryLoginTimes` -## UPGRADE - -_from npm package_ +## Upgrade from old version ```shell -$ npm install -g code-push-server@latest +$ npm install -g @shm-open/code-push-server@latest $ code-push-server-db upgrade --dbhost "your mysql host" --dbport "your mysql port" --dbuser "your mysql user" --dbpassword "your mysql password" # upgrade codepush database $ pm2 restart code-push-server # restart service ``` -_from source code_ - -```shell -$ cd /path/to/code-push-server -$ git pull --rebase origin master -$ ./bin/db upgrade --dbhost "your mysql host" --dbport "your mysql port" --dbuser "your mysql user" --dbpassword "your mysql password" -# upgrade codepush database -$ pm2 restart code-push-server # restart service -``` - ## view pm2 logs ```shell @@ -145,83 +112,21 @@ $ pm2 show code-push-server $ tail -f "output file path" ``` -## Support Storage mode - -- local (default) -- qiniu (qiniu) -- s3 (aws) -- oss (aliyun) -- tencentcloud - ## Default listen Host/Port 0.0.0.0/3000 > you can change it in process.json, env: PORT,HOST -## [code-push-cli](https://github.com/Microsoft/code-push) +## [code-push-cli](https://github.com/shm-open/code-push-cli) -> Use code-push-cli manager CodePushServer +> Use code-push-cli manage CodePush Server ```shell -$ npm install code-push-cli@latest -g +$ npm install @shm-open/code-push-cli@latest -g $ code-push login http://YOU_SERVICE_IP:3000 #login in browser account:admin password:123456 ``` -> change admin password eg. +## Change Admin Password ```shell $ curl -X PATCH -H "Authorization: Bearer mytoken" -H "Accept: application/json" -H "Content-Type:application/json" -d '{"oldPassword":"123456","newPassword":"654321"}' http://YOU_SERVICE_IP:3000/users/password ``` - -## config react-native project - -> Follow the react-native-code-push docs, addition iOS add a new entry named CodePushServerURL, whose value is the key of ourself CodePushServer URL. Android use the new CodePush constructor in MainApplication point CodePushServerUrl - -iOS eg. in file Info.plist - -```xml -... -CodePushDeploymentKey -YourCodePushKey -CodePushServerURL -YourCodePushServerUrl -... -``` - -Android eg. in file MainApplication.java - -```java -@Override -protected List getPackages() { - return Arrays.asList( - new MainReactPackage(), - new CodePush( - "YourKey", - MainApplication.this, - BuildConfig.DEBUG, - "YourCodePushServerUrl" - ) - ); -} -``` - -## [cordova-plugin-code-push](https://github.com/Microsoft/cordova-plugin-code-push) for cordova - -```shell -$ cd /path/to/project -$ cordova plugin add cordova-plugin-code-push@latest --save -``` - -## config cordova project - -edit config.xml. add code below. - -```xml - - - - - - - - -``` From 6b1a5d7d8d836ab804f32c3931f4c57bde5f5dde Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 8 Feb 2022 14:41:38 +0800 Subject: [PATCH 153/347] feat: add typescript support --- package-lock.json | 134 ++++++++++++++++++ package.json | 26 ++-- process.json | 4 +- app.js => src/app.js | 4 +- {config => src}/config.js | 0 {core => src/core}/app-error.js | 0 {core => src/core}/config.js | 2 +- {core => src/core}/const.js | 0 {core => src/core}/middleware.js | 0 .../core}/services/account-manager.js | 0 {core => src/core}/services/app-manager.js | 0 {core => src/core}/services/client-manager.js | 0 {core => src/core}/services/collaborators.js | 0 .../core}/services/datacenter-manager.js | 0 {core => src/core}/services/deployments.js | 0 {core => src/core}/services/email-manager.js | 0 .../core}/services/package-manager.js | 0 {core => src/core}/utils/common.js | 0 {core => src/core}/utils/factory.js | 0 {core => src/core}/utils/qetag.js | 0 {core => src/core}/utils/security.js | 0 bin/db => src/db.js | 2 +- {models => src/models}/apps.js | 0 {models => src/models}/collaborators.js | 0 {models => src/models}/deployments.js | 0 {models => src/models}/deployments_history.js | 0 .../models}/deployments_versions.js | 0 {models => src/models}/index.js | 2 +- {models => src/models}/log_report_deploy.js | 0 {models => src/models}/log_report_download.js | 0 {models => src/models}/packages.js | 0 {models => src/models}/packages_diff.js | 0 {models => src/models}/packages_metrics.js | 0 {models => src/models}/user_tokens.js | 0 {models => src/models}/users.js | 0 {models => src/models}/versions.js | 0 {routes => src/routes}/accessKeys.js | 0 {routes => src/routes}/account.js | 0 {routes => src/routes}/apps.js | 0 {routes => src/routes}/auth.js | 0 {routes => src/routes}/index.js | 0 {routes => src/routes}/indexV1.js | 0 {routes => src/routes}/users.js | 0 bin/www => src/www.js | 12 +- tests/api/accessKeys/accessKeys.test.js | 4 +- tests/api/account/account.test.js | 4 +- tests/api/apps/apps.test.js | 4 +- tests/api/apps/release.test.js | 5 +- tests/api/auth/auth.test.js | 5 +- tests/api/index/index.test.js | 2 +- tests/api/init/database.js | 2 +- tests/api/users/users.test.js | 6 +- tsconfig.json | 14 ++ 53 files changed, 187 insertions(+), 45 deletions(-) rename app.js => src/app.js (96%) rename {config => src}/config.js (100%) rename {core => src/core}/app-error.js (100%) rename {core => src/core}/config.js (91%) rename {core => src/core}/const.js (100%) rename {core => src/core}/middleware.js (100%) rename {core => src/core}/services/account-manager.js (100%) rename {core => src/core}/services/app-manager.js (100%) rename {core => src/core}/services/client-manager.js (100%) rename {core => src/core}/services/collaborators.js (100%) rename {core => src/core}/services/datacenter-manager.js (100%) rename {core => src/core}/services/deployments.js (100%) rename {core => src/core}/services/email-manager.js (100%) rename {core => src/core}/services/package-manager.js (100%) rename {core => src/core}/utils/common.js (100%) rename {core => src/core}/utils/factory.js (100%) rename {core => src/core}/utils/qetag.js (100%) rename {core => src/core}/utils/security.js (100%) rename bin/db => src/db.js (99%) rename {models => src/models}/apps.js (100%) rename {models => src/models}/collaborators.js (100%) rename {models => src/models}/deployments.js (100%) rename {models => src/models}/deployments_history.js (100%) rename {models => src/models}/deployments_versions.js (100%) rename {models => src/models}/index.js (91%) rename {models => src/models}/log_report_deploy.js (100%) rename {models => src/models}/log_report_download.js (100%) rename {models => src/models}/packages.js (100%) rename {models => src/models}/packages_diff.js (100%) rename {models => src/models}/packages_metrics.js (100%) rename {models => src/models}/user_tokens.js (100%) rename {models => src/models}/users.js (100%) rename {models => src/models}/versions.js (100%) rename {routes => src/routes}/accessKeys.js (100%) rename {routes => src/routes}/account.js (100%) rename {routes => src/routes}/apps.js (100%) rename {routes => src/routes}/auth.js (100%) rename {routes => src/routes}/index.js (100%) rename {routes => src/routes}/indexV1.js (100%) rename {routes => src/routes}/users.js (100%) rename bin/www => src/www.js (87%) create mode 100644 tsconfig.json diff --git a/package-lock.json b/package-lock.json index 1271d22b..693b6a61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1584,6 +1584,99 @@ "typedarray": "^0.0.6" } }, + "concurrently": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.0.0.tgz", + "integrity": "sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, "conf": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/conf/-/conf-9.0.2.tgz", @@ -2010,6 +2103,12 @@ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" }, + "date-fns": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", + "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", + "dev": true + }, "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -6166,6 +6265,23 @@ "queue-microtask": "^1.2.2" } }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", @@ -6470,6 +6586,12 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -6922,6 +7044,12 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -7019,6 +7147,12 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true + }, "uglify-js": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", diff --git a/package.json b/package.json index 16831a70..6860ab2f 100644 --- a/package.json +++ b/package.json @@ -17,19 +17,22 @@ ], "author": "shihuimiao", "bin": { - "code-push-server": "./bin/www", - "code-push-server-db": "./bin/db" + "code-push-server": "./bin/www.js", + "code-push-server-db": "./bin/db.js" }, "engines": { "node": ">= 6.0", "npm": ">= 3.10.8" }, "scripts": { - "dev": "LOG_LEVEL=debug supervisor ./bin/www", - "start": "node ./bin/www", - "init": "node ./bin/db init", - "upgrade": "node ./bin/db upgrade", - "release": "npm test && standard-version && git push --follow-tags origin master && npm publish", + "dev": "npm run build && concurrently npm:dev:tsc npm:dev:run", + "dev:tsc": "tsc --watch", + "dev:run": "LOG_LEVEL=debug supervisor ./bin/www.js", + "start": "node ./bin/www.js", + "init": "node ./bin/db.js init", + "upgrade": "node ./bin/db.js upgrade", + "build": "rm -rf bin && tsc", + "release": "npm run build && npm test && standard-version && git push --follow-tags origin master && npm publish", "release-docker": "make release-docker", "test": "make test" }, @@ -69,23 +72,20 @@ }, "devDependencies": { "@shm-open/eslint-config-bundle": "1.8.1", + "concurrently": "7.0.0", "mocha": "9.2.0", "should": "13.2.3", "standard-version": "9.3.2", "supertest": "6.2.2", - "supervisor": "0.12.0" + "supervisor": "0.12.0", + "typescript": "4.5.5" }, "files": [ "bin", - "config", - "core", "docs", - "models", "public", - "routes", "sql", "views", - "app.js", "README.md", "LICENSE" ] diff --git a/process.json b/process.json index 0f4709f4..197e8d1a 100644 --- a/process.json +++ b/process.json @@ -4,8 +4,8 @@ "name": "code-push-server", "max_memory_restart": "500M", "script": "code-push-server", - "instances": "max", //开启实例数量,max为cpu核数 - "exec_mode": "cluster", //集群模式,最大提升网站并发 + "instances": "max", + "exec_mode": "cluster", "env": { "NODE_ENV": "production" } diff --git a/app.js b/src/app.js similarity index 96% rename from app.js rename to src/app.js index e4f29962..1c4ca35e 100644 --- a/app.js +++ b/src/app.js @@ -25,13 +25,13 @@ app.use( }), ); // view engine setup -app.set('views', path.join(__dirname, 'views')); +app.set('views', path.join(__dirname, '../views')); app.set('view engine', 'pug'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); -app.use(express.static(path.join(__dirname, 'public'))); +app.use(express.static(path.join(__dirname, '../public'))); logger.debug('use set Access-Control Header'); app.all('*', function (req, res, next) { diff --git a/config/config.js b/src/config.js similarity index 100% rename from config/config.js rename to src/config.js diff --git a/core/app-error.js b/src/core/app-error.js similarity index 100% rename from core/app-error.js rename to src/core/app-error.js diff --git a/core/config.js b/src/core/config.js similarity index 91% rename from core/config.js rename to src/core/config.js index f19a6282..dce5c7b6 100644 --- a/core/config.js +++ b/src/core/config.js @@ -4,7 +4,7 @@ const { setLogTransports, ConsoleTransport, LogLevelFilter, logger } = require(' const env = process.env.NODE_ENV || 'development'; -let CONFIG_PATH = path.join(__dirname, '../config/config.js'); +let CONFIG_PATH = path.join(__dirname, '../config.js'); if (process.env.CONFIG_FILE) { CONFIG_PATH = path.join(__dirname, path.relative(__dirname, process.env.CONFIG_FILE)); } diff --git a/core/const.js b/src/core/const.js similarity index 100% rename from core/const.js rename to src/core/const.js diff --git a/core/middleware.js b/src/core/middleware.js similarity index 100% rename from core/middleware.js rename to src/core/middleware.js diff --git a/core/services/account-manager.js b/src/core/services/account-manager.js similarity index 100% rename from core/services/account-manager.js rename to src/core/services/account-manager.js diff --git a/core/services/app-manager.js b/src/core/services/app-manager.js similarity index 100% rename from core/services/app-manager.js rename to src/core/services/app-manager.js diff --git a/core/services/client-manager.js b/src/core/services/client-manager.js similarity index 100% rename from core/services/client-manager.js rename to src/core/services/client-manager.js diff --git a/core/services/collaborators.js b/src/core/services/collaborators.js similarity index 100% rename from core/services/collaborators.js rename to src/core/services/collaborators.js diff --git a/core/services/datacenter-manager.js b/src/core/services/datacenter-manager.js similarity index 100% rename from core/services/datacenter-manager.js rename to src/core/services/datacenter-manager.js diff --git a/core/services/deployments.js b/src/core/services/deployments.js similarity index 100% rename from core/services/deployments.js rename to src/core/services/deployments.js diff --git a/core/services/email-manager.js b/src/core/services/email-manager.js similarity index 100% rename from core/services/email-manager.js rename to src/core/services/email-manager.js diff --git a/core/services/package-manager.js b/src/core/services/package-manager.js similarity index 100% rename from core/services/package-manager.js rename to src/core/services/package-manager.js diff --git a/core/utils/common.js b/src/core/utils/common.js similarity index 100% rename from core/utils/common.js rename to src/core/utils/common.js diff --git a/core/utils/factory.js b/src/core/utils/factory.js similarity index 100% rename from core/utils/factory.js rename to src/core/utils/factory.js diff --git a/core/utils/qetag.js b/src/core/utils/qetag.js similarity index 100% rename from core/utils/qetag.js rename to src/core/utils/qetag.js diff --git a/core/utils/security.js b/src/core/utils/security.js similarity index 100% rename from core/utils/security.js rename to src/core/utils/security.js diff --git a/bin/db b/src/db.js similarity index 99% rename from bin/db rename to src/db.js index 309132ec..5c05ae92 100755 --- a/bin/db +++ b/src/db.js @@ -7,7 +7,7 @@ var fs = require('fs'); var path = require('path'); var _ = require('lodash'); var mysql = require('mysql2'); -var constConfig = require('../core/const'); +var constConfig = require('./core/const'); var yargs = require('yargs'); var argv = yargs .usage('Usage: $0 [options]') diff --git a/models/apps.js b/src/models/apps.js similarity index 100% rename from models/apps.js rename to src/models/apps.js diff --git a/models/collaborators.js b/src/models/collaborators.js similarity index 100% rename from models/collaborators.js rename to src/models/collaborators.js diff --git a/models/deployments.js b/src/models/deployments.js similarity index 100% rename from models/deployments.js rename to src/models/deployments.js diff --git a/models/deployments_history.js b/src/models/deployments_history.js similarity index 100% rename from models/deployments_history.js rename to src/models/deployments_history.js diff --git a/models/deployments_versions.js b/src/models/deployments_versions.js similarity index 100% rename from models/deployments_versions.js rename to src/models/deployments_versions.js diff --git a/models/index.js b/src/models/index.js similarity index 91% rename from models/index.js rename to src/models/index.js index 92cd13b6..42c36ddf 100644 --- a/models/index.js +++ b/src/models/index.js @@ -5,7 +5,7 @@ var path = require('path'); var Sequelize = require('sequelize'); var basename = path.basename(module.filename); var _ = require('lodash'); -var config = _.get(require(__dirname + '/../core/config'), 'db', {}); +var config = _.get(require('../core/config'), 'db', {}); var db = {}; var sequelize = new Sequelize(config.database, config.username, config.password, config); diff --git a/models/log_report_deploy.js b/src/models/log_report_deploy.js similarity index 100% rename from models/log_report_deploy.js rename to src/models/log_report_deploy.js diff --git a/models/log_report_download.js b/src/models/log_report_download.js similarity index 100% rename from models/log_report_download.js rename to src/models/log_report_download.js diff --git a/models/packages.js b/src/models/packages.js similarity index 100% rename from models/packages.js rename to src/models/packages.js diff --git a/models/packages_diff.js b/src/models/packages_diff.js similarity index 100% rename from models/packages_diff.js rename to src/models/packages_diff.js diff --git a/models/packages_metrics.js b/src/models/packages_metrics.js similarity index 100% rename from models/packages_metrics.js rename to src/models/packages_metrics.js diff --git a/models/user_tokens.js b/src/models/user_tokens.js similarity index 100% rename from models/user_tokens.js rename to src/models/user_tokens.js diff --git a/models/users.js b/src/models/users.js similarity index 100% rename from models/users.js rename to src/models/users.js diff --git a/models/versions.js b/src/models/versions.js similarity index 100% rename from models/versions.js rename to src/models/versions.js diff --git a/routes/accessKeys.js b/src/routes/accessKeys.js similarity index 100% rename from routes/accessKeys.js rename to src/routes/accessKeys.js diff --git a/routes/account.js b/src/routes/account.js similarity index 100% rename from routes/account.js rename to src/routes/account.js diff --git a/routes/apps.js b/src/routes/apps.js similarity index 100% rename from routes/apps.js rename to src/routes/apps.js diff --git a/routes/auth.js b/src/routes/auth.js similarity index 100% rename from routes/auth.js rename to src/routes/auth.js diff --git a/routes/index.js b/src/routes/index.js similarity index 100% rename from routes/index.js rename to src/routes/index.js diff --git a/routes/indexV1.js b/src/routes/indexV1.js similarity index 100% rename from routes/indexV1.js rename to src/routes/indexV1.js diff --git a/routes/users.js b/src/routes/users.js similarity index 100% rename from routes/users.js rename to src/routes/users.js diff --git a/bin/www b/src/www.js similarity index 87% rename from bin/www rename to src/www.js index a8d224ac..4d9f7bbd 100755 --- a/bin/www +++ b/src/www.js @@ -8,10 +8,11 @@ var { logger } = require('kv-logger'); var http = require('http'); var validator = require('validator'); var _ = require('lodash'); -var config = require('../core/config'); -var constConfig = require('../core/const'); +var config = require('./core/config'); +var constConfig = require('./core/const'); +var models = require('./models'); -var app = require('../app'); +var app = require('./app'); /** * Get port from environment and store in Express. @@ -40,12 +41,11 @@ var server = http.createServer(app); /** * Listen on provided port, on all network interfaces. */ -var models = require('../models'); models.Versions.findOne({ where: { type: 1 } }) .then(function (v) { if (!v || v.get('version') != constConfig.CURRENT_DB_VERSION) { throw new Error( - 'Please upgrade your database. usage `npm run upgrade` or `code-push-server-db upgrade`', + 'Please upgrade your database. use `npm run upgrade` or `code-push-server-db upgrade`', ); } server.listen(port, host); @@ -57,7 +57,7 @@ models.Versions.findOne({ where: { type: 1 } }) if (_.startsWith(e.message, 'ER_NO_SUCH_TABLE')) { logger.error( new Error( - `Please upgrade your database. usage bin/db upgrade or code-push-server-db upgrade`, + 'Please upgrade your database. use `npm run upgrade` or `code-push-server-db upgrade`', ), ); } else { diff --git a/tests/api/accessKeys/accessKeys.test.js b/tests/api/accessKeys/accessKeys.test.js index 35cb585b..9591cdd4 100644 --- a/tests/api/accessKeys/accessKeys.test.js +++ b/tests/api/accessKeys/accessKeys.test.js @@ -1,8 +1,6 @@ -var app = require('../../../app'); +var app = require('../../../bin/app'); var request = require('supertest')(app); var should = require('should'); -var security = require('../../../core/utils/security'); -var factory = require('../../../core/utils/factory'); var _ = require('lodash'); describe('api/accessKeys/accessKeys.test.js', function () { diff --git a/tests/api/account/account.test.js b/tests/api/account/account.test.js index c6cc1e13..6d09ab54 100644 --- a/tests/api/account/account.test.js +++ b/tests/api/account/account.test.js @@ -1,8 +1,6 @@ -var app = require('../../../app'); +var app = require('../../../bin/app'); var request = require('supertest')(app); var should = require('should'); -var security = require('../../../core/utils/security'); -var factory = require('../../../core/utils/factory'); var _ = require('lodash'); describe('api/account/account.test.js', function () { diff --git a/tests/api/apps/apps.test.js b/tests/api/apps/apps.test.js index c3315f3f..ffb6b959 100644 --- a/tests/api/apps/apps.test.js +++ b/tests/api/apps/apps.test.js @@ -1,8 +1,6 @@ -var app = require('../../../app'); +var app = require('../../../bin/app'); var request = require('supertest')(app); var should = require('should'); -var security = require('../../../core/utils/security'); -var factory = require('../../../core/utils/factory'); var _ = require('lodash'); describe('api/apps/apps.test.js', function () { diff --git a/tests/api/apps/release.test.js b/tests/api/apps/release.test.js index 1316c5b7..7775bf20 100644 --- a/tests/api/apps/release.test.js +++ b/tests/api/apps/release.test.js @@ -1,10 +1,9 @@ -var app = require('../../../app'); +var app = require('../../../bin/app'); var request = require('supertest')(app); var should = require('should'); var path = require('path'); -var security = require('../../../core/utils/security'); -var factory = require('../../../core/utils/factory'); var _ = require('lodash'); + const SLEEP_TIME = 5000; describe('api/apps/release.test.js', function () { diff --git a/tests/api/auth/auth.test.js b/tests/api/auth/auth.test.js index c8defaa4..12b9f3d3 100644 --- a/tests/api/auth/auth.test.js +++ b/tests/api/auth/auth.test.js @@ -1,9 +1,10 @@ -var app = require('../../../app'); +var app = require('../../../bin/app'); var request = require('supertest')(app); var should = require('should'); -var config = require('../../../core/config'); var _ = require('lodash'); +var config = require('../../../bin/core/config'); + describe('api/auth/test.js', function () { var account = '522539441@qq.com'; var password = '123456'; diff --git a/tests/api/index/index.test.js b/tests/api/index/index.test.js index 2f80ea57..6dee679f 100644 --- a/tests/api/index/index.test.js +++ b/tests/api/index/index.test.js @@ -1,4 +1,4 @@ -var app = require('../../../app'); +var app = require('../../../bin/app'); var request = require('supertest')(app); var should = require('should'); var _ = require('lodash'); diff --git a/tests/api/init/database.js b/tests/api/init/database.js index 833d7194..68a30579 100644 --- a/tests/api/init/database.js +++ b/tests/api/init/database.js @@ -1,4 +1,4 @@ -var config = require('../../../core/config'); +var config = require('../../../bin/core/config'); var mysql = require('mysql2'); var redis = require('redis'); var should = require('should'); diff --git a/tests/api/users/users.test.js b/tests/api/users/users.test.js index b37c5f41..1baf4f97 100644 --- a/tests/api/users/users.test.js +++ b/tests/api/users/users.test.js @@ -1,8 +1,8 @@ -var app = require('../../../app'); +var app = require('../../../bin/app'); var request = require('supertest')(app); var should = require('should'); -var security = require('../../../core/utils/security'); -var factory = require('../../../core/utils/factory'); +var security = require('../../../bin/core/utils/security'); +var factory = require('../../../bin/core/utils/factory'); var _ = require('lodash'); describe('api/users/users.test.js', function () { diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..d141bf3c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "moduleResolution": "node", + "target": "es2020", + "outDir": "bin", + "lib": ["es5", "es2015", "es2016", "es2017", "es2018", "es2019", "es2020"], + "skipLibCheck": true, + "esModuleInterop": true, + "noEmitOnError": true, + "allowSyntheticDefaultImports": true, + "allowJs": true + }, + "include": ["src/**/*.*"] +} From 9f14a9d57d703e92d2184978b6db6f474e1a157d Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 8 Feb 2022 14:43:23 +0800 Subject: [PATCH 154/347] chore(release): 1.2.0 --- CHANGELOG.md | 25 +++++++++++++++++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 797f7e56..3d55646b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,31 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.2.0](https://github.com/shm-open/code-push-server/compare/v1.1.1...v1.2.0) (2022-02-08) + + +### Features + +* add typescript support ([6b1a5d7](https://github.com/shm-open/code-push-server/commit/6b1a5d7d8d836ab804f32c3931f4c57bde5f5dde)) + + +### Bug Fixes + +* add more info logs for account/app management ([4e45c7e](https://github.com/shm-open/code-push-server/commit/4e45c7e651c503383e6bb659397d27b3a3c76809)) +* **deps:** update dependency aws-sdk to v2.1062.0 ([9a62e4a](https://github.com/shm-open/code-push-server/commit/9a62e4a93855b233befedd6fbcd8aec47fd9d61d)) +* **deps:** update dependency body-parser to v1.19.1 ([1173672](https://github.com/shm-open/code-push-server/commit/117367240a63028eebd992161a354d1404827fd6)) +* **deps:** update dependency cos-nodejs-sdk-v5 to v2.11.6 ([4e570d6](https://github.com/shm-open/code-push-server/commit/4e570d646b3bae386280aa02cab6b7f58d504d1a)) +* **deps:** update dependency express to v4.17.2 ([59a9cd3](https://github.com/shm-open/code-push-server/commit/59a9cd3e4a871c38e024986fb46ba98d457dd617)) +* **deps:** update dependency helmet to v5 ([ffff5da](https://github.com/shm-open/code-push-server/commit/ffff5dab25bb001e5772bfe7c189e337fe108aaa)) +* **deps:** update dependency helmet to v5.0.2 ([b601ee7](https://github.com/shm-open/code-push-server/commit/b601ee763f9ed49417ac97f51c50bcded62ce2ca)) +* **deps:** update dependency node-fetch to v2.6.7 ([2bcaa19](https://github.com/shm-open/code-push-server/commit/2bcaa1992f2a2d6e00595728ee4b07edbfb1b727)) +* **deps:** update dependency nodemailer to v6.7.2 ([58a2af0](https://github.com/shm-open/code-push-server/commit/58a2af07a8d23fd2930b4745c28456f50bae16eb)) +* **deps:** update dependency sequelize to v6.12.4 ([5ec26ae](https://github.com/shm-open/code-push-server/commit/5ec26aed33f2eac595ee9e4de26f0eb5dfc28440)) +* **deps:** update dependency sequelize to v6.14.0 ([1786ca2](https://github.com/shm-open/code-push-server/commit/1786ca20b637bc5562aa99b30b4404bbbb89a651)) +* **deps:** update dependency yargs to v17.3.1 ([a099f8c](https://github.com/shm-open/code-push-server/commit/a099f8c162a84341b543eeba3683f7afaf067a00)) +* replace log4js with simple kv-logger ([7e1829e](https://github.com/shm-open/code-push-server/commit/7e1829edac2886e1370590696b7815fb922b7b47)) +* simplify redis config ([deefe90](https://github.com/shm-open/code-push-server/commit/deefe90fd373fd3a7ce0a9d35321b7f32eed724e)) + ### [1.1.1](https://github.com/shm-open/code-push-server/compare/v1.1.0...v1.1.1) (2021-11-23) diff --git a/package-lock.json b/package-lock.json index 693b6a61..360febdd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "1.1.1", + "version": "1.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6860ab2f..e6a0c50a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "1.1.1", + "version": "1.2.0", "license": "MIT", "repository": { "type": "git", From e3ad51435774b7ea741965d2af4c6b7ea45abb71 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 8 Feb 2022 14:59:31 +0800 Subject: [PATCH 155/347] chore: gitignore tsc generated bin/ --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ba2fa996..46b2fa01 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ pids *.pid *.seed *.DS_Store +bin/ # deps node_modules/ From 76d8898e563bbf52361b87b615bf7c13f40409e0 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 8 Feb 2022 18:14:07 +0800 Subject: [PATCH 156/347] refactor: turn top level app/www to ts BREAKING CHANGE: drop CONFIG_FILE support, please use env variable config items --- docs/install-server.md | 2 +- package-lock.json | 97 ++++++++++++++++++++++++- package.json | 6 +- src/{app.js => app.ts} | 25 +++---- src/core/config.js | 30 -------- src/{config.js => core/config.ts} | 25 +++++-- src/core/middleware.js | 2 +- src/core/services/account-manager.js | 2 +- src/core/services/client-manager.js | 2 +- src/core/services/datacenter-manager.js | 6 +- src/core/services/email-manager.js | 2 +- src/core/services/package-manager.js | 1 - src/core/utils/common.js | 2 +- src/core/utils/factory.js | 5 +- src/{db.js => db.ts} | 17 +++-- src/models/index.js | 9 ++- src/routes/apps.js | 11 ++- src/routes/auth.js | 2 +- src/{www.js => www.ts} | 20 ++--- tests/api/accessKeys/accessKeys.test.js | 8 +- tests/api/account/account.test.js | 8 +- tests/api/apps/apps.test.js | 8 +- tests/api/apps/release.test.js | 10 +-- tests/api/auth/auth.test.js | 10 +-- tests/api/index/index.test.js | 8 +- tests/api/init/database.js | 3 +- tests/api/users/users.test.js | 13 ++-- tsconfig.json | 1 + 28 files changed, 213 insertions(+), 122 deletions(-) rename src/{app.js => app.ts} (86%) delete mode 100644 src/core/config.js rename src/{config.js => core/config.ts} (91%) rename src/{db.js => db.ts} (96%) rename src/{www.js => www.ts} (89%) diff --git a/docs/install-server.md b/docs/install-server.md index 3d5f65ae..c1091871 100644 --- a/docs/install-server.md +++ b/docs/install-server.md @@ -35,7 +35,7 @@ $ code-push-server-db init --dbhost "your mysql host" --dbport "your mysql port" ## Configure code-push-server -check out the supported config items in [config.js](../src/config.js) +check out the supported config items in [config.ts](../src/core/config.ts) save the file [process.json](../process.json) for PM2, and add your config items to `"env"` diff --git a/package-lock.json b/package-lock.json index 360febdd..814af5f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -564,6 +564,34 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cookie-parser": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.2.tgz", + "integrity": "sha512-uwcY8m6SDQqciHsqcKDGbo10GdasYsPCYkH3hVegj9qAah6pX5HivOnOuI3WYmyQMnOATV39zv/Ybs0bC/6iVg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, "@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -572,6 +600,29 @@ "@types/ms": "*" } }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -584,11 +635,23 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "@types/lodash": { + "version": "4.14.178", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", + "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", + "dev": true + }, "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, "@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", @@ -611,6 +674,34 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/validator": { + "version": "13.7.1", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.1.tgz", + "integrity": "sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q==", + "dev": true + }, "@types/yauzl": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", @@ -4538,9 +4629,9 @@ "dev": true }, "kv-logger": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/kv-logger/-/kv-logger-0.4.0.tgz", - "integrity": "sha512-9zj0/lW8dyj/Mbi8cfDIeXRzyLE52RlU17uSL4Z+aUwTvhZN2c3c2bAgI02iacsivxXartiefCsLdlND8zzdmg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/kv-logger/-/kv-logger-0.4.1.tgz", + "integrity": "sha512-+DuHtrVBcQDU57s8edqkUon3mWgm0lpbvFmPPLCcecQIHWA6QHqPshMZ099qxUdQSSO59B8OEKK4sYYySonDYw==" }, "language-subtag-registry": { "version": "0.3.21", diff --git a/package.json b/package.json index e6a0c50a..184b54fd 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "helmet": "5.0.2", "jschardet": "3.0.0", "jsonwebtoken": "8.5.1", - "kv-logger": "0.4.0", + "kv-logger": "0.4.1", "lodash": "4.17.21", "moment": "2.29.1", "mysql2": "2.3.3", @@ -72,6 +72,10 @@ }, "devDependencies": { "@shm-open/eslint-config-bundle": "1.8.1", + "@types/body-parser": "1.19.2", + "@types/cookie-parser": "1.4.2", + "@types/lodash": "4.14.178", + "@types/validator": "13.7.1", "concurrently": "7.0.0", "mocha": "9.2.0", "should": "13.2.3", diff --git a/src/app.js b/src/app.ts similarity index 86% rename from src/app.js rename to src/app.ts index 1c4ca35e..1471a201 100644 --- a/src/app.js +++ b/src/app.ts @@ -1,13 +1,14 @@ -const express = require('express'); -const path = require('path'); -const cookieParser = require('cookie-parser'); -const bodyParser = require('body-parser'); -const helmet = require('helmet'); -const _ = require('lodash'); -const fs = require('fs'); -const { logger } = require('kv-logger'); +import express from 'express'; +import path from 'path'; +import cookieParser from 'cookie-parser'; +import bodyParser from 'body-parser'; +import helmet from 'helmet'; +import _ from 'lodash'; +import fs from 'fs'; +import { logger } from 'kv-logger'; + +import { config } from './core/config'; -const config = require('./core/config'); const routes = require('./routes/index'); const indexV1 = require('./routes/indexV1'); const auth = require('./routes/auth'); @@ -17,7 +18,7 @@ const users = require('./routes/users'); const apps = require('./routes/apps'); const { AppError, NotFound } = require('./core/app-error'); -const app = express(); +export const app = express(); app.use( helmet({ @@ -58,7 +59,7 @@ if (_.get(config, 'common.storageType') === 'local') { } try { logger.debug('checking storageDir fs.W_OK | fs.R_OK'); - fs.accessSync(localStorageDir, fs.W_OK | fs.R_OK); + fs.accessSync(localStorageDir, fs.constants.W_OK | fs.constants.R_OK); logger.debug('storageDir fs.W_OK | fs.R_OK is ok'); } catch (e) { logger.error(e); @@ -96,5 +97,3 @@ app.use(function (err, req, res, next) { logger.error(err); } }); - -module.exports = app; diff --git a/src/core/config.js b/src/core/config.js deleted file mode 100644 index dce5c7b6..00000000 --- a/src/core/config.js +++ /dev/null @@ -1,30 +0,0 @@ -const _ = require('lodash'); -const path = require('path'); -const { setLogTransports, ConsoleTransport, LogLevelFilter, logger } = require('kv-logger'); - -const env = process.env.NODE_ENV || 'development'; - -let CONFIG_PATH = path.join(__dirname, '../config.js'); -if (process.env.CONFIG_FILE) { - CONFIG_PATH = path.join(__dirname, path.relative(__dirname, process.env.CONFIG_FILE)); -} - -const config = require(CONFIG_PATH); -if (_.isEmpty(config)) { - throw new Error(`config is {}, check the config`); -} - -// config logger -setLogTransports([ - new LogLevelFilter( - new ConsoleTransport(_.get(config, 'log.format')), - _.get(config, 'log.level'), - ), -]); - -logger.info(`use config`, { - config: CONFIG_PATH, - env: env, -}); - -module.exports = config; diff --git a/src/config.js b/src/core/config.ts similarity index 91% rename from src/config.js rename to src/core/config.ts index 2043289f..3d6105e7 100644 --- a/src/config.js +++ b/src/core/config.ts @@ -1,10 +1,11 @@ -const os = require('os'); +import os from 'os'; +import { setLogTransports, ConsoleTransport, LogLevelFilter, logger } from 'kv-logger'; -function toBool(str) { +function toBool(str: string): boolean { return str === 'true' || str === '1'; } -function toNumber(str, defaultValue) { +function toNumber(str: string, defaultValue: number): number { var num = Number(str); if (Number.isNaN(num)) { return defaultValue; @@ -12,7 +13,7 @@ function toNumber(str, defaultValue) { return num; } -const config = { +export const config = { // Config for log log: { // debug, info, warn, error @@ -148,6 +149,18 @@ const config = { return Math.max(options.attempt * 100, 3000); }, }, -}; +} as const; -module.exports = config; +// config logger - make sure its ready before anyting else +setLogTransports([ + new LogLevelFilter( + new ConsoleTransport(config.log.format as 'text' | 'json'), + config.log.level as 'error' | 'warn' | 'info' | 'debug', + ), +]); + +const env = process.env.NODE_ENV || 'development'; +logger.info(`use config`, { + env: env, + storageType: config.common.storageType, +}); diff --git a/src/core/middleware.js b/src/core/middleware.js index 808b68ce..6a18a76c 100644 --- a/src/core/middleware.js +++ b/src/core/middleware.js @@ -4,6 +4,7 @@ var security = require('../core/utils/security'); var models = require('../models'); var moment = require('moment'); var AppError = require('./app-error'); +const { config } = require('../core/config'); var middleware = module.exports; @@ -42,7 +43,6 @@ var checkAccessToken = function (accessToken) { if (_.isEmpty(accessToken)) { return reject(new AppError.Unauthorized()); } - var config = require('../core/config'); var tokenSecret = _.get(config, 'jwt.tokenSecret'); var jwt = require('jsonwebtoken'); try { diff --git a/src/core/services/account-manager.js b/src/core/services/account-manager.js index 30bc725c..12c8a634 100644 --- a/src/core/services/account-manager.js +++ b/src/core/services/account-manager.js @@ -7,7 +7,7 @@ var security = require('../utils/security'); var factory = require('../utils/factory'); var moment = require('moment'); var EmailManager = require('./email-manager'); -var config = require('../config'); +var { config } = require('../config'); var AppError = require('../app-error'); var proto = (module.exports = function () { diff --git a/src/core/services/client-manager.js b/src/core/services/client-manager.js index bb36a8fd..e2631f56 100644 --- a/src/core/services/client-manager.js +++ b/src/core/services/client-manager.js @@ -4,7 +4,7 @@ var _ = require('lodash'); var common = require('../utils/common'); var factory = require('../utils/factory'); var AppError = require('../app-error'); -var config = require('../config'); +var { config } = require('../config'); var { logger } = require('kv-logger'); var Sequelize = require('sequelize'); diff --git a/src/core/services/datacenter-manager.js b/src/core/services/datacenter-manager.js index bd8ecd9b..b6ba4755 100644 --- a/src/core/services/datacenter-manager.js +++ b/src/core/services/datacenter-manager.js @@ -9,6 +9,7 @@ const CONTENTS_NAME = 'contents'; var AppError = require('../app-error'); var { logger } = require('kv-logger'); var path = require('path'); +const { config } = require('../config'); var proto = (module.exports = function () { function DataCenterManager() {} @@ -17,10 +18,7 @@ var proto = (module.exports = function () { }); proto.getDataDir = function () { - var dataDir = _.get(require('../config'), 'common.dataDir', {}); - if (_.isEmpty(dataDir)) { - dataDir = os.tmpdir(); - } + var dataDir = _.get(config, 'common.dataDir', {}); return dataDir; }; diff --git a/src/core/services/email-manager.js b/src/core/services/email-manager.js index 79be09c1..b6440209 100644 --- a/src/core/services/email-manager.js +++ b/src/core/services/email-manager.js @@ -1,7 +1,7 @@ 'use strict'; var _ = require('lodash'); var nodemailer = require('nodemailer'); -var config = require('../config'); +var { config } = require('../config'); var proto = (module.exports = function () { function EmailManager() {} diff --git a/src/core/services/package-manager.js b/src/core/services/package-manager.js index ec5a2428..72c096a1 100644 --- a/src/core/services/package-manager.js +++ b/src/core/services/package-manager.js @@ -2,7 +2,6 @@ var models = require('../../models'); var security = require('../utils/security'); var _ = require('lodash'); -var qetag = require('../utils/qetag'); var formidable = require('formidable'); var yazl = require('yazl'); var fs = require('fs'); diff --git a/src/core/utils/common.js b/src/core/utils/common.js index b0aa9f37..75c60c90 100644 --- a/src/core/utils/common.js +++ b/src/core/utils/common.js @@ -12,7 +12,7 @@ const util = require('util'); const streamPipeline = util.promisify(require('stream').pipeline); const fetch = require('node-fetch'); -var config = require('../config'); +const { config } = require('../config'); var AppError = require('../app-error'); var { logger } = require('kv-logger'); diff --git a/src/core/utils/factory.js b/src/core/utils/factory.js index 8811e97f..25758cda 100644 --- a/src/core/utils/factory.js +++ b/src/core/utils/factory.js @@ -1,14 +1,13 @@ 'use strict'; const util = require('util'); const redis = require('redis'); -const config = require('../config'); -const _ = require('lodash'); +const { config } = require('../config'); const factory = {}; module.exports = factory; factory.getRedisClient = function () { - const client = redis.createClient(_.get(config, 'redis')); + const client = redis.createClient(config.redis); return { del: util.promisify(client.del).bind(client), exists: util.promisify(client.exists).bind(client), diff --git a/src/db.js b/src/db.ts similarity index 96% rename from src/db.js rename to src/db.ts index 5c05ae92..e628216e 100755 --- a/src/db.js +++ b/src/db.ts @@ -3,12 +3,14 @@ /** * Module dependencies. */ -var fs = require('fs'); -var path = require('path'); -var _ = require('lodash'); -var mysql = require('mysql2'); -var constConfig = require('./core/const'); -var yargs = require('yargs'); +import fs from 'fs'; +import path from 'path'; +import _ from 'lodash'; +import mysql from 'mysql2'; +import yargs from 'yargs'; + +const constConfig = require('./core/const'); + var argv = yargs .usage('Usage: $0 [options]') .command('init', '初始化数据库', { @@ -40,6 +42,7 @@ var argv = yargs .help('h') .alias('h', 'help') .parseSync(); + var command = argv._[0]; var dbname = argv.dbname ? argv.dbname : 'codepush'; var dbhost = argv.dbhost ? argv.dbhost : 'localhost'; @@ -106,7 +109,7 @@ if (command === 'init') { connection.connect(); } catch (e) { console.error('connect mysql error, check params', e); - return; + process.exit(1); } var version_no = '0.0.1'; diff --git a/src/models/index.js b/src/models/index.js index 42c36ddf..5ad653f5 100644 --- a/src/models/index.js +++ b/src/models/index.js @@ -5,10 +5,15 @@ var path = require('path'); var Sequelize = require('sequelize'); var basename = path.basename(module.filename); var _ = require('lodash'); -var config = _.get(require('../core/config'), 'db', {}); +const { config } = require('../core/config'); var db = {}; -var sequelize = new Sequelize(config.database, config.username, config.password, config); +var sequelize = new Sequelize( + config.db.database, + config.db.username, + config.db.password, + config.db, +); fs.readdirSync(__dirname) .filter(function (file) { diff --git a/src/routes/apps.js b/src/routes/apps.js index 878183fc..a69fb3df 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -10,8 +10,8 @@ var AppManager = require('../core/services/app-manager'); var PackageManager = require('../core/services/package-manager'); var AppError = require('../core/app-error'); var common = require('../core/utils/common'); -var config = require('../core/config'); -var { logger } = require('kv-logger'); +const { config } = require('../core/config'); +const { logger } = require('kv-logger'); function delay(ms) { return new Promise(function (resolve) { @@ -283,6 +283,12 @@ router.post( var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); var uid = req.users.id; + + logger.info('try to release', { + uid, + appName, + deploymentName, + }); var deployments = new Deployments(); var packageManager = new PackageManager(); accountManager @@ -352,6 +358,7 @@ router.post( }) .catch((e) => { if (e instanceof AppError.AppError) { + logger.warn(e.message); res.status(406).send(e.message); } else { next(e); diff --git a/src/routes/auth.js b/src/routes/auth.js index 0177ebfa..4d21ed88 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -4,7 +4,7 @@ const validator = require('validator'); const { logger } = require('kv-logger'); const jwt = require('jsonwebtoken'); -const config = require('../core/config'); +const { config } = require('../core/config'); const router = express.Router(); diff --git a/src/www.js b/src/www.ts similarity index 89% rename from src/www.js rename to src/www.ts index 4d9f7bbd..cb458fd5 100755 --- a/src/www.js +++ b/src/www.ts @@ -4,16 +4,16 @@ * Module dependencies. */ -var { logger } = require('kv-logger'); -var http = require('http'); -var validator = require('validator'); -var _ = require('lodash'); -var config = require('./core/config'); +import { logger } from 'kv-logger'; +import http from 'http'; +import validator from 'validator'; +import _ from 'lodash'; + +import { app } from './app'; + var constConfig = require('./core/const'); var models = require('./models'); -var app = require('./app'); - /** * Get port from environment and store in Express. */ @@ -27,7 +27,7 @@ if (process.env.HOST) { logger.debug(process.env.HOST + ' valid'); host = process.env.HOST; } else { - logger.warn('process.env.HOST ' + process.env.HOST + ' invalid, use 0.0.0.0 instead'); + logger.warn('process.env.HOST ' + process.env.HOST + ' is invalid, use 0.0.0.0 instead'); } } app.set('port', port); @@ -36,7 +36,7 @@ app.set('port', port); * Create HTTP server. */ -var server = http.createServer(app); +const server = http.createServer(app); /** * Listen on provided port, on all network interfaces. @@ -70,7 +70,7 @@ models.Versions.findOne({ where: { type: 1 } }) * Normalize a port into a number, string, or false. */ -function normalizePort(val) { +function normalizePort(val): number | string | boolean { var port = parseInt(val, 10); if (isNaN(port)) { diff --git a/tests/api/accessKeys/accessKeys.test.js b/tests/api/accessKeys/accessKeys.test.js index 9591cdd4..eb9266ab 100644 --- a/tests/api/accessKeys/accessKeys.test.js +++ b/tests/api/accessKeys/accessKeys.test.js @@ -1,7 +1,7 @@ -var app = require('../../../bin/app'); -var request = require('supertest')(app); -var should = require('should'); -var _ = require('lodash'); +const { app } = require('../../../bin/app'); +const request = require('supertest')(app); +const should = require('should'); +const _ = require('lodash'); describe('api/accessKeys/accessKeys.test.js', function () { var account = '522539441@qq.com'; diff --git a/tests/api/account/account.test.js b/tests/api/account/account.test.js index 6d09ab54..31bd118c 100644 --- a/tests/api/account/account.test.js +++ b/tests/api/account/account.test.js @@ -1,7 +1,7 @@ -var app = require('../../../bin/app'); -var request = require('supertest')(app); -var should = require('should'); -var _ = require('lodash'); +const { app } = require('../../../bin/app'); +const request = require('supertest')(app); +const should = require('should'); +const _ = require('lodash'); describe('api/account/account.test.js', function () { var account = '522539441@qq.com'; diff --git a/tests/api/apps/apps.test.js b/tests/api/apps/apps.test.js index ffb6b959..ea7b7fc6 100644 --- a/tests/api/apps/apps.test.js +++ b/tests/api/apps/apps.test.js @@ -1,7 +1,7 @@ -var app = require('../../../bin/app'); -var request = require('supertest')(app); -var should = require('should'); -var _ = require('lodash'); +const { app } = require('../../../bin/app'); +const request = require('supertest')(app); +const should = require('should'); +const _ = require('lodash'); describe('api/apps/apps.test.js', function () { var account = '522539441@qq.com'; diff --git a/tests/api/apps/release.test.js b/tests/api/apps/release.test.js index 7775bf20..66fdc6f1 100644 --- a/tests/api/apps/release.test.js +++ b/tests/api/apps/release.test.js @@ -1,8 +1,8 @@ -var app = require('../../../bin/app'); -var request = require('supertest')(app); -var should = require('should'); -var path = require('path'); -var _ = require('lodash'); +const { app } = require('../../../bin/app'); +const request = require('supertest')(app); +const should = require('should'); +const path = require('path'); +const _ = require('lodash'); const SLEEP_TIME = 5000; diff --git a/tests/api/auth/auth.test.js b/tests/api/auth/auth.test.js index 12b9f3d3..8c40ae87 100644 --- a/tests/api/auth/auth.test.js +++ b/tests/api/auth/auth.test.js @@ -1,9 +1,9 @@ -var app = require('../../../bin/app'); -var request = require('supertest')(app); -var should = require('should'); -var _ = require('lodash'); +const { app } = require('../../../bin/app'); +const request = require('supertest')(app); +const should = require('should'); +const _ = require('lodash'); -var config = require('../../../bin/core/config'); +const { config } = require('../../../bin/core/config'); describe('api/auth/test.js', function () { var account = '522539441@qq.com'; diff --git a/tests/api/index/index.test.js b/tests/api/index/index.test.js index 6dee679f..8d055011 100644 --- a/tests/api/index/index.test.js +++ b/tests/api/index/index.test.js @@ -1,7 +1,7 @@ -var app = require('../../../bin/app'); -var request = require('supertest')(app); -var should = require('should'); -var _ = require('lodash'); +const { app } = require('../../../bin/app'); +const request = require('supertest')(app); +const should = require('should'); +const _ = require('lodash'); describe('api/index/index.test.js', function () { var account = '522539441@qq.com'; diff --git a/tests/api/init/database.js b/tests/api/init/database.js index 68a30579..52a881d7 100644 --- a/tests/api/init/database.js +++ b/tests/api/init/database.js @@ -1,10 +1,11 @@ -var config = require('../../../bin/core/config'); var mysql = require('mysql2'); var redis = require('redis'); var should = require('should'); var fs = require('fs'); var path = require('path'); +const { config } = require('../../../bin/core/config'); + describe('api/init/database.js', function () { describe('create database', function (done) { it('should create database successful', function (done) { diff --git a/tests/api/users/users.test.js b/tests/api/users/users.test.js index 1baf4f97..c2259aeb 100644 --- a/tests/api/users/users.test.js +++ b/tests/api/users/users.test.js @@ -1,9 +1,10 @@ -var app = require('../../../bin/app'); -var request = require('supertest')(app); -var should = require('should'); -var security = require('../../../bin/core/utils/security'); -var factory = require('../../../bin/core/utils/factory'); -var _ = require('lodash'); +const { app } = require('../../../bin/app'); +const request = require('supertest')(app); +const should = require('should'); +const _ = require('lodash'); + +const security = require('../../../bin/core/utils/security'); +const factory = require('../../../bin/core/utils/factory'); describe('api/users/users.test.js', function () { var accountExist = 'lisong2010@gmail.com'; diff --git a/tsconfig.json b/tsconfig.json index d141bf3c..e5373471 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { "moduleResolution": "node", + "module": "commonjs", "target": "es2020", "outDir": "bin", "lib": ["es5", "es2015", "es2016", "es2017", "es2018", "es2019", "es2020"], From e3bb1e4f223f9a43430318fe20fc1af759c30721 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 8 Feb 2022 13:03:48 +0000 Subject: [PATCH 157/347] fix(deps): update dependency sequelize to v6.16.0 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 814af5f1..a16e5e05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4180,9 +4180,9 @@ "dev": true }, "inflection": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.1.tgz", - "integrity": "sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", + "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==" }, "inflight": { "version": "1.0.6", @@ -6468,9 +6468,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.14.0.tgz", - "integrity": "sha512-rgfJFixBwnrxdouIlYS1G0nTo2xj+Gyn7EDn/miE6r5xCzN3EdjtbNrDXapLHNZxgKfu7hZHLzZvwl3DbfhM6g==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.16.0.tgz", + "integrity": "sha512-t0RRopzm4EN+nWrkbMt+EvND8pQcwqyPb/8M3k2wJgiMqNZy2X998VSw1SKhk3YzoNV2Ftdrqqy/NXB9th//JQ==", "requires": { "@types/debug": "^4.1.7", "debug": "^4.3.3", diff --git a/package.json b/package.json index 184b54fd..a98b70ae 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "3.1.2", - "sequelize": "6.14.0", + "sequelize": "6.16.0", "slash": "3.0.0", "upyun": "3.4.4", "validator": "13.7.0", From 7dfe67e748c1d5e6440af14fdc630879312c9a70 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 9 Feb 2022 10:13:32 +0800 Subject: [PATCH 158/347] refactor: turn models/ to ts --- package-lock.json | 50 +++++++++++ package.json | 4 + src/core/config.ts | 2 +- src/core/middleware.js | 14 +-- src/core/services/account-manager.js | 29 ++++--- src/core/services/app-manager.js | 84 +++++++++--------- src/core/services/client-manager.js | 71 +++++++-------- src/core/services/collaborators.js | 16 ++-- src/core/services/datacenter-manager.js | 15 ++-- src/core/services/deployments.js | 52 ++++++----- src/core/services/email-manager.js | 7 +- src/core/services/package-manager.js | 110 ++++++++++++------------ src/core/utils/common.js | 23 +++-- src/core/utils/factory.js | 6 +- src/models/apps.js | 28 ------ src/models/apps.ts | 37 ++++++++ src/models/collaborators.js | 35 -------- src/models/collaborators.ts | 42 +++++++++ src/models/deployments.js | 50 ----------- src/models/deployments.ts | 59 +++++++++++++ src/models/deployments_history.js | 25 ------ src/models/deployments_history.ts | 30 +++++++ src/models/deployments_versions.js | 29 ------- src/models/deployments_versions.ts | 37 ++++++++ src/models/index.js | 36 -------- src/models/index.ts | 9 ++ src/models/log_report_deploy.js | 28 ------ src/models/log_report_deploy.ts | 36 ++++++++ src/models/log_report_download.js | 25 ------ src/models/log_report_download.ts | 30 +++++++ src/models/packages.js | 39 --------- src/models/packages.ts | 57 ++++++++++++ src/models/packages_diff.js | 28 ------ src/models/packages_diff.ts | 35 ++++++++ src/models/packages_metrics.js | 30 ------- src/models/packages_metrics.ts | 37 ++++++++ src/models/user_tokens.js | 31 ------- src/models/user_tokens.ts | 40 +++++++++ src/models/users.js | 28 ------ src/models/users.ts | 36 ++++++++ src/models/versions.js | 24 ------ src/models/versions.ts | 27 ++++++ src/routes/accessKeys.js | 14 +-- src/routes/apps.js | 16 ++-- src/routes/auth.js | 12 +-- src/routes/users.js | 17 ++-- src/www.ts | 4 +- tests/api/init/database.js | 10 +-- 48 files changed, 833 insertions(+), 671 deletions(-) delete mode 100644 src/models/apps.js create mode 100644 src/models/apps.ts delete mode 100644 src/models/collaborators.js create mode 100644 src/models/collaborators.ts delete mode 100644 src/models/deployments.js create mode 100644 src/models/deployments.ts delete mode 100644 src/models/deployments_history.js create mode 100644 src/models/deployments_history.ts delete mode 100644 src/models/deployments_versions.js create mode 100644 src/models/deployments_versions.ts delete mode 100644 src/models/index.js create mode 100644 src/models/index.ts delete mode 100644 src/models/log_report_deploy.js create mode 100644 src/models/log_report_deploy.ts delete mode 100644 src/models/log_report_download.js create mode 100644 src/models/log_report_download.ts delete mode 100644 src/models/packages.js create mode 100644 src/models/packages.ts delete mode 100644 src/models/packages_diff.js create mode 100644 src/models/packages_diff.ts delete mode 100644 src/models/packages_metrics.js create mode 100644 src/models/packages_metrics.ts delete mode 100644 src/models/user_tokens.js create mode 100644 src/models/user_tokens.ts delete mode 100644 src/models/users.js create mode 100644 src/models/users.ts delete mode 100644 src/models/versions.js create mode 100644 src/models/versions.ts diff --git a/package-lock.json b/package-lock.json index a16e5e05..313103ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -623,6 +623,15 @@ "@types/range-parser": "*" } }, + "@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -635,6 +644,15 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "@types/jsonwebtoken": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", + "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/lodash": { "version": "4.14.178", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", @@ -668,6 +686,38 @@ "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-9.4.7.tgz", "integrity": "sha1-V9gc2YcZ3yyd4Rjy1fOxEg3NcnU=" }, + "@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/nodemailer": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.4.tgz", + "integrity": "sha512-Ksw4t7iliXeYGvIQcSIgWQ5BLuC/mljIEbjf615svhZL10PE9t+ei8O9gDaD3FPCasUJn9KTLwz2JFJyiiyuqw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", diff --git a/package.json b/package.json index a98b70ae..20da6cc3 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,11 @@ "@shm-open/eslint-config-bundle": "1.8.1", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", + "@types/fs-extra": "9.0.13", + "@types/jsonwebtoken": "8.5.8", "@types/lodash": "4.14.178", + "@types/node-fetch": "2.5.12", + "@types/nodemailer": "6.4.4", "@types/validator": "13.7.1", "concurrently": "7.0.0", "mocha": "9.2.0", diff --git a/src/core/config.ts b/src/core/config.ts index 3d6105e7..2ae36c64 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -27,7 +27,7 @@ export const config = { password: process.env.RDS_PASSWORD || 'password', database: process.env.RDS_DATABASE || 'codepush', host: process.env.RDS_HOST || '127.0.0.1', - port: process.env.RDS_PORT || 3306, + port: toNumber(process.env.RDS_PORT, 3306), dialect: 'mysql', logging: false, }, diff --git a/src/core/middleware.js b/src/core/middleware.js index 6a18a76c..bd0d222b 100644 --- a/src/core/middleware.js +++ b/src/core/middleware.js @@ -1,16 +1,20 @@ 'use strict'; + +import { UserTokens } from '../models/user_tokens'; +import { Users } from '../models/users'; +import { config } from '../core/config'; + var _ = require('lodash'); var security = require('../core/utils/security'); -var models = require('../models'); + var moment = require('moment'); var AppError = require('./app-error'); -const { config } = require('../core/config'); var middleware = module.exports; var checkAuthToken = function (authToken) { var objToken = security.parseToken(authToken); - return models.Users.findOne({ + return Users.findOne({ where: { identical: objToken.identical }, }) .then((users) => { @@ -18,7 +22,7 @@ var checkAuthToken = function (authToken) { throw new AppError.Unauthorized(); } var Sequelize = require('sequelize'); - return models.UserTokens.findOne({ + return UserTokens.findOne({ where: { tokens: authToken, uid: users.id, @@ -53,7 +57,7 @@ var checkAccessToken = function (accessToken) { var uid = _.get(authData, 'uid', null); var hash = _.get(authData, 'hash', null); if (parseInt(uid) > 0) { - return models.Users.findOne({ + return Users.findOne({ where: { id: uid }, }) .then((users) => { diff --git a/src/core/services/account-manager.js b/src/core/services/account-manager.js index 12c8a634..c78c897f 100644 --- a/src/core/services/account-manager.js +++ b/src/core/services/account-manager.js @@ -1,5 +1,9 @@ 'use strict'; -var models = require('../../models'); +import { Users } from '../../models/users'; +import { UserTokens } from '../../models/user_tokens'; +import { findCollaboratorsByAppNameAndUid } from '../../models/collaborators'; +import { config } from '../config'; + var _ = require('lodash'); var validator = require('validator'); var { logger } = require('kv-logger'); @@ -7,7 +11,6 @@ var security = require('../utils/security'); var factory = require('../utils/factory'); var moment = require('moment'); var EmailManager = require('./email-manager'); -var { config } = require('../config'); var AppError = require('../app-error'); var proto = (module.exports = function () { @@ -41,11 +44,11 @@ proto.ownerCan = function (uid, appName) { }; proto.getCollaborator = function (uid, appName) { - return models.Collaborators.findByAppNameAndUid(uid, appName); + return findCollaboratorsByAppNameAndUid(uid, appName); }; proto.findUserByEmail = function (email) { - return models.Users.findOne({ where: { email: email } }).then((data) => { + return Users.findOne({ where: { email: email } }).then((data) => { if (_.isEmpty(data)) { throw new AppError.AppError(email + ' does not exist.'); } else { @@ -55,7 +58,7 @@ proto.findUserByEmail = function (email) { }; proto.getAllAccessKeyByUid = function (uid) { - return models.UserTokens.findAll({ + return UserTokens.findAll({ where: { uid: uid }, order: [['id', 'DESC']], }).then((tokens) => { @@ -73,13 +76,13 @@ proto.getAllAccessKeyByUid = function (uid) { }; proto.isExsitAccessKeyName = function (uid, friendlyName) { - return models.UserTokens.findOne({ + return UserTokens.findOne({ where: { uid: uid, name: friendlyName }, }); }; proto.createAccessKey = function (uid, newAccessKey, ttl, friendlyName, createdBy, description) { - return models.UserTokens.create({ + return UserTokens.create({ uid: uid, name: friendlyName, tokens: newAccessKey, @@ -108,7 +111,7 @@ proto.login = function (account, password) { where = { username: account }; } var tryLoginTimes = _.get(config, 'common.tryLoginTimes', 0); - return models.Users.findOne({ where: where }) + return Users.findOne({ where: where }) .then((users) => { if (_.isEmpty(users)) { throw new AppError.AppError('您输入的邮箱或密码有误'); @@ -167,7 +170,7 @@ proto.sendRegisterCode = function (email) { if (_.isEmpty(email)) { return Promise.reject(new AppError.AppError('请您输入邮箱地址')); } - return models.Users.findOne({ where: { email: email } }) + return Users.findOne({ where: { email: email } }) .then((u) => { if (u) { throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); @@ -192,7 +195,7 @@ proto.sendRegisterCode = function (email) { }; proto.checkRegisterCode = function (email, token) { - return models.Users.findOne({ where: { email: email } }) + return Users.findOne({ where: { email: email } }) .then((u) => { if (u) { throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); @@ -223,7 +226,7 @@ proto.checkRegisterCode = function (email, token) { }; proto.register = function (email, password) { - return models.Users.findOne({ where: { email: email } }) + return Users.findOne({ where: { email: email } }) .then((u) => { if (u) { throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); @@ -231,7 +234,7 @@ proto.register = function (email, password) { }) .then(() => { var identical = security.randToken(9); - return models.Users.create({ + return Users.create({ email: email, password: security.passwordHashSync(password), identical: identical, @@ -243,7 +246,7 @@ proto.changePassword = function (uid, oldPassword, newPassword) { if (!_.isString(newPassword) || newPassword.length < 6) { return Promise.reject(new AppError.AppError('请您输入6~20位长度的新密码')); } - return models.Users.findOne({ where: { id: uid } }) + return Users.findOne({ where: { id: uid } }) .then((u) => { if (!u) { throw new AppError.AppError(`未找到用户信息`); diff --git a/src/core/services/app-manager.js b/src/core/services/app-manager.js index 3a9f625c..071d62dd 100644 --- a/src/core/services/app-manager.js +++ b/src/core/services/app-manager.js @@ -1,5 +1,10 @@ 'use strict'; -var models = require('../../models'); +import { Apps } from '../../models/apps'; +import { Collaborators } from '../../models/collaborators'; +import { Deployments } from '../../models/deployments'; +import { Users } from '../../models/users'; +import { sequelize } from '../../models/index'; + var _ = require('lodash'); var security = require('../../core/utils/security'); var AppError = require('../app-error'); @@ -11,12 +16,12 @@ var proto = (module.exports = function () { }); proto.findAppByName = function (uid, appName) { - return models.Apps.findOne({ where: { name: appName, uid: uid } }); + return Apps.findOne({ where: { name: appName, uid: uid } }); }; proto.addApp = function (uid, appName, os, platform, identical) { - return models.sequelize.transaction((t) => { - return models.Apps.create( + return sequelize.transaction((t) => { + return Apps.create( { name: appName, uid: uid, @@ -47,54 +52,49 @@ proto.addApp = function (uid, appName, os, platform, identical) { deployment_key: deploymentKey, }); return Promise.all([ - models.Collaborators.create( + Collaborators.create( { appid: appId, uid: uid, roles: 'Owner' }, { transaction: t }, ), - models.Deployments.bulkCreate(deployments, { transaction: t }), + Deployments.bulkCreate(deployments, { transaction: t }), ]); }); }); }; proto.deleteApp = function (appId) { - return models.sequelize.transaction((t) => { + return sequelize.transaction((t) => { return Promise.all([ - models.Apps.destroy({ where: { id: appId }, transaction: t }), - models.Collaborators.destroy({ where: { appid: appId }, transaction: t }), - models.Deployments.destroy({ where: { appid: appId }, transaction: t }), + Apps.destroy({ where: { id: appId }, transaction: t }), + Collaborators.destroy({ where: { appid: appId }, transaction: t }), + Deployments.destroy({ where: { appid: appId }, transaction: t }), ]); }); }; proto.modifyApp = function (appId, params) { - return models.Apps.update(params, { where: { id: appId } }).then( - ([affectedCount, affectedRows]) => { - if (!_.gt(affectedCount, 0)) { - throw AppError.AppError('modify errors'); - } - return affectedCount; - }, - ); + return Apps.update(params, { where: { id: appId } }).then(([affectedCount, affectedRows]) => { + if (!_.gt(affectedCount, 0)) { + throw AppError.AppError('modify errors'); + } + return affectedCount; + }); }; proto.transferApp = function (appId, fromUid, toUid) { - return models.sequelize.transaction((t) => { + return sequelize.transaction((t) => { return Promise.all([ - models.Apps.update({ uid: toUid }, { where: { id: appId }, transaction: t }), - models.Collaborators.destroy({ where: { appid: appId, uid: fromUid }, transaction: t }), - models.Collaborators.destroy({ where: { appid: appId, uid: toUid }, transaction: t }), - models.Collaborators.create( - { appid: appId, uid: toUid, roles: 'Owner' }, - { transaction: t }, - ), + Apps.update({ uid: toUid }, { where: { id: appId }, transaction: t }), + Collaborators.destroy({ where: { appid: appId, uid: fromUid }, transaction: t }), + Collaborators.destroy({ where: { appid: appId, uid: toUid }, transaction: t }), + Collaborators.create({ appid: appId, uid: toUid, roles: 'Owner' }, { transaction: t }), ]); }); }; proto.listApps = function (uid) { const self = this; - return models.Collaborators.findAll({ where: { uid: uid } }) + return Collaborators.findAll({ where: { uid: uid } }) .then((data) => { if (_.isEmpty(data)) { return []; @@ -103,7 +103,7 @@ proto.listApps = function (uid) { return v.appid; }); var Sequelize = require('sequelize'); - return models.Apps.findAll({ where: { id: { [Sequelize.Op.in]: appIds } } }); + return Apps.findAll({ where: { id: { [Sequelize.Op.in]: appIds } } }); } }) .then((appInfos) => { @@ -134,23 +134,21 @@ proto.listApps = function (uid) { proto.getAppDetailInfo = function (appInfo, currentUid) { var appId = appInfo.get('id'); return Promise.all([ - models.Deployments.findAll({ where: { appid: appId } }), - models.Collaborators.findAll({ where: { appid: appId } }).then((collaboratorInfos) => { + Deployments.findAll({ where: { appid: appId } }), + Collaborators.findAll({ where: { appid: appId } }).then((collaboratorInfos) => { return collaboratorInfos.reduce((prev, collaborator) => { return prev.then((allCol) => { - return models.Users.findOne({ where: { id: collaborator.get('uid') } }).then( - (u) => { - var isCurrentAccount = false; - if (_.eq(u.get('id'), currentUid)) { - isCurrentAccount = true; - } - allCol[u.get('email')] = { - permission: collaborator.get('roles'), - isCurrentAccount: isCurrentAccount, - }; - return allCol; - }, - ); + return Users.findOne({ where: { id: collaborator.get('uid') } }).then((u) => { + var isCurrentAccount = false; + if (_.eq(u.get('id'), currentUid)) { + isCurrentAccount = true; + } + allCol[u.get('email')] = { + permission: collaborator.get('roles'), + isCurrentAccount: isCurrentAccount, + }; + return allCol; + }); }); }, Promise.resolve({})); }), diff --git a/src/core/services/client-manager.js b/src/core/services/client-manager.js index e2631f56..a9424d9a 100644 --- a/src/core/services/client-manager.js +++ b/src/core/services/client-manager.js @@ -1,10 +1,17 @@ 'use strict'; -var models = require('../../models'); -var _ = require('lodash'); +import _ from 'lodash'; +import { Deployments } from '../../models/deployments'; +import { DeploymentsVersions } from '../../models/deployments_versions'; +import { Packages } from '../../models/packages'; +import { PackagesDiff } from '../../models/packages_diff'; +import { PackagesMetrics } from '../../models/packages_metrics'; +import { LogReportDeploy } from '../../models/log_report_deploy'; +import { LogReportDownload } from '../../models/log_report_download'; +import { config } from '../config'; + var common = require('../utils/common'); var factory = require('../utils/factory'); var AppError = require('../app-error'); -var { config } = require('../config'); var { logger } = require('kv-logger'); var Sequelize = require('sequelize'); @@ -146,13 +153,13 @@ proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, cli if (_.isEmpty(deploymentKey) || _.isEmpty(appVersion)) { return Promise.reject(new AppError.AppError('please input deploymentKey and appVersion')); } - return models.Deployments.findOne({ where: { deployment_key: deploymentKey } }) + return Deployments.findOne({ where: { deployment_key: deploymentKey } }) .then((dep) => { if (_.isEmpty(dep)) { throw new AppError.AppError('Not found deployment, check deployment key is right.'); } var version = common.parseVersion(appVersion); - return models.DeploymentsVersions.findAll({ + return DeploymentsVersions.findAll({ where: { deployment_id: dep.id, min_version: { [Sequelize.Op.lte]: version }, @@ -183,7 +190,7 @@ proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, cli if (_.eq(packageId, 0)) { return; } - return models.Packages.findByPk(packageId) + return Packages.findByPk(packageId) .then((packages) => { if ( packages && @@ -214,7 +221,7 @@ proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, cli !_.isEmpty(packages) && !_.eq(_.get(packages, 'package_hash', ''), packageHash) ) { - return models.PackagesDiff.findOne({ + return PackagesDiff.findOne({ where: { package_id: packages.id, diff_against_package_hash: packageHash, @@ -245,12 +252,12 @@ proto.getPackagesInfo = function (deploymentKey, label) { if (_.isEmpty(deploymentKey) || _.isEmpty(label)) { return Promise.reject(new AppError.AppError('please input deploymentKey and label')); } - return models.Deployments.findOne({ where: { deployment_key: deploymentKey } }) + return Deployments.findOne({ where: { deployment_key: deploymentKey } }) .then((dep) => { if (_.isEmpty(dep)) { throw new AppError.AppError('does not found deployment'); } - return models.Packages.findOne({ where: { deployment_id: dep.id, label: label } }); + return Packages.findOne({ where: { deployment_id: dep.id, label: label } }); }) .then((packages) => { if (_.isEmpty(packages)) { @@ -263,15 +270,13 @@ proto.getPackagesInfo = function (deploymentKey, label) { proto.reportStatusDownload = function (deploymentKey, label, clientUniqueId) { return this.getPackagesInfo(deploymentKey, label).then((packages) => { return Promise.all([ - models.PackagesMetrics.findOne({ where: { package_id: packages.id } }).then( - (metrics) => { - if (metrics) { - return metrics.increment('downloaded'); - } - return; - }, - ), - models.LogReportDownload.create({ + PackagesMetrics.findOne({ where: { package_id: packages.id } }).then((metrics) => { + if (metrics) { + return metrics.increment('downloaded'); + } + return; + }), + LogReportDownload.create({ package_id: packages.id, client_unique_id: clientUniqueId, }), @@ -294,41 +299,39 @@ proto.reportStatusDeploy = function (deploymentKey, label, clientUniqueId, other var previous_label = _.get(others, 'previousLabelOrAppVersion'); if (status > 0) { return Promise.all([ - models.LogReportDeploy.create({ + LogReportDeploy.create({ package_id: packageId, client_unique_id: clientUniqueId, previous_label: previous_label, previous_deployment_key: previous_deployment_key, status: status, }), - models.PackagesMetrics.findOne({ where: { package_id: packageId } }).then( - (metrics) => { - if (_.isEmpty(metrics)) { - return; - } - if (_.eq(status, constConfig.DEPLOYMENT_SUCCEEDED)) { - return metrics.increment(['installed', 'active'], { by: 1 }); - } else { - return metrics.increment(['installed', 'failed'], { by: 1 }); - } - }, - ), + PackagesMetrics.findOne({ where: { package_id: packageId } }).then((metrics) => { + if (_.isEmpty(metrics)) { + return; + } + if (_.eq(status, constConfig.DEPLOYMENT_SUCCEEDED)) { + return metrics.increment(['installed', 'active'], { by: 1 }); + } else { + return metrics.increment(['installed', 'failed'], { by: 1 }); + } + }), ]).then(() => { if (previous_deployment_key && previous_label) { - return models.Deployments.findOne({ + return Deployments.findOne({ where: { deployment_key: previous_deployment_key }, }) .then((dep) => { if (_.isEmpty(dep)) { return; } - return models.Packages.findOne({ + return Packages.findOne({ where: { deployment_id: dep.id, label: previous_label }, }).then((p) => { if (_.isEmpty(p)) { return; } - return models.PackagesMetrics.findOne({ + return PackagesMetrics.findOne({ where: { package_id: p.id }, }); }); diff --git a/src/core/services/collaborators.js b/src/core/services/collaborators.js index 23596cdf..a6f66191 100644 --- a/src/core/services/collaborators.js +++ b/src/core/services/collaborators.js @@ -1,5 +1,7 @@ 'use strict'; -var models = require('../../models'); +import { Collaborators } from '../../models/collaborators'; +import { Users } from '../../models/users'; + var _ = require('lodash'); var AppError = require('../app-error'); @@ -10,7 +12,7 @@ var proto = (module.exports = function () { }); proto.listCollaborators = function (appId) { - return models.Collaborators.findAll({ where: { appid: appId } }) + return Collaborators.findAll({ where: { appid: appId } }) .then((data) => { return _.reduce( data, @@ -24,7 +26,7 @@ proto.listCollaborators = function (appId) { }) .then((coInfo) => { var Sequelize = require('sequelize'); - return models.Users.findAll({ where: { id: { [Sequelize.Op.in]: coInfo.uids } } }).then( + return Users.findAll({ where: { id: { [Sequelize.Op.in]: coInfo.uids } } }).then( (data2) => { return _.reduce( data2, @@ -44,9 +46,9 @@ proto.listCollaborators = function (appId) { }; proto.addCollaborator = function (appId, uid) { - return models.Collaborators.findOne({ where: { appid: appId, uid: uid } }).then((data) => { + return Collaborators.findOne({ where: { appid: appId, uid: uid } }).then((data) => { if (_.isEmpty(data)) { - return models.Collaborators.create({ + return Collaborators.create({ appid: appId, uid: uid, roles: 'Collaborator', @@ -58,11 +60,11 @@ proto.addCollaborator = function (appId, uid) { }; proto.deleteCollaborator = function (appId, uid) { - return models.Collaborators.findOne({ where: { appid: appId, uid: uid } }).then((data) => { + return Collaborators.findOne({ where: { appid: appId, uid: uid } }).then((data) => { if (_.isEmpty(data)) { throw new AppError.AppError('user is not a Collaborator'); } else { - return models.Collaborators.destroy({ where: { id: data.id } }); + return Collaborators.destroy({ where: { id: data.id } }); } }); }; diff --git a/src/core/services/datacenter-manager.js b/src/core/services/datacenter-manager.js index b6ba4755..737b2822 100644 --- a/src/core/services/datacenter-manager.js +++ b/src/core/services/datacenter-manager.js @@ -1,15 +1,16 @@ 'use strict'; -var _ = require('lodash'); -var fs = require('fs'); -var os = require('os'); +import _ from 'lodash'; +import fs from 'fs'; +import path from 'path'; +import { logger } from 'kv-logger'; +import { config } from '../config'; + var security = require('../utils/security'); var common = require('../utils/common'); +var AppError = require('../app-error'); + const MANIFEST_FILE_NAME = 'manifest.json'; const CONTENTS_NAME = 'contents'; -var AppError = require('../app-error'); -var { logger } = require('kv-logger'); -var path = require('path'); -const { config } = require('../config'); var proto = (module.exports = function () { function DataCenterManager() {} diff --git a/src/core/services/deployments.js b/src/core/services/deployments.js index 31370b77..0fc574af 100644 --- a/src/core/services/deployments.js +++ b/src/core/services/deployments.js @@ -1,5 +1,13 @@ 'use strict'; -var models = require('../../models'); +import { Deployments } from '../../models/deployments'; +import { DeploymentsVersions } from '../../models/deployments_versions'; +import { DeploymentsHistory } from '../../models/deployments_history'; +import { Packages } from '../../models/packages'; +import { PackagesDiff } from '../../models/packages_diff'; +import { PackagesMetrics } from '../../models/packages_metrics'; +import { Users } from '../../models/users'; +import { sequelize } from '../../models/index'; + var security = require('../../core/utils/security'); var common = require('../../core/utils/common'); var _ = require('lodash'); @@ -14,11 +22,11 @@ var proto = (module.exports = function () { }); proto.getAllPackageIdsByDeploymentsId = function (deploymentsId) { - return models.Packages.findAll({ where: { deployment_id: deploymentsId } }); + return Packages.findAll({ where: { deployment_id: deploymentsId } }); }; proto.existDeloymentName = function (appId, name) { - return models.Deployments.findOne({ + return Deployments.findOne({ where: { appid: appId, name: name }, }).then((data) => { if (!_.isEmpty(data)) { @@ -31,14 +39,14 @@ proto.existDeloymentName = function (appId, name) { proto.addDeloyment = function (name, appId, uid) { var self = this; - return models.Users.findByPk(uid).then((user) => { + return Users.findByPk(uid).then((user) => { if (_.isEmpty(user)) { throw new AppError.AppError("can't find user"); } return self.existDeloymentName(appId, name).then(() => { var identical = user.identical; var deploymentKey = security.randToken(28) + identical; - return models.Deployments.create({ + return Deployments.create({ appid: appId, name: name, deployment_key: deploymentKey, @@ -51,7 +59,7 @@ proto.addDeloyment = function (name, appId, uid) { proto.renameDeloymentByName = function (deploymentName, appId, newName) { return this.existDeloymentName(appId, newName).then(() => { - return models.Deployments.update( + return Deployments.update( { name: newName }, { where: { name: deploymentName, appid: appId } }, ).then(([affectedCount, affectedRow]) => { @@ -65,7 +73,7 @@ proto.renameDeloymentByName = function (deploymentName, appId, newName) { }; proto.deleteDeloymentByName = function (deploymentName, appId) { - return models.Deployments.destroy({ + return Deployments.destroy({ where: { name: deploymentName, appid: appId }, }).then((rowNum) => { if (_.gt(rowNum, 0)) { @@ -81,13 +89,13 @@ proto.findDeloymentByName = function (deploymentName, appId) { name: deploymentName, appId, }); - return models.Deployments.findOne({ + return Deployments.findOne({ where: { name: deploymentName, appid: appId }, }); }; proto.findPackagesAndOtherInfos = function (packageId) { - return models.Packages.findOne({ + return Packages.findOne({ where: { id: packageId }, }) .then((packageInfo) => { @@ -96,7 +104,7 @@ proto.findPackagesAndOtherInfos = function (packageId) { } return Promise.all([ Promise.resolve(packageInfo), - models.PackagesDiff.findAll({ + PackagesDiff.findAll({ where: { package_id: packageId }, }).then((diffs) => { if (diffs.length > 0) { @@ -114,10 +122,10 @@ proto.findPackagesAndOtherInfos = function (packageId) { } return null; }), - models.Users.findOne({ + Users.findOne({ where: { id: packageInfo.released_by }, }), - models.DeploymentsVersions.findByPk(packageInfo.deployment_version_id), + DeploymentsVersions.findByPk(packageInfo.deployment_version_id), ]); }) .then(([packageInfo, packageDiffMap, userInfo, deploymentsVersions]) => { @@ -132,7 +140,7 @@ proto.findPackagesAndOtherInfos = function (packageId) { proto.findDeloymentsPackages = function (deploymentsVersionsId) { var self = this; - return models.DeploymentsVersions.findOne({ + return DeploymentsVersions.findOne({ where: { id: deploymentsVersionsId }, }).then((deploymentsVersionsInfo) => { if (deploymentsVersionsInfo) { @@ -170,7 +178,7 @@ proto.formatPackage = function (packageVersion) { proto.listDeloyments = function (appId) { var self = this; - return models.Deployments.findAll({ where: { appid: appId } }).then((deploymentsInfos) => { + return Deployments.findAll({ where: { appid: appId } }).then((deploymentsInfos) => { if (_.isEmpty(deploymentsInfos)) { return []; } @@ -198,7 +206,7 @@ proto.listDeloyment = function (deploymentInfo) { proto.getDeploymentHistory = function (deploymentId) { var self = this; - return models.DeploymentsHistory.findAll({ + return DeploymentsHistory.findAll({ where: { deployment_id: deploymentId }, order: [['id', 'desc']], limit: 15, @@ -218,13 +226,13 @@ proto.getDeploymentHistory = function (deploymentId) { }; proto.deleteDeploymentHistory = function (deploymentId) { - return models.sequelize.transaction((t) => { + return sequelize.transaction((t) => { return Promise.all([ - models.Deployments.update( + Deployments.update( { last_deployment_version_id: 0, label_id: 0 }, { where: { id: deploymentId }, transaction: t }, ), - models.DeploymentsHistory.findAll({ + DeploymentsHistory.findAll({ where: { deployment_id: deploymentId }, order: [['id', 'desc']], limit: 1000, @@ -235,7 +243,7 @@ proto.deleteDeploymentHistory = function (deploymentId) { }), ); }), - models.DeploymentsVersions.findAll({ + DeploymentsVersions.findAll({ where: { deployment_id: deploymentId }, order: [['id', 'desc']], limit: 1000, @@ -246,7 +254,7 @@ proto.deleteDeploymentHistory = function (deploymentId) { }), ); }), - models.Packages.findAll({ + Packages.findAll({ where: { deployment_id: deploymentId }, order: [['id', 'desc']], limit: 1000, @@ -255,11 +263,11 @@ proto.deleteDeploymentHistory = function (deploymentId) { rs.map((v) => { return v.destroy({ transaction: t }).then(() => { return Promise.all([ - models.PackagesMetrics.destroy({ + PackagesMetrics.destroy({ where: { package_id: v.get('id') }, transaction: t, }), - models.PackagesDiff.destroy({ + PackagesDiff.destroy({ where: { package_id: v.get('id') }, transaction: t, }), diff --git a/src/core/services/email-manager.js b/src/core/services/email-manager.js index b6440209..58df2f4c 100644 --- a/src/core/services/email-manager.js +++ b/src/core/services/email-manager.js @@ -1,7 +1,8 @@ 'use strict'; -var _ = require('lodash'); -var nodemailer = require('nodemailer'); -var { config } = require('../config'); +import _ from 'lodash'; +import nodemailer from 'nodemailer'; + +import { config } from '../config'; var proto = (module.exports = function () { function EmailManager() {} diff --git a/src/core/services/package-manager.js b/src/core/services/package-manager.js index 72c096a1..fc506119 100644 --- a/src/core/services/package-manager.js +++ b/src/core/services/package-manager.js @@ -1,5 +1,14 @@ 'use strict'; -var models = require('../../models'); +import { Apps } from '../../models/apps'; +import { Deployments, generateDeploymentsLabelId } from '../../models/deployments'; +import { DeploymentsVersions } from '../../models/deployments_versions'; +import { DeploymentsHistory } from '../../models/deployments_history'; +import { Packages } from '../../models/packages'; +import { PackagesDiff } from '../../models/packages_diff'; +import { PackagesMetrics } from '../../models/packages_metrics'; +import { sequelize } from '../../models/index'; + +var Sequelize = require('sequelize'); var security = require('../utils/security'); var _ = require('lodash'); var formidable = require('formidable'); @@ -20,24 +29,22 @@ var proto = (module.exports = function () { }); proto.getMetricsbyPackageId = function (packageId) { - return models.PackagesMetrics.findOne({ where: { package_id: packageId } }); + return PackagesMetrics.findOne({ where: { package_id: packageId } }); }; proto.findPackageInfoByDeploymentIdAndLabel = function (deploymentId, label) { - return models.Packages.findOne({ where: { deployment_id: deploymentId, label: label } }); + return Packages.findOne({ where: { deployment_id: deploymentId, label: label } }); }; proto.findLatestPackageInfoByDeployVersion = function (deploymentsVersionsId) { - return models.DeploymentsVersions.findByPk(deploymentsVersionsId).then( - (deploymentsVersions) => { - if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { - var e = new AppError.AppError('not found last packages'); - logger.debug(e); - throw e; - } - return models.Packages.findByPk(deploymentsVersions.current_package_id); - }, - ); + return DeploymentsVersions.findByPk(deploymentsVersionsId).then((deploymentsVersions) => { + if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { + var e = new AppError.AppError('not found last packages'); + logger.debug(e); + throw e; + } + return Packages.findByPk(deploymentsVersions.current_package_id); + }); }; proto.parseReqFile = function (req) { @@ -73,7 +80,7 @@ proto.createDeploymentsVersionIfNotExist = function ( maxVersion, t, ) { - return models.DeploymentsVersions.findOrCreate({ + return DeploymentsVersions.findOrCreate({ where: { deployment_id: deploymentId, app_version: appVersion, @@ -96,7 +103,7 @@ proto.isMatchPackageHash = function (packageId, packageHash) { logger.debug(`isMatchPackageHash packageId is 0`); return Promise.resolve(false); } - return models.Packages.findByPk(packageId).then((data) => { + return Packages.findByPk(packageId).then((data) => { if (data && _.eq(data.get('package_hash'), packageHash)) { logger.debug(`isMatchPackageHash data:`, data.get()); logger.debug(`isMatchPackageHash packageHash exist`); @@ -126,8 +133,8 @@ proto.createPackage = function ( var isDisabled = params.isDisabled || 0; var originalDeployment = params.originalDeployment || ''; var self = this; - return models.Deployments.generateLabelId(deploymentId).then((labelId) => { - return models.sequelize.transaction((t) => { + return generateDeploymentsLabelId(deploymentId).then((labelId) => { + return sequelize.transaction((t) => { return self .createDeploymentsVersionIfNotExist( deploymentId, @@ -137,7 +144,7 @@ proto.createPackage = function ( t, ) .then((deploymentsVersions) => { - return models.Packages.create( + return Packages.create( { deployment_version_id: deploymentsVersions.id, deployment_id: deploymentId, @@ -160,15 +167,12 @@ proto.createPackage = function ( deploymentsVersions.set('current_package_id', packages.id); return Promise.all([ deploymentsVersions.save({ transaction: t }), - models.Deployments.update( + Deployments.update( { last_deployment_version_id: deploymentsVersions.id }, { where: { id: deploymentId }, transaction: t }, ), - models.PackagesMetrics.create( - { package_id: packages.id }, - { transaction: t }, - ), - models.DeploymentsHistory.create( + PackagesMetrics.create({ package_id: packages.id }, { transaction: t }), + DeploymentsHistory.create( { deployment_id: deploymentId, package_id: packages.id }, { transaction: t }, ), @@ -236,7 +240,7 @@ proto.generateOneDiffPackage = function ( isUseDiffText, ) { var self = this; - return models.PackagesDiff.findOne({ + return PackagesDiff.findOne({ where: { package_id: packageId, diff_against_package_hash: diffPackageHash, @@ -314,7 +318,7 @@ proto.generateOneDiffPackage = function ( return security.qetag(data.path).then((diffHash) => { return common.uploadFileToStorage(diffHash, fileName).then(() => { var stats = fs.statSync(fileName); - return models.PackagesDiff.create({ + return PackagesDiff.create({ package_id: packageId, diff_against_package_hash: diffPackageHash, diff_blob_url: diffHash, @@ -329,10 +333,9 @@ proto.generateOneDiffPackage = function ( proto.createDiffPackagesByLastNums = function (appId, originalPackage, num) { var self = this; - var Sequelize = require('sequelize'); var packageId = originalPackage.id; return Promise.all([ - models.Packages.findAll({ + Packages.findAll({ where: { deployment_version_id: originalPackage.deployment_version_id, id: { [Sequelize.Op.lt]: packageId }, @@ -340,7 +343,7 @@ proto.createDiffPackagesByLastNums = function (appId, originalPackage, num) { order: [['id', 'desc']], limit: num, }), - models.Packages.findAll({ + Packages.findAll({ where: { deployment_version_id: originalPackage.deployment_version_id, id: { [Sequelize.Op.lt]: packageId }, @@ -348,7 +351,7 @@ proto.createDiffPackagesByLastNums = function (appId, originalPackage, num) { order: [['id', 'asc']], limit: 2, }), - models.Apps.findByPk(appId), + Apps.findByPk(appId), ]) .then(([lastNumsPackages, basePackages, appInfo]) => { return [ @@ -438,7 +441,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel ]) .then(([blobHash]) => { return security.uploadPackageType(directoryPath).then((type) => { - return models.Apps.findByPk(appId).then((appInfo) => { + return Apps.findByPk(appId).then((appInfo) => { if (type > 0 && appInfo.os > 0 && appInfo.os != type) { var e = new AppError.AppError('it must be publish it by ios type'); logger.debug(e); @@ -456,7 +459,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel return dataCenterManager.storePackage(directoryPath).then((dataCenter) => { var packageHash = dataCenter.packageHash; var manifestFile = dataCenter.manifestFilePath; - return models.DeploymentsVersions.findOne({ + return DeploymentsVersions.findOne({ where: { deployment_id: deploymentId, app_version: appVersion }, }) .then((deploymentsVersions) => { @@ -519,7 +522,7 @@ proto.modifyReleasePackage = function (packageId, params) { var isMandatory = _.get(params, 'isMandatory'); var isDisabled = _.get(params, 'isDisabled'); var rollout = _.get(params, 'rollout'); - return models.Packages.findByPk(packageId) + return Packages.findByPk(packageId) .then((packageInfo) => { if (!packageInfo) { throw new AppError.AppError(`packageInfo not found`); @@ -530,13 +533,13 @@ proto.modifyReleasePackage = function (packageId, params) { throw new AppError.AppError(`--targetBinaryVersion ${appVersion} not support.`); } return Promise.all([ - models.DeploymentsVersions.findOne({ + DeploymentsVersions.findOne({ where: { deployment_id: packageInfo.deployment_id, app_version: appVersion, }, }), - models.DeploymentsVersions.findByPk(packageInfo.deployment_version_id), + DeploymentsVersions.findByPk(packageInfo.deployment_version_id), ]) .then(([v1, v2]) => { if (v1 && !_.eq(v1.id, v2.id)) { @@ -546,7 +549,7 @@ proto.modifyReleasePackage = function (packageId, params) { if (!v2) { throw new AppError.AppError(`packages not found.`); } - return models.DeploymentsVersions.update( + return DeploymentsVersions.update( { app_version: appVersion, min_version: versionInfo[1], @@ -578,7 +581,7 @@ proto.modifyReleasePackage = function (packageId, params) { ? constConfig.IS_DISABLED_YES : constConfig.IS_DISABLED_NO; } - return models.Packages.update(new_params, { where: { id: packageId } }); + return Packages.update(new_params, { where: { id: packageId } }); }); }; @@ -588,21 +591,21 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param var label = _.get(params, 'label', null); return new Promise((resolve, reject) => { if (label) { - return models.Packages.findOne({ + return Packages.findOne({ where: { deployment_id: sourceDeploymentInfo.id, label: label }, }) .then((sourcePack) => { if (!sourcePack) { throw new AppError.AppError('label does not exist.'); } - return models.DeploymentsVersions.findByPk( - sourcePack.deployment_version_id, - ).then((deploymentsVersions) => { - if (!deploymentsVersions) { - throw new AppError.AppError('deploymentsVersions does not exist.'); - } - resolve([sourcePack, deploymentsVersions]); - }); + return DeploymentsVersions.findByPk(sourcePack.deployment_version_id).then( + (deploymentsVersions) => { + if (!deploymentsVersions) { + throw new AppError.AppError('deploymentsVersions does not exist.'); + } + resolve([sourcePack, deploymentsVersions]); + }, + ); }) .catch((e) => { reject(e); @@ -616,13 +619,13 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param if (_.lte(lastDeploymentVersionId, 0)) { throw new AppError.AppError(`does not exist last_deployment_version_id.`); } - return models.DeploymentsVersions.findByPk(lastDeploymentVersionId) + return DeploymentsVersions.findByPk(lastDeploymentVersionId) .then((deploymentsVersions) => { var sourcePackId = _.get(deploymentsVersions, 'current_package_id', 0); if (_.lte(sourcePackId, 0)) { throw new AppError.AppError(`packageInfo not found.`); } - return models.Packages.findByPk(sourcePackId).then((sourcePack) => { + return Packages.findByPk(sourcePackId).then((sourcePack) => { if (!sourcePack) { throw new AppError.AppError(`packageInfo not found.`); } @@ -639,7 +642,7 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param logger.debug('sourcePack', sourcePack); logger.debug('deploymentsVersions', deploymentsVersions); logger.debug('appFinalVersion', appFinalVersion); - return models.DeploymentsVersions.findOne({ + return DeploymentsVersions.findOne({ where: { deployment_id: destDeploymentInfo.id, app_version: appFinalVersion, @@ -707,14 +710,14 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param proto.rollbackPackage = function (deploymentVersionId, targetLabel, rollbackUid) { var self = this; - return models.DeploymentsVersions.findByPk(deploymentVersionId).then((deploymentsVersions) => { + return DeploymentsVersions.findByPk(deploymentVersionId).then((deploymentsVersions) => { if (!deploymentsVersions) { throw new AppError.AppError('您之前还没有发布过版本'); } - return models.Packages.findByPk(deploymentsVersions.current_package_id) + return Packages.findByPk(deploymentsVersions.current_package_id) .then((currentPackageInfo) => { if (targetLabel) { - return models.Packages.findAll({ + return Packages.findAll({ where: { deployment_version_id: deploymentVersionId, label: targetLabel }, limit: 1, }).then((rollbackPackageInfos) => { @@ -767,8 +770,7 @@ proto.rollbackPackage = function (deploymentVersionId, targetLabel, rollbackUid) }; proto.getCanRollbackPackages = function (deploymentVersionId) { - var Sequelize = require('sequelize'); - return models.Packages.findAll({ + return Packages.findAll({ where: { deployment_version_id: deploymentVersionId, release_method: { diff --git a/src/core/utils/common.js b/src/core/utils/common.js index 75c60c90..bb26eccc 100644 --- a/src/core/utils/common.js +++ b/src/core/utils/common.js @@ -1,22 +1,21 @@ 'use strict'; -const fs = require('fs'); -const fsextra = require('fs-extra'); -const extract = require('extract-zip'); -var _ = require('lodash'); -var validator = require('validator'); -var qiniu = require('qiniu'); +import fs from 'fs'; +import fsextra from 'fs-extra'; +import extract from 'extract-zip'; +import _ from 'lodash'; +import validator from 'validator'; +import qiniu from 'qiniu'; var upyun = require('upyun'); const jschardet = require('jschardet'); -const path = require('path'); -const util = require('util'); +import path from 'path'; +import util from 'util'; const streamPipeline = util.promisify(require('stream').pipeline); -const fetch = require('node-fetch'); +import fetch from 'node-fetch'; +import { logger } from 'kv-logger'; -const { config } = require('../config'); +import { config } from '../config'; var AppError = require('../app-error'); -var { logger } = require('kv-logger'); - var common = {}; module.exports = common; diff --git a/src/core/utils/factory.js b/src/core/utils/factory.js index 25758cda..b4a5ba13 100644 --- a/src/core/utils/factory.js +++ b/src/core/utils/factory.js @@ -1,7 +1,7 @@ 'use strict'; -const util = require('util'); -const redis = require('redis'); -const { config } = require('../config'); +import util from 'util'; +import redis from 'redis'; +import { config } from '../config'; const factory = {}; module.exports = factory; diff --git a/src/models/apps.js b/src/models/apps.js deleted file mode 100644 index 94f36270..00000000 --- a/src/models/apps.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -module.exports = function (sequelize, DataTypes) { - var Apps = sequelize.define( - 'Apps', - { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - name: DataTypes.STRING, - uid: DataTypes.BIGINT(20), - os: DataTypes.INTEGER(3), - platform: DataTypes.INTEGER(3), - is_use_diff_text: DataTypes.INTEGER(3), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, - { - tableName: 'apps', - underscored: true, - paranoid: true, - }, - ); - return Apps; -}; diff --git a/src/models/apps.ts b/src/models/apps.ts new file mode 100644 index 00000000..ffea114d --- /dev/null +++ b/src/models/apps.ts @@ -0,0 +1,37 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface AppsInterface extends Model { + id: number; + name: string; + uid: number; + os: number; + platform: number; + is_use_diff_text: number; + created_at: Date; + updated_at: Date; +} + +export const Apps = sequelize.define( + 'Apps', + { + id: { + type: DataTypes.INTEGER({ length: 10 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + name: DataTypes.STRING, + uid: DataTypes.BIGINT({ length: 20 }), + os: DataTypes.INTEGER({ length: 3 }), + platform: DataTypes.INTEGER({ length: 3 }), + is_use_diff_text: DataTypes.INTEGER({ length: 3 }), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'apps', + underscored: true, + paranoid: true, + }, +); diff --git a/src/models/collaborators.js b/src/models/collaborators.js deleted file mode 100644 index 12bc7a8a..00000000 --- a/src/models/collaborators.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -module.exports = function (sequelize, DataTypes) { - var Collaborators = sequelize.define( - 'Collaborators', - { - id: { - type: DataTypes.BIGINT(20), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - appid: DataTypes.INTEGER(10), - uid: DataTypes.BIGINT(20), - roles: DataTypes.STRING, - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, - { - tableName: 'collaborators', - underscored: true, - paranoid: true, - }, - ); - Collaborators.findByAppNameAndUid = function (uid, appName) { - var sql = - 'SELECT b.* FROM `apps` as a left join `collaborators` as b on (a.id = b.appid) where a.name= :appName and b.uid = :uid and a.`deleted_at` IS NULL and b.`deleted_at` IS NULL limit 0,1'; - return sequelize - .query(sql, { replacements: { appName: appName, uid: uid }, model: Collaborators }) - .then(function (data) { - return data.pop(); - }); - }; - return Collaborators; -}; diff --git a/src/models/collaborators.ts b/src/models/collaborators.ts new file mode 100644 index 00000000..bd51ffe4 --- /dev/null +++ b/src/models/collaborators.ts @@ -0,0 +1,42 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface CollaboratorsInterface extends Model { + id: number; + appid: number; + uid: number; + created_at: Date; + updated_at: Date; +} + +export const Collaborators = sequelize.define( + 'Collaborators', + { + id: { + type: DataTypes.BIGINT({ length: 20 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + appid: DataTypes.INTEGER({ length: 10 }), + uid: DataTypes.BIGINT({ length: 20 }), + roles: DataTypes.STRING, + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'collaborators', + underscored: true, + paranoid: true, + }, +); + +export async function findCollaboratorsByAppNameAndUid(uid: number, appName: string) { + const sql = + 'SELECT b.* FROM `apps` as a left join `collaborators` as b on (a.id = b.appid) where a.name= :appName and b.uid = :uid and a.`deleted_at` IS NULL and b.`deleted_at` IS NULL limit 0,1'; + const data = await sequelize.query(sql, { + replacements: { appName: appName, uid: uid }, + model: Collaborators, + }); + return data.pop(); +} diff --git a/src/models/deployments.js b/src/models/deployments.js deleted file mode 100644 index 02308906..00000000 --- a/src/models/deployments.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var _ = require('lodash'); -var AppError = require('../core/app-error'); - -module.exports = function (sequelize, DataTypes) { - var Deployments = sequelize.define( - 'Deployments', - { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - appid: DataTypes.INTEGER(10), - name: DataTypes.STRING, - description: DataTypes.STRING, - deployment_key: DataTypes.STRING, - last_deployment_version_id: DataTypes.INTEGER(10), - label_id: DataTypes.INTEGER(10), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, - { - tableName: 'deployments', - underscored: true, - paranoid: true, - }, - ); - - Deployments.generateLabelId = function (deploymentId) { - var self = this; - return sequelize.transaction(function (t) { - return self - .findByPk(deploymentId, { transaction: t, lock: t.LOCK.UPDATE }) - .then(function (data) { - if (_.isEmpty(data)) { - throw new AppError.AppError('does not find deployment'); - } - data.label_id = data.label_id + 1; - return data.save({ transaction: t }).then(function (data) { - return data.label_id; - }); - }); - }); - }; - - return Deployments; -}; diff --git a/src/models/deployments.ts b/src/models/deployments.ts new file mode 100644 index 00000000..b6de7098 --- /dev/null +++ b/src/models/deployments.ts @@ -0,0 +1,59 @@ +import { DataTypes, Model } from 'sequelize'; +import _ from 'lodash'; +import { sequelize } from './index'; + +const { AppError } = require('../core/app-error'); + +interface DeploymentsInterface extends Model { + id: number; + appid: number; + name: string; + description: string; + deployment_key: string; + last_deployment_version_id: number; + label_id: number; + created_at: Date; + updated_at: Date; +} + +export const Deployments = sequelize.define( + 'Deployments', + { + id: { + type: DataTypes.INTEGER({ length: 10 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + appid: DataTypes.INTEGER({ length: 10 }), + name: DataTypes.STRING, + description: DataTypes.STRING, + deployment_key: DataTypes.STRING, + last_deployment_version_id: DataTypes.INTEGER({ length: 10 }), + label_id: DataTypes.INTEGER({ length: 10 }), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'deployments', + underscored: true, + paranoid: true, + }, +); + +export function generateDeploymentsLabelId(deploymentId: number) { + return sequelize.transaction(function (t) { + return Deployments.findByPk(deploymentId, { + transaction: t, + lock: t.LOCK.UPDATE, + }).then(function (data) { + if (_.isEmpty(data)) { + throw new AppError('does not find deployment'); + } + data.label_id = data.label_id + 1; + return data.save({ transaction: t }).then(function (data) { + return data.label_id; + }); + }); + }); +} diff --git a/src/models/deployments_history.js b/src/models/deployments_history.js deleted file mode 100644 index c16453bb..00000000 --- a/src/models/deployments_history.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; -module.exports = function (sequelize, DataTypes) { - var DeploymentsHistory = sequelize.define( - 'DeploymentsHistory', - { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - deployment_id: DataTypes.INTEGER(10), - package_id: DataTypes.INTEGER(10), - created_at: DataTypes.DATE, - }, - { - tableName: 'deployments_history', - underscored: true, - updatedAt: false, - paranoid: true, - }, - ); - - return DeploymentsHistory; -}; diff --git a/src/models/deployments_history.ts b/src/models/deployments_history.ts new file mode 100644 index 00000000..e877f776 --- /dev/null +++ b/src/models/deployments_history.ts @@ -0,0 +1,30 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface DeploymentsHistoryInterface extends Model { + id: number; + deployment_id: number; + package_id: number; + created_at: Date; +} + +export const DeploymentsHistory = sequelize.define( + 'DeploymentsHistory', + { + id: { + type: DataTypes.INTEGER({ length: 10 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + deployment_id: DataTypes.INTEGER({ length: 10 }), + package_id: DataTypes.INTEGER({ length: 10 }), + created_at: DataTypes.DATE, + }, + { + tableName: 'deployments_history', + underscored: true, + updatedAt: false, + paranoid: true, + }, +); diff --git a/src/models/deployments_versions.js b/src/models/deployments_versions.js deleted file mode 100644 index 74fa02e9..00000000 --- a/src/models/deployments_versions.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -module.exports = function (sequelize, DataTypes) { - var DeploymentsVersions = sequelize.define( - 'DeploymentsVersions', - { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - deployment_id: DataTypes.INTEGER(10), - app_version: DataTypes.STRING, - current_package_id: DataTypes.INTEGER(10), - min_version: DataTypes.BIGINT(20), - max_version: DataTypes.BIGINT(20), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, - { - tableName: 'deployments_versions', - underscored: true, - paranoid: true, - }, - ); - - return DeploymentsVersions; -}; diff --git a/src/models/deployments_versions.ts b/src/models/deployments_versions.ts new file mode 100644 index 00000000..3cc912ba --- /dev/null +++ b/src/models/deployments_versions.ts @@ -0,0 +1,37 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface DeploymentsVersionsInterface extends Model { + id: number; + deployment_id: number; + app_version: string; + current_package_id: number; + min_version: number; + max_version: number; + created_at: Date; + updated_at: Date; +} + +export const DeploymentsVersions = sequelize.define( + 'DeploymentsVersions', + { + id: { + type: DataTypes.INTEGER({ length: 10 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + deployment_id: DataTypes.INTEGER({ length: 10 }), + app_version: DataTypes.STRING, + current_package_id: DataTypes.INTEGER({ length: 10 }), + min_version: DataTypes.BIGINT({ length: 20 }), + max_version: DataTypes.BIGINT({ length: 20 }), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'deployments_versions', + underscored: true, + paranoid: true, + }, +); diff --git a/src/models/index.js b/src/models/index.js deleted file mode 100644 index 5ad653f5..00000000 --- a/src/models/index.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -var fs = require('fs'); -var path = require('path'); -var Sequelize = require('sequelize'); -var basename = path.basename(module.filename); -var _ = require('lodash'); -const { config } = require('../core/config'); -var db = {}; - -var sequelize = new Sequelize( - config.db.database, - config.db.username, - config.db.password, - config.db, -); - -fs.readdirSync(__dirname) - .filter(function (file) { - return file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js'; - }) - .forEach(function (file) { - var model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes); - db[model.name] = model; - }); - -Object.keys(db).forEach(function (modelName) { - if (db[modelName].associate) { - db[modelName].associate(db); - } -}); - -db.sequelize = sequelize; -db.Sequelize = Sequelize; - -module.exports = db; diff --git a/src/models/index.ts b/src/models/index.ts new file mode 100644 index 00000000..788b664b --- /dev/null +++ b/src/models/index.ts @@ -0,0 +1,9 @@ +import { Sequelize } from 'sequelize'; +import { config } from '../core/config'; + +export const sequelize = new Sequelize( + config.db.database, + config.db.username, + config.db.password, + config.db, +); diff --git a/src/models/log_report_deploy.js b/src/models/log_report_deploy.js deleted file mode 100644 index e124eb5a..00000000 --- a/src/models/log_report_deploy.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -module.exports = function (sequelize, DataTypes) { - var LogReportDeploy = sequelize.define( - 'LogReportDeploy', - { - id: { - type: DataTypes.BIGINT(20), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - status: DataTypes.INTEGER(3), - package_id: DataTypes.INTEGER(10), - client_unique_id: DataTypes.STRING, - previous_label: DataTypes.STRING, - previous_deployment_key: DataTypes.STRING, - created_at: DataTypes.DATE, - }, - { - tableName: 'log_report_deploy', - underscored: true, - updatedAt: false, - paranoid: true, - }, - ); - return LogReportDeploy; -}; diff --git a/src/models/log_report_deploy.ts b/src/models/log_report_deploy.ts new file mode 100644 index 00000000..94834a49 --- /dev/null +++ b/src/models/log_report_deploy.ts @@ -0,0 +1,36 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface LogReportDeployInterface extends Model { + id: number; + status: number; + package_id: number; + client_unique_id: string; + previous_label: string; + previous_deployment_key: string; + created_at: Date; +} + +export const LogReportDeploy = sequelize.define( + 'LogReportDeploy', + { + id: { + type: DataTypes.BIGINT({ length: 20 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + status: DataTypes.INTEGER({ length: 3 }), + package_id: DataTypes.INTEGER({ length: 10 }), + client_unique_id: DataTypes.STRING, + previous_label: DataTypes.STRING, + previous_deployment_key: DataTypes.STRING, + created_at: DataTypes.DATE, + }, + { + tableName: 'log_report_deploy', + underscored: true, + updatedAt: false, + paranoid: true, + }, +); diff --git a/src/models/log_report_download.js b/src/models/log_report_download.js deleted file mode 100644 index 39a61198..00000000 --- a/src/models/log_report_download.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -module.exports = function (sequelize, DataTypes) { - var LogReportDownload = sequelize.define( - 'LogReportDownload', - { - id: { - type: DataTypes.BIGINT(20), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - package_id: DataTypes.INTEGER(10), - client_unique_id: DataTypes.STRING, - created_at: DataTypes.DATE, - }, - { - tableName: 'log_report_download', - underscored: true, - updatedAt: false, - paranoid: true, - }, - ); - return LogReportDownload; -}; diff --git a/src/models/log_report_download.ts b/src/models/log_report_download.ts new file mode 100644 index 00000000..932ca2da --- /dev/null +++ b/src/models/log_report_download.ts @@ -0,0 +1,30 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface LogReportDownloadInterface extends Model { + id: number; + package_id: number; + client_unique_id: string; + created_at: Date; +} + +export const LogReportDownload = sequelize.define( + 'LogReportDownload', + { + id: { + type: DataTypes.BIGINT({ length: 20 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + package_id: DataTypes.INTEGER({ length: 10 }), + client_unique_id: DataTypes.STRING, + created_at: DataTypes.DATE, + }, + { + tableName: 'log_report_download', + underscored: true, + updatedAt: false, + paranoid: true, + }, +); diff --git a/src/models/packages.js b/src/models/packages.js deleted file mode 100644 index 677f8eda..00000000 --- a/src/models/packages.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -module.exports = function (sequelize, DataTypes) { - var Packages = sequelize.define( - 'Packages', - { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - deployment_version_id: DataTypes.INTEGER(10), - deployment_id: DataTypes.INTEGER(10), - description: DataTypes.STRING, - package_hash: DataTypes.STRING, - blob_url: DataTypes.STRING, - size: DataTypes.INTEGER(10), - manifest_blob_url: DataTypes.STRING, - release_method: DataTypes.STRING, - label: DataTypes.STRING, - original_label: DataTypes.STRING, - original_deployment: DataTypes.STRING, - released_by: DataTypes.STRING, - is_mandatory: DataTypes.INTEGER(3), - is_disabled: DataTypes.INTEGER(3), - rollout: DataTypes.INTEGER(3), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, - { - tableName: 'packages', - underscored: true, - paranoid: true, - }, - ); - - return Packages; -}; diff --git a/src/models/packages.ts b/src/models/packages.ts new file mode 100644 index 00000000..a1a96db9 --- /dev/null +++ b/src/models/packages.ts @@ -0,0 +1,57 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface PackagesInterface extends Model { + id: number; + deployment_version_id: number; + deployment_id: number; + description: string; + package_hash: string; + blob_url: string; + size: number; + manifest_blob_url: string; + release_method: string; + label: string; + original_label: string; + original_deployment: string; + released_by: string; + is_mandatory: number; + is_disabled: number; + rollout: number; + created_at: Date; + updated_at: Date; +} + +export const Packages = sequelize.define( + 'Packages', + { + id: { + type: DataTypes.INTEGER({ length: 10 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + deployment_version_id: DataTypes.INTEGER({ length: 10 }), + deployment_id: DataTypes.INTEGER({ length: 10 }), + description: DataTypes.STRING, + package_hash: DataTypes.STRING, + blob_url: DataTypes.STRING, + size: DataTypes.INTEGER({ length: 10 }), + manifest_blob_url: DataTypes.STRING, + release_method: DataTypes.STRING, + label: DataTypes.STRING, + original_label: DataTypes.STRING, + original_deployment: DataTypes.STRING, + released_by: DataTypes.STRING, + is_mandatory: DataTypes.INTEGER({ length: 3 }), + is_disabled: DataTypes.INTEGER({ length: 3 }), + rollout: DataTypes.INTEGER({ length: 3 }), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'packages', + underscored: true, + paranoid: true, + }, +); diff --git a/src/models/packages_diff.js b/src/models/packages_diff.js deleted file mode 100644 index 76a57bcf..00000000 --- a/src/models/packages_diff.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -module.exports = function (sequelize, DataTypes) { - var PackagesDiff = sequelize.define( - 'PackagesDiff', - { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - package_id: DataTypes.INTEGER(10), - diff_against_package_hash: DataTypes.STRING, - diff_blob_url: DataTypes.STRING, - diff_size: DataTypes.INTEGER(10), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, - { - tableName: 'packages_diff', - underscored: true, - paranoid: true, - }, - ); - - return PackagesDiff; -}; diff --git a/src/models/packages_diff.ts b/src/models/packages_diff.ts new file mode 100644 index 00000000..aa287efe --- /dev/null +++ b/src/models/packages_diff.ts @@ -0,0 +1,35 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface PackagesDiffInterface extends Model { + id: number; + package_id: number; + diff_against_package_hash: string; + diff_blob_url: string; + diff_size: number; + created_at: Date; + updated_at: Date; +} + +export const PackagesDiff = sequelize.define( + 'PackagesDiff', + { + id: { + type: DataTypes.INTEGER({ length: 10 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + package_id: DataTypes.INTEGER({ length: 10 }), + diff_against_package_hash: DataTypes.STRING, + diff_blob_url: DataTypes.STRING, + diff_size: DataTypes.INTEGER({ length: 10 }), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'packages_diff', + underscored: true, + paranoid: true, + }, +); diff --git a/src/models/packages_metrics.js b/src/models/packages_metrics.js deleted file mode 100644 index 561614cf..00000000 --- a/src/models/packages_metrics.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var _ = require('lodash'); - -module.exports = function (sequelize, DataTypes) { - var PackagesMetrics = sequelize.define( - 'PackagesMetrics', - { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - package_id: DataTypes.INTEGER(10), - active: DataTypes.INTEGER(10), - downloaded: DataTypes.INTEGER(10), - failed: DataTypes.INTEGER(10), - installed: DataTypes.INTEGER(10), - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, - { - tableName: 'packages_metrics', - underscored: true, - paranoid: true, - }, - ); - return PackagesMetrics; -}; diff --git a/src/models/packages_metrics.ts b/src/models/packages_metrics.ts new file mode 100644 index 00000000..7ac9e4f5 --- /dev/null +++ b/src/models/packages_metrics.ts @@ -0,0 +1,37 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface PackagesMetricsInterface extends Model { + id: number; + package_id: number; + active: number; + downloaded: number; + failed: number; + installed: number; + created_at: Date; + updated_at: Date; +} + +export const PackagesMetrics = sequelize.define( + 'PackagesMetrics', + { + id: { + type: DataTypes.INTEGER({ length: 10 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + package_id: DataTypes.INTEGER({ length: 10 }), + active: DataTypes.INTEGER({ length: 10 }), + downloaded: DataTypes.INTEGER({ length: 10 }), + failed: DataTypes.INTEGER({ length: 10 }), + installed: DataTypes.INTEGER({ length: 10 }), + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'packages_metrics', + underscored: true, + paranoid: true, + }, +); diff --git a/src/models/user_tokens.js b/src/models/user_tokens.js deleted file mode 100644 index 81e38bbb..00000000 --- a/src/models/user_tokens.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -module.exports = function (sequelize, DataTypes) { - var UserTokens = sequelize.define( - 'UserTokens', - { - id: { - type: DataTypes.BIGINT(20), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - uid: DataTypes.BIGINT(20), - name: DataTypes.STRING, - tokens: DataTypes.STRING, - description: DataTypes.STRING, - is_session: DataTypes.INTEGER(3), - created_by: DataTypes.STRING, - created_at: DataTypes.DATE, - expires_at: DataTypes.DATE, - }, - { - updatedAt: false, - tableName: 'user_tokens', - underscored: true, - paranoid: true, - }, - ); - - return UserTokens; -}; diff --git a/src/models/user_tokens.ts b/src/models/user_tokens.ts new file mode 100644 index 00000000..128cd316 --- /dev/null +++ b/src/models/user_tokens.ts @@ -0,0 +1,40 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface UserTokensInterface extends Model { + id: number; + uid: number; + name: string; + tokens: string; + description: string; + is_session: number; + created_by: string; + created_at: Date; + expires_at: Date; +} + +export const UserTokens = sequelize.define( + 'UserTokens', + { + id: { + type: DataTypes.BIGINT({ length: 20 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + uid: DataTypes.BIGINT({ length: 20 }), + name: DataTypes.STRING, + tokens: DataTypes.STRING, + description: DataTypes.STRING, + is_session: DataTypes.INTEGER({ length: 3 }), + created_by: DataTypes.STRING, + created_at: DataTypes.DATE, + expires_at: DataTypes.DATE, + }, + { + updatedAt: false, + tableName: 'user_tokens', + underscored: true, + paranoid: true, + }, +); diff --git a/src/models/users.js b/src/models/users.js deleted file mode 100644 index 0ecfc3bf..00000000 --- a/src/models/users.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -module.exports = function (sequelize, DataTypes) { - var Users = sequelize.define( - 'Users', - { - id: { - type: DataTypes.BIGINT(20), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - username: DataTypes.STRING, - password: DataTypes.STRING, - email: DataTypes.STRING, - identical: DataTypes.STRING, - ack_code: DataTypes.STRING, - created_at: DataTypes.DATE, - updated_at: DataTypes.DATE, - }, - { - tableName: 'users', - underscored: true, - }, - ); - - return Users; -}; diff --git a/src/models/users.ts b/src/models/users.ts new file mode 100644 index 00000000..def71433 --- /dev/null +++ b/src/models/users.ts @@ -0,0 +1,36 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface UsersInterface extends Model { + id: number; + username: string; + password: string; + email: string; + identical: string; + ack_code: string; + created_at: Date; + updated_at: Date; +} + +export const Users = sequelize.define( + 'Users', + { + id: { + type: DataTypes.BIGINT({ length: 20 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + username: DataTypes.STRING, + password: DataTypes.STRING, + email: DataTypes.STRING, + identical: DataTypes.STRING, + ack_code: DataTypes.STRING, + created_at: DataTypes.DATE, + updated_at: DataTypes.DATE, + }, + { + tableName: 'users', + underscored: true, + }, +); diff --git a/src/models/versions.js b/src/models/versions.js deleted file mode 100644 index 2c5d677e..00000000 --- a/src/models/versions.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -module.exports = function (sequelize, DataTypes) { - var Versions = sequelize.define( - 'Versions', - { - id: { - type: DataTypes.INTEGER(10), - allowNull: false, - autoIncrement: true, - primaryKey: true, - }, - type: DataTypes.INTEGER, - version: DataTypes.STRING, - }, - { - tableName: 'versions', - updatedAt: false, - createdAt: false, - }, - ); - - return Versions; -}; diff --git a/src/models/versions.ts b/src/models/versions.ts new file mode 100644 index 00000000..9d3bad94 --- /dev/null +++ b/src/models/versions.ts @@ -0,0 +1,27 @@ +import { DataTypes, Model } from 'sequelize'; +import { sequelize } from './index'; + +interface VersionsInterface extends Model { + id: number; + type: number; + version: string; +} + +export const Versions = sequelize.define( + 'Versions', + { + id: { + type: DataTypes.INTEGER({ length: 10 }), + allowNull: false, + autoIncrement: true, + primaryKey: true, + }, + type: DataTypes.INTEGER, + version: DataTypes.STRING, + }, + { + tableName: 'versions', + updatedAt: false, + createdAt: false, + }, +); diff --git a/src/routes/accessKeys.js b/src/routes/accessKeys.js index a1b36140..0461769f 100644 --- a/src/routes/accessKeys.js +++ b/src/routes/accessKeys.js @@ -1,12 +1,14 @@ -var express = require('express'); -var router = express.Router(); -var _ = require('lodash'); +import express from 'express'; +import _ from 'lodash'; +import { logger } from 'kv-logger'; +import { UserTokens } from '../models/user_tokens'; + var security = require('../core/utils/security'); -var models = require('../models'); var middleware = require('../core/middleware'); var accountManager = require('../core/services/account-manager')(); var AppError = require('../core/app-error'); -var { logger } = require('kv-logger'); + +const router = express.Router(); router.get('/', middleware.checkToken, (req, res, next) => { logger.debug('request get acceesKeys'); @@ -84,7 +86,7 @@ router.post('/', middleware.checkToken, (req, res, next) => { router.delete('/:name', middleware.checkToken, (req, res, next) => { var name = _.trim(decodeURI(req.params.name)); var uid = req.users.id; - return models.UserTokens.destroy({ where: { name: name, uid: uid } }) + return UserTokens.destroy({ where: { name: name, uid: uid } }) .then((rowNum) => { logger.debug('delete acceesKey:', name); res.send({ friendlyName: name }); diff --git a/src/routes/apps.js b/src/routes/apps.js index a69fb3df..0e7aae6c 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -1,8 +1,10 @@ -var express = require('express'); -var router = express.Router(); -var _ = require('lodash'); +import express from 'express'; +import _ from 'lodash'; +import validator from 'validator'; +import { config } from '../core/config'; +import { logger } from 'kv-logger'; + var middleware = require('../core/middleware'); -var validator = require('validator'); var accountManager = require('../core/services/account-manager')(); var Deployments = require('../core/services/deployments'); var Collaborators = require('../core/services/collaborators'); @@ -10,8 +12,8 @@ var AppManager = require('../core/services/app-manager'); var PackageManager = require('../core/services/package-manager'); var AppError = require('../core/app-error'); var common = require('../core/utils/common'); -const { config } = require('../core/config'); -const { logger } = require('kv-logger'); + +const router = express.Router(); function delay(ms) { return new Promise(function (resolve) { @@ -587,7 +589,7 @@ router.get('/:appName/collaborators', middleware.checkToken, (req, res, next) => return collaborators.listCollaborators(col.appid); }) .then((data) => { - rs = _.reduce( + const rs = _.reduce( data, (result, value, key) => { if (_.eq(key, req.users.email)) { diff --git a/src/routes/auth.js b/src/routes/auth.js index 4d21ed88..399db63e 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -1,10 +1,10 @@ -const express = require('express'); -const _ = require('lodash'); -const validator = require('validator'); -const { logger } = require('kv-logger'); -const jwt = require('jsonwebtoken'); +import express from 'express'; +import _ from 'lodash'; +import validator from 'validator'; +import { logger } from 'kv-logger'; +import jwt from 'jsonwebtoken'; -const { config } = require('../core/config'); +import { config } from '../core/config'; const router = express.Router(); diff --git a/src/routes/users.js b/src/routes/users.js index dc361fe6..20a30add 100644 --- a/src/routes/users.js +++ b/src/routes/users.js @@ -1,11 +1,15 @@ -var express = require('express'); -var router = express.Router(); -var _ = require('lodash'); -var models = require('../models'); +import express from 'express'; +import { logger } from 'kv-logger'; +import _ from 'lodash'; + +import { Users } from '../models/users'; + var middleware = require('../core/middleware'); var AccountManager = require('../core/services/account-manager'); var AppError = require('../core/app-error'); +const router = express.Router(); + router.get('/', middleware.checkToken, (req, res) => { res.send({ title: 'CodePushServer' }); }); @@ -37,7 +41,7 @@ router.post('/', (req, res, next) => { router.get('/exists', (req, res, next) => { var email = _.trim(_.get(req, 'query.email')); - models.Users.findOne({ where: { email: email } }) + Users.findOne({ where: { email: email } }) .then((u) => { if (!email) { throw new AppError.AppError(`请您输入邮箱地址`); @@ -56,13 +60,16 @@ router.get('/exists', (req, res, next) => { router.post('/registerCode', (req, res, next) => { var email = _.get(req, 'body.email'); var accountManager = new AccountManager(); + logger.info('try send register code', { email }); return accountManager .sendRegisterCode(email) .then(() => { + logger.info('send register code success', { email }); res.send({ status: 'OK' }); }) .catch((e) => { if (e instanceof AppError.AppError) { + logger.warn('send register code error', { email, message: e.message }); res.send({ status: 'ERROR', message: e.message }); } else { next(e); diff --git a/src/www.ts b/src/www.ts index cb458fd5..8cbeca15 100755 --- a/src/www.ts +++ b/src/www.ts @@ -10,9 +10,9 @@ import validator from 'validator'; import _ from 'lodash'; import { app } from './app'; +import { Versions } from './models/versions'; var constConfig = require('./core/const'); -var models = require('./models'); /** * Get port from environment and store in Express. @@ -41,7 +41,7 @@ const server = http.createServer(app); /** * Listen on provided port, on all network interfaces. */ -models.Versions.findOne({ where: { type: 1 } }) +Versions.findOne({ where: { type: 1 } }) .then(function (v) { if (!v || v.get('version') != constConfig.CURRENT_DB_VERSION) { throw new Error( diff --git a/tests/api/init/database.js b/tests/api/init/database.js index 52a881d7..4a5431ba 100644 --- a/tests/api/init/database.js +++ b/tests/api/init/database.js @@ -1,8 +1,8 @@ -var mysql = require('mysql2'); -var redis = require('redis'); -var should = require('should'); -var fs = require('fs'); -var path = require('path'); +const mysql = require('mysql2'); +const redis = require('redis'); +const should = require('should'); +const fs = require('fs'); +const path = require('path'); const { config } = require('../../../bin/core/config'); From e20f2c6bcd67269d7c575a2179fc206682813f11 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 9 Feb 2022 14:43:56 +0800 Subject: [PATCH 159/347] refactor: add some logs in release api --- src/core/services/package-manager.js | 7 +++-- src/routes/apps.js | 39 ++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/core/services/package-manager.js b/src/core/services/package-manager.js index fc506119..7e2933e2 100644 --- a/src/core/services/package-manager.js +++ b/src/core/services/package-manager.js @@ -249,8 +249,11 @@ proto.generateOneDiffPackage = function ( if (!_.isEmpty(diffPackage)) { return; } - logger.debug('originDataCenter', originDataCenter); - logger.debug('oldPackageDataCenter', oldPackageDataCenter); + logger.debug('generateOneDiffPackage', { + packageId, + originDataCenter, + oldPackageDataCenter, + }); var downloadURL = common.getBlobDownloadUrl(diffManifestBlobHash); return common .createFileFromRequest(downloadURL, path.join(workDirectoryPath, diffManifestBlobHash)) diff --git a/src/routes/apps.js b/src/routes/apps.js index 0e7aae6c..250857cd 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -296,7 +296,12 @@ router.post( accountManager .collaboratorCan(uid, appName) .then((col) => { - logger.debug(col); + logger.debug('release user check pass', { + uid, + appName, + deploymentName, + }); + return deployments .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { @@ -304,6 +309,12 @@ router.post( logger.debug(`does not find the deployment`); throw new AppError.AppError('does not find the deployment'); } + logger.debug('release deployment check ok', { + uid, + appName, + deploymentName, + }); + return packageManager .parseReqFile(req) .then((data) => { @@ -311,7 +322,12 @@ router.post( logger.debug(`upload file type is invlidate`, data.package); throw new AppError.AppError('upload file type is invalidate'); } - logger.debug('packageInfo:', data.packageInfo); + logger.debug('release packagee parse ok', { + uid, + appName, + deploymentName, + }); + return packageManager .releasePackage( deploymentInfo.appid, @@ -356,6 +372,12 @@ router.post( }); }) .then(() => { + logger.info('release success', { + uid, + appName, + deploymentName, + }); + res.send('{"msg": "succeed"}'); }) .catch((e) => { @@ -528,6 +550,12 @@ var rollbackCb = function (req, res, next) { var deploymentName = _.trim(req.params.deploymentName); var uid = req.users.id; var targetLabel = _.trim(_.get(req, 'params.label')); + logger.info('try to rollback', { + uid, + appName, + deploymentName, + targetLabel, + }); var deployments = new Deployments(); var packageManager = new PackageManager(); accountManager @@ -560,6 +588,13 @@ var rollbackCb = function (req, res, next) { }); }) .then(() => { + logger.info('rollback success', { + uid, + appName, + deploymentName, + targetLabel, + }); + res.send('ok'); }) .catch((e) => { From 57bbdc58d7c9174f4d00ad9ec1525f5f828e00b4 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 9 Feb 2022 14:45:47 +0800 Subject: [PATCH 160/347] feat!: drop upyun support --- package-lock.json | 85 ---------------------------------------- package.json | 1 - src/core/config.ts | 8 ---- src/core/utils/common.js | 44 --------------------- 4 files changed, 138 deletions(-) diff --git a/package-lock.json b/package-lock.json index 313103ef..1d7f2bb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1344,14 +1344,6 @@ "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==", "dev": true }, - "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", - "requires": { - "follow-redirects": "1.5.10" - } - }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -1393,11 +1385,6 @@ "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" - }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -1627,11 +1614,6 @@ "is-regex": "^1.0.3" } }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" - }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -2214,11 +2196,6 @@ "which": "^2.0.1" } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" - }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -2264,14 +2241,6 @@ "mimic-fn": "^3.0.0" } }, - "debug": { - "version": "3.1.0", - "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", - "requires": { - "ms": "2.0.0" - } - }, "decamelize": { "version": "1.2.0", "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", @@ -3582,14 +3551,6 @@ } } }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -4095,11 +4056,6 @@ "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" }, - "hmacsha1": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hmacsha1/-/hmacsha1-1.0.0.tgz", - "integrity": "sha1-wbeuA6TqEWNICQrxT4FIwSk4qRc=" - }, "hosted-git-info": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", @@ -4310,11 +4266,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -4908,16 +4859,6 @@ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, "media-typer": { "version": "0.3.0", "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", @@ -7331,32 +7272,6 @@ "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "upyun": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/upyun/-/upyun-3.4.4.tgz", - "integrity": "sha512-OLTJ9PxFIMXWfFSoQqSY357sIO12hWPqIm6lpJozPZWkMH9PmFOUR/B7E3DBinneoBvZJkKELVD+Rsx/NwhUtQ==", - "requires": { - "axios": "^0.19.1", - "base-64": "^0.1.0", - "form-data": "^3.0.0", - "hmacsha1": "^1.0.0", - "is-promise": "^2.1.0", - "md5": "^2.2.1", - "mime-types": "^2.1.15" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/package.json b/package.json index 20da6cc3..01311e95 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,6 @@ "redis": "3.1.2", "sequelize": "6.16.0", "slash": "3.0.0", - "upyun": "3.4.4", "validator": "13.7.0", "yargs": "17.3.1", "yazl": "2.5.1" diff --git a/src/core/config.ts b/src/core/config.ts index 2ae36c64..75386f9e 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -38,14 +38,6 @@ export const config = { bucketName: process.env.QINIU_BUCKET_NAME, downloadUrl: process.env.QINIU_DOWNLOAD_URL || process.env.DOWNLOAD_URL, }, - // Config for upyun (https://www.upyun.com/) storage when storageType value is "upyun" - upyun: { - storageDir: process.env.UPYUN_STORAGE_DIR, - serviceName: process.env.UPYUN_SERVICE_NAME, - operatorName: process.env.UPYUN_OPERATOR_NAME, - operatorPass: process.env.UPYUN_OPERATOR_PASS, - downloadUrl: process.env.UPYUN_DOWNLOAD_URL || process.env.DOWNLOAD_URL, - }, // Config for Amazon s3 (https://aws.amazon.com/cn/s3/) storage when storageType value is "s3". s3: { accessKeyId: process.env.AWS_ACCESS_KEY_ID, diff --git a/src/core/utils/common.js b/src/core/utils/common.js index bb26eccc..ce2d7c35 100644 --- a/src/core/utils/common.js +++ b/src/core/utils/common.js @@ -5,7 +5,6 @@ import extract from 'extract-zip'; import _ from 'lodash'; import validator from 'validator'; import qiniu from 'qiniu'; -var upyun = require('upyun'); const jschardet = require('jschardet'); import path from 'path'; import util from 'util'; @@ -225,8 +224,6 @@ common.uploadFileToStorage = function (key, filePath) { return common.uploadFileToOSS(key, filePath); } else if (storageType === 'qiniu') { return common.uploadFileToQiniu(key, filePath); - } else if (storageType === 'upyun') { - return common.uploadFileToUpyun(key, filePath); } else if (storageType === 'tencentcloud') { return common.uploadFileToTencentCloud(key, filePath); } @@ -357,47 +354,6 @@ common.uploadFileToQiniu = function (key, filePath) { }); }; -common.uploadFileToUpyun = function (key, filePath) { - var serviceName = _.get(config, 'upyun.serviceName'); - var operatorName = _.get(config, 'upyun.operatorName'); - var operatorPass = _.get(config, 'upyun.operatorPass', ''); - var storageDir = _.get(config, 'upyun.storageDir', ''); - var service = new upyun.Service(serviceName, operatorName, operatorPass); - var client = new upyun.Client(service); - return new Promise((resolve, reject) => { - client - .makeDir(storageDir) - .then((result) => { - if (!storageDir) { - reject(new AppError.AppError('Please config the upyun remoteDir!')); - return; - } - let remotePath = storageDir + '/' + key; - logger.debug('uploadFileToUpyun remotePath:', remotePath); - logger.debug('uploadFileToUpyun mkDir result:', result); - client - .putFile(remotePath, fs.createReadStream(filePath)) - .then((data) => { - logger.debug('uploadFileToUpyun putFile response:', data); - if (data) { - resolve(key); - } else { - logger.debug('uploadFileToUpyun putFile failed!', data); - reject(new AppError.AppError('Upload file to upyun failed!')); - } - }) - .catch((e1) => { - logger.debug('uploadFileToUpyun putFile exception e1:', e1); - reject(new AppError.AppError(JSON.stringify(e1))); - }); - }) - .catch((e) => { - logger.debug('uploadFileToUpyun putFile exception e:', e); - reject(new AppError.AppError(JSON.stringify(e))); - }); - }); -}; - common.uploadFileToS3 = function (key, filePath) { var AWS = require('aws-sdk'); return new Promise((resolve, reject) => { From 413f35b5e31ee1b24a21f6c1ff26e261d1d300f3 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 9 Feb 2022 15:40:16 +0800 Subject: [PATCH 161/347] refactor: turn app-error to ts --- src/app.ts | 8 ++- src/core/app-error.js | 34 ------------ src/core/app-error.ts | 23 ++++++++ src/core/middleware.js | 33 ++++++------ src/core/services/account-manager.js | 48 ++++++++--------- src/core/services/app-manager.js | 8 +-- src/core/services/client-manager.js | 22 ++++---- src/core/services/collaborators.js | 10 ++-- src/core/services/datacenter-manager.js | 5 +- src/core/services/deployments.js | 18 +++---- src/core/services/email-manager.js | 4 +- src/core/services/package-manager.js | 71 ++++++++++++------------- src/core/utils/common.js | 54 +++++++++---------- src/core/utils/factory.js | 1 - src/core/utils/security.js | 28 +++++----- src/routes/accessKeys.js | 8 +-- src/routes/apps.js | 71 +++++++++++++------------ src/routes/auth.js | 9 ++-- src/routes/index.js | 19 ++++--- src/routes/indexV1.js | 19 ++++--- src/routes/users.js | 16 +++--- 21 files changed, 247 insertions(+), 262 deletions(-) delete mode 100644 src/core/app-error.js create mode 100644 src/core/app-error.ts diff --git a/src/app.ts b/src/app.ts index 1471a201..3da56ea1 100644 --- a/src/app.ts +++ b/src/app.ts @@ -8,6 +8,7 @@ import fs from 'fs'; import { logger } from 'kv-logger'; import { config } from './core/config'; +import { AppError, NotFound } from './core/app-error'; const routes = require('./routes/index'); const indexV1 = require('./routes/indexV1'); @@ -16,7 +17,6 @@ const accessKeys = require('./routes/accessKeys'); const account = require('./routes/account'); const users = require('./routes/users'); const apps = require('./routes/apps'); -const { AppError, NotFound } = require('./core/app-error'); export const app = express(); @@ -82,15 +82,13 @@ app.use('/apps', apps); // 404 handler app.use(function (req, res, next) { - var e = new NotFound(`${req.method} ${req.url}`); - res.status(404).send(e.message); - logger.debug(e); + throw new NotFound(`${req.method} ${req.url} not found`); }); // error handler app.use(function (err, req, res, next) { if (err instanceof AppError) { - res.send(err.message); + res.status(err.status).send(err.message); logger.debug(err); } else { res.status(err.status || 500).send(err.message); diff --git a/src/core/app-error.js b/src/core/app-error.js deleted file mode 100644 index adcd6418..00000000 --- a/src/core/app-error.js +++ /dev/null @@ -1,34 +0,0 @@ -var util = require('util'); - -var AppError = function (msg, constr) { - if (msg) { - msg = msg.toString(); - } - Error.captureStackTrace(this, constr || this); - this.message = msg || 'Error'; - this.name = 'AppError'; - this.status = 200; -}; -util.inherits(AppError, Error); - -var NotFoundError = function (msg) { - NotFoundError.super_.call(this, msg, this.constructor); - this.message = msg || 'Not Found'; - this.name = 'NotFoundError'; - this.status = 404; -}; -util.inherits(NotFoundError, AppError); - -var UnauthorizedError = function (msg) { - UnauthorizedError.super_.call(this, msg, this.constructor); - this.message = msg || `401 Unauthorized`; - this.name = 'UnauthorizedError'; - this.status = 401; -}; -util.inherits(UnauthorizedError, AppError); - -module.exports = { - AppError: AppError, - NotFound: NotFoundError, - Unauthorized: UnauthorizedError, -}; diff --git a/src/core/app-error.ts b/src/core/app-error.ts new file mode 100644 index 00000000..44734760 --- /dev/null +++ b/src/core/app-error.ts @@ -0,0 +1,23 @@ +export class AppError extends Error { + constructor(message) { + super(message); + this.name = 'AppError'; + } + public status = 200; +} + +export class NotFound extends AppError { + constructor(message) { + super(message || 'Not Found'); + this.name = 'NotFoundError'; + } + public status = 404; +} + +export class Unauthorized extends AppError { + constructor(message) { + super(message || 'Unauthorized'); + this.name = 'UnauthorizedError'; + } + public status = 401; +} diff --git a/src/core/middleware.js b/src/core/middleware.js index bd0d222b..d9ff5a8a 100644 --- a/src/core/middleware.js +++ b/src/core/middleware.js @@ -1,15 +1,13 @@ -'use strict'; - +import { Op } from 'sequelize'; +import _ from 'lodash'; +import moment from 'moment'; import { UserTokens } from '../models/user_tokens'; import { Users } from '../models/users'; import { config } from '../core/config'; +import { AppError, Unauthorized } from './app-error'; -var _ = require('lodash'); var security = require('../core/utils/security'); -var moment = require('moment'); -var AppError = require('./app-error'); - var middleware = module.exports; var checkAuthToken = function (authToken) { @@ -19,20 +17,19 @@ var checkAuthToken = function (authToken) { }) .then((users) => { if (_.isEmpty(users)) { - throw new AppError.Unauthorized(); + throw new Unauthorized(); } - var Sequelize = require('sequelize'); return UserTokens.findOne({ where: { tokens: authToken, uid: users.id, expires_at: { - [Sequelize.Op.gt]: moment().format('YYYY-MM-DD HH:mm:ss'), + [Op.gt]: moment().format('YYYY-MM-DD HH:mm:ss'), }, }, }).then((tokenInfo) => { if (_.isEmpty(tokenInfo)) { - throw new AppError.Unauthorized(); + throw new Unauthorized(); } return users; }); @@ -45,14 +42,14 @@ var checkAuthToken = function (authToken) { var checkAccessToken = function (accessToken) { return new Promise((resolve, reject) => { if (_.isEmpty(accessToken)) { - return reject(new AppError.Unauthorized()); + return reject(new Unauthorized()); } var tokenSecret = _.get(config, 'jwt.tokenSecret'); var jwt = require('jsonwebtoken'); try { var authData = jwt.verify(accessToken, tokenSecret); } catch (e) { - return reject(new AppError.Unauthorized()); + return reject(new Unauthorized()); } var uid = _.get(authData, 'uid', null); var hash = _.get(authData, 'hash', null); @@ -62,10 +59,10 @@ var checkAccessToken = function (accessToken) { }) .then((users) => { if (_.isEmpty(users)) { - throw new AppError.Unauthorized(); + throw new Unauthorized(); } if (!_.eq(hash, security.md5(users.get('ack_code')))) { - throw new AppError.Unauthorized(); + throw new Unauthorized(); } resolve(users); }) @@ -73,7 +70,7 @@ var checkAccessToken = function (accessToken) { reject(e); }); } else { - reject(new AppError.Unauthorized()); + reject(new Unauthorized()); } }); }; @@ -103,7 +100,7 @@ middleware.checkToken = function (req, res, next) { return users; }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(e.status || 404).send(e.message); } else { next(e); @@ -117,13 +114,13 @@ middleware.checkToken = function (req, res, next) { return users; }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(e.status || 404).send(e.message); } else { next(e); } }); } else { - res.send(new AppError.Unauthorized(`Auth type not supported.`)); + res.send(new Unauthorized(`Auth type not supported.`)); } }; diff --git a/src/core/services/account-manager.js b/src/core/services/account-manager.js index c78c897f..cf2098b3 100644 --- a/src/core/services/account-manager.js +++ b/src/core/services/account-manager.js @@ -1,17 +1,17 @@ -'use strict'; +import _ from 'lodash'; +import validator from 'validator'; +import { logger } from 'kv-logger'; +import moment from 'moment'; + import { Users } from '../../models/users'; import { UserTokens } from '../../models/user_tokens'; import { findCollaboratorsByAppNameAndUid } from '../../models/collaborators'; import { config } from '../config'; +import { AppError } from '../app-error'; -var _ = require('lodash'); -var validator = require('validator'); -var { logger } = require('kv-logger'); var security = require('../utils/security'); var factory = require('../utils/factory'); -var moment = require('moment'); var EmailManager = require('./email-manager'); -var AppError = require('../app-error'); var proto = (module.exports = function () { function AccountManager() {} @@ -23,7 +23,7 @@ proto.collaboratorCan = function (uid, appName) { return this.getCollaborator(uid, appName).then((data) => { if (!data) { logger.debug(`collaboratorCan App ${appName} not exists.`); - throw new AppError.AppError(`App ${appName} not exists.`); + throw new AppError(`App ${appName} not exists.`); } return data; }); @@ -33,11 +33,11 @@ proto.ownerCan = function (uid, appName) { return this.getCollaborator(uid, appName).then((data) => { if (!data) { logger.debug(`ownerCan App ${appName} not exists.`); - throw new AppError.AppError(`App ${appName} not exists.`); + throw new AppError(`App ${appName} not exists.`); } if (!_.eq(_.get(data, 'roles'), 'Owner')) { logger.debug(`ownerCan Permission Deny, You are not owner!`); - throw new AppError.AppError('Permission Deny, You are not owner!'); + throw new AppError('Permission Deny, You are not owner!'); } return data; }); @@ -50,7 +50,7 @@ proto.getCollaborator = function (uid, appName) { proto.findUserByEmail = function (email) { return Users.findOne({ where: { email: email } }).then((data) => { if (_.isEmpty(data)) { - throw new AppError.AppError(email + ' does not exist.'); + throw new AppError(email + ' does not exist.'); } else { return data; } @@ -99,10 +99,10 @@ const LOGIN_LIMIT_PRE = 'LOGIN_LIMIT_PRE_'; proto.login = function (account, password) { if (_.isEmpty(account)) { - return Promise.reject(new AppError.AppError('请您输入邮箱地址')); + return Promise.reject(new AppError('请您输入邮箱地址')); } if (_.isEmpty(password)) { - return Promise.reject(new AppError.AppError('请您输入密码')); + return Promise.reject(new AppError('请您输入密码')); } var where = {}; if (validator.isEmail(account)) { @@ -114,7 +114,7 @@ proto.login = function (account, password) { return Users.findOne({ where: where }) .then((users) => { if (_.isEmpty(users)) { - throw new AppError.AppError('您输入的邮箱或密码有误'); + throw new AppError('您输入的邮箱或密码有误'); } return users; }) @@ -126,7 +126,7 @@ proto.login = function (account, password) { .get(loginKey) .then((loginErrorTimes) => { if (loginErrorTimes > tryLoginTimes) { - throw new AppError.AppError(`您输入密码错误次数超过限制,帐户已经锁定`); + throw new AppError(`您输入密码错误次数超过限制,帐户已经锁定`); } return users; }) @@ -155,7 +155,7 @@ proto.login = function (account, password) { }) .finally(() => client.quit()); } - throw new AppError.AppError('您输入的邮箱或密码有误'); + throw new AppError('您输入的邮箱或密码有误'); } else { return users; } @@ -168,12 +168,12 @@ const EXPIRED_SPEED = 10; proto.sendRegisterCode = function (email) { if (_.isEmpty(email)) { - return Promise.reject(new AppError.AppError('请您输入邮箱地址')); + return Promise.reject(new AppError('请您输入邮箱地址')); } return Users.findOne({ where: { email: email } }) .then((u) => { if (u) { - throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); + throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); } }) .then(() => { @@ -198,7 +198,7 @@ proto.checkRegisterCode = function (email, token) { return Users.findOne({ where: { email: email } }) .then((u) => { if (u) { - throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); + throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); } }) .then(() => { @@ -206,7 +206,7 @@ proto.checkRegisterCode = function (email, token) { var client = factory.getRedisClient(); return client.get(registerKey).then((storageToken) => { if (_.isEmpty(storageToken)) { - throw new AppError.AppError(`验证码已经失效,请您重新获取`); + throw new AppError(`验证码已经失效,请您重新获取`); } if (!_.eq(token, storageToken)) { client @@ -218,7 +218,7 @@ proto.checkRegisterCode = function (email, token) { return ttl; }) .finally(() => client.quit()); - throw new AppError.AppError(`您输入的验证码不正确,请重新输入`); + throw new AppError(`您输入的验证码不正确,请重新输入`); } return storageToken; }); @@ -229,7 +229,7 @@ proto.register = function (email, password) { return Users.findOne({ where: { email: email } }) .then((u) => { if (u) { - throw new AppError.AppError(`"${email}" 已经注册过,请更换邮箱注册`); + throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); } }) .then(() => { @@ -244,19 +244,19 @@ proto.register = function (email, password) { proto.changePassword = function (uid, oldPassword, newPassword) { if (!_.isString(newPassword) || newPassword.length < 6) { - return Promise.reject(new AppError.AppError('请您输入6~20位长度的新密码')); + return Promise.reject(new AppError('请您输入6~20位长度的新密码')); } return Users.findOne({ where: { id: uid } }) .then((u) => { if (!u) { - throw new AppError.AppError(`未找到用户信息`); + throw new AppError(`未找到用户信息`); } return u; }) .then((u) => { var isEq = security.passwordVerifySync(oldPassword, u.get('password')); if (!isEq) { - throw new AppError.AppError(`您输入的旧密码不正确,请重新输入`); + throw new AppError(`您输入的旧密码不正确,请重新输入`); } u.set('password', security.passwordHashSync(newPassword)); u.set('ack_code', security.randToken(5)); diff --git a/src/core/services/app-manager.js b/src/core/services/app-manager.js index 071d62dd..b0cf5f7b 100644 --- a/src/core/services/app-manager.js +++ b/src/core/services/app-manager.js @@ -1,13 +1,13 @@ -'use strict'; +import _ from 'lodash'; + import { Apps } from '../../models/apps'; import { Collaborators } from '../../models/collaborators'; import { Deployments } from '../../models/deployments'; import { Users } from '../../models/users'; import { sequelize } from '../../models/index'; +import { AppError } from '../app-error'; -var _ = require('lodash'); var security = require('../../core/utils/security'); -var AppError = require('../app-error'); var proto = (module.exports = function () { function AppManager() {} @@ -75,7 +75,7 @@ proto.deleteApp = function (appId) { proto.modifyApp = function (appId, params) { return Apps.update(params, { where: { id: appId } }).then(([affectedCount, affectedRows]) => { if (!_.gt(affectedCount, 0)) { - throw AppError.AppError('modify errors'); + throw AppError('modify errors'); } return affectedCount; }); diff --git a/src/core/services/client-manager.js b/src/core/services/client-manager.js index a9424d9a..89040289 100644 --- a/src/core/services/client-manager.js +++ b/src/core/services/client-manager.js @@ -1,5 +1,7 @@ -'use strict'; import _ from 'lodash'; +import { logger } from 'kv-logger'; +import { Op } from 'sequelize'; + import { Deployments } from '../../models/deployments'; import { DeploymentsVersions } from '../../models/deployments_versions'; import { Packages } from '../../models/packages'; @@ -8,12 +10,10 @@ import { PackagesMetrics } from '../../models/packages_metrics'; import { LogReportDeploy } from '../../models/log_report_deploy'; import { LogReportDownload } from '../../models/log_report_download'; import { config } from '../config'; +import { AppError } from '../app-error'; var common = require('../utils/common'); var factory = require('../utils/factory'); -var AppError = require('../app-error'); -var { logger } = require('kv-logger'); -var Sequelize = require('sequelize'); var proto = (module.exports = function () { function ClientManager() {} @@ -151,19 +151,19 @@ proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, cli }; var self = this; if (_.isEmpty(deploymentKey) || _.isEmpty(appVersion)) { - return Promise.reject(new AppError.AppError('please input deploymentKey and appVersion')); + return Promise.reject(new AppError('please input deploymentKey and appVersion')); } return Deployments.findOne({ where: { deployment_key: deploymentKey } }) .then((dep) => { if (_.isEmpty(dep)) { - throw new AppError.AppError('Not found deployment, check deployment key is right.'); + throw new AppError('Not found deployment, check deployment key is right.'); } var version = common.parseVersion(appVersion); return DeploymentsVersions.findAll({ where: { deployment_id: dep.id, - min_version: { [Sequelize.Op.lte]: version }, - max_version: { [Sequelize.Op.gt]: version }, + min_version: { [Op.lte]: version }, + max_version: { [Op.gt]: version }, }, }).then((deploymentsVersionsMore) => { var distance = 0; @@ -250,18 +250,18 @@ proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, cli proto.getPackagesInfo = function (deploymentKey, label) { if (_.isEmpty(deploymentKey) || _.isEmpty(label)) { - return Promise.reject(new AppError.AppError('please input deploymentKey and label')); + return Promise.reject(new AppError('please input deploymentKey and label')); } return Deployments.findOne({ where: { deployment_key: deploymentKey } }) .then((dep) => { if (_.isEmpty(dep)) { - throw new AppError.AppError('does not found deployment'); + throw new AppError('does not found deployment'); } return Packages.findOne({ where: { deployment_id: dep.id, label: label } }); }) .then((packages) => { if (_.isEmpty(packages)) { - throw new AppError.AppError('does not found packages'); + throw new AppError('does not found packages'); } return packages; }); diff --git a/src/core/services/collaborators.js b/src/core/services/collaborators.js index a6f66191..aabeb54c 100644 --- a/src/core/services/collaborators.js +++ b/src/core/services/collaborators.js @@ -1,9 +1,7 @@ -'use strict'; +import _ from 'lodash'; import { Collaborators } from '../../models/collaborators'; import { Users } from '../../models/users'; - -var _ = require('lodash'); -var AppError = require('../app-error'); +import { AppError } from '../app-error'; var proto = (module.exports = function () { function Collaborators() {} @@ -54,7 +52,7 @@ proto.addCollaborator = function (appId, uid) { roles: 'Collaborator', }); } else { - throw new AppError.AppError('user already is Collaborator.'); + throw new AppError('user already is Collaborator.'); } }); }; @@ -62,7 +60,7 @@ proto.addCollaborator = function (appId, uid) { proto.deleteCollaborator = function (appId, uid) { return Collaborators.findOne({ where: { appid: appId, uid: uid } }).then((data) => { if (_.isEmpty(data)) { - throw new AppError.AppError('user is not a Collaborator'); + throw new AppError('user is not a Collaborator'); } else { return Collaborators.destroy({ where: { id: data.id } }); } diff --git a/src/core/services/datacenter-manager.js b/src/core/services/datacenter-manager.js index 737b2822..7433c91e 100644 --- a/src/core/services/datacenter-manager.js +++ b/src/core/services/datacenter-manager.js @@ -1,13 +1,12 @@ -'use strict'; import _ from 'lodash'; import fs from 'fs'; import path from 'path'; import { logger } from 'kv-logger'; import { config } from '../config'; +import { AppError } from '../app-error'; var security = require('../utils/security'); var common = require('../utils/common'); -var AppError = require('../app-error'); const MANIFEST_FILE_NAME = 'manifest.json'; const CONTENTS_NAME = 'contents'; @@ -39,7 +38,7 @@ proto.getPackageInfo = function (packageHash) { var contentPath = path.join(packageHashPath, CONTENTS_NAME); return this.buildPackageInfo(packageHash, packageHashPath, contentPath, manifestFile); } else { - throw new AppError.AppError("can't get PackageInfo"); + throw new AppError("can't get PackageInfo"); } }; diff --git a/src/core/services/deployments.js b/src/core/services/deployments.js index 0fc574af..be16144e 100644 --- a/src/core/services/deployments.js +++ b/src/core/services/deployments.js @@ -1,4 +1,7 @@ -'use strict'; +import _ from 'lodash'; +import moment from 'moment'; +import { logger } from 'kv-logger'; + import { Deployments } from '../../models/deployments'; import { DeploymentsVersions } from '../../models/deployments_versions'; import { DeploymentsHistory } from '../../models/deployments_history'; @@ -7,13 +10,10 @@ import { PackagesDiff } from '../../models/packages_diff'; import { PackagesMetrics } from '../../models/packages_metrics'; import { Users } from '../../models/users'; import { sequelize } from '../../models/index'; +import { AppError } from '../app-error'; var security = require('../../core/utils/security'); var common = require('../../core/utils/common'); -var _ = require('lodash'); -var moment = require('moment'); -var AppError = require('../app-error'); -var { logger } = require('kv-logger'); var proto = (module.exports = function () { function Deployments() {} @@ -30,7 +30,7 @@ proto.existDeloymentName = function (appId, name) { where: { appid: appId, name: name }, }).then((data) => { if (!_.isEmpty(data)) { - throw new AppError.AppError(name + ' name does Exist!'); + throw new AppError(name + ' name does Exist!'); } else { return data; } @@ -41,7 +41,7 @@ proto.addDeloyment = function (name, appId, uid) { var self = this; return Users.findByPk(uid).then((user) => { if (_.isEmpty(user)) { - throw new AppError.AppError("can't find user"); + throw new AppError("can't find user"); } return self.existDeloymentName(appId, name).then(() => { var identical = user.identical; @@ -66,7 +66,7 @@ proto.renameDeloymentByName = function (deploymentName, appId, newName) { if (_.gt(affectedCount, 0)) { return { name: newName }; } else { - throw new AppError.AppError(`does not find the deployment "${deploymentName}"`); + throw new AppError(`does not find the deployment "${deploymentName}"`); } }); }); @@ -79,7 +79,7 @@ proto.deleteDeloymentByName = function (deploymentName, appId) { if (_.gt(rowNum, 0)) { return { name: `${deploymentName}` }; } else { - throw new AppError.AppError(`does not find the deployment "${deploymentName}"`); + throw new AppError(`does not find the deployment "${deploymentName}"`); } }); }; diff --git a/src/core/services/email-manager.js b/src/core/services/email-manager.js index 58df2f4c..01a32956 100644 --- a/src/core/services/email-manager.js +++ b/src/core/services/email-manager.js @@ -1,8 +1,8 @@ -'use strict'; import _ from 'lodash'; import nodemailer from 'nodemailer'; import { config } from '../config'; +import { AppError } from '../app-error'; var proto = (module.exports = function () { function EmailManager() {} @@ -13,7 +13,7 @@ var proto = (module.exports = function () { proto.sendMail = function (options) { return new Promise((resolve, reject) => { if (!_.get(options, 'to')) { - reject(new AppError.AppError('to是必传参数')); + reject(new AppError('to是必传参数')); return; } var smtpConfig = _.get(config, 'smtpConfig'); diff --git a/src/core/services/package-manager.js b/src/core/services/package-manager.js index 7e2933e2..d63673b5 100644 --- a/src/core/services/package-manager.js +++ b/src/core/services/package-manager.js @@ -1,4 +1,12 @@ -'use strict'; +import { Op } from 'sequelize'; +import _ from 'lodash'; +import formidable from 'formidable'; +import fs from 'fs'; +import slash from 'slash'; +import os from 'os'; +import path from 'path'; +import { logger } from 'kv-logger'; + import { Apps } from '../../models/apps'; import { Deployments, generateDeploymentsLabelId } from '../../models/deployments'; import { DeploymentsVersions } from '../../models/deployments_versions'; @@ -7,20 +15,12 @@ import { Packages } from '../../models/packages'; import { PackagesDiff } from '../../models/packages_diff'; import { PackagesMetrics } from '../../models/packages_metrics'; import { sequelize } from '../../models/index'; +import { AppError } from '../app-error'; -var Sequelize = require('sequelize'); var security = require('../utils/security'); -var _ = require('lodash'); -var formidable = require('formidable'); var yazl = require('yazl'); -var fs = require('fs'); -var slash = require('slash'); var common = require('../utils/common'); -var os = require('os'); -var path = require('path'); -var AppError = require('../app-error'); var constConfig = require('../const'); -var { logger } = require('kv-logger'); var proto = (module.exports = function () { function PackageManager() {} @@ -39,7 +39,7 @@ proto.findPackageInfoByDeploymentIdAndLabel = function (deploymentId, label) { proto.findLatestPackageInfoByDeployVersion = function (deploymentsVersionsId) { return DeploymentsVersions.findByPk(deploymentsVersionsId).then((deploymentsVersions) => { if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { - var e = new AppError.AppError('not found last packages'); + var e = new AppError('not found last packages'); logger.debug(e); throw e; } @@ -54,13 +54,13 @@ proto.parseReqFile = function (req) { form.parse(req, (err, fields, files) => { if (err) { logger.debug('parseReqFile:', err); - reject(new AppError.AppError('upload error')); + reject(new AppError('upload error')); } else { logger.debug('parseReqFile fields:', fields); logger.debug('parseReqFile file location:', _.get(files, 'package.filepath')); if (_.isEmpty(fields.packageInfo) || _.isEmpty(_.get(files, 'package'))) { logger.debug('parseReqFile upload info lack'); - reject(new AppError.AppError('upload info lack')); + reject(new AppError('upload info lack')); } else { logger.debug('parseReqFile is ok'); resolve({ @@ -341,7 +341,7 @@ proto.createDiffPackagesByLastNums = function (appId, originalPackage, num) { Packages.findAll({ where: { deployment_version_id: originalPackage.deployment_version_id, - id: { [Sequelize.Op.lt]: packageId }, + id: { [Op.lt]: packageId }, }, order: [['id', 'desc']], limit: num, @@ -349,7 +349,7 @@ proto.createDiffPackagesByLastNums = function (appId, originalPackage, num) { Packages.findAll({ where: { deployment_version_id: originalPackage.deployment_version_id, - id: { [Sequelize.Op.lt]: packageId }, + id: { [Op.lt]: packageId }, }, order: [['id', 'asc']], limit: 2, @@ -373,7 +373,7 @@ proto.createDiffPackagesByLastNums = function (appId, originalPackage, num) { proto.createDiffPackages = function (originalPackage, destPackages, isUseDiffText) { if (!_.isArray(destPackages)) { - return Promise.reject(new AppError.AppError('第二个参数必须是数组')); + return Promise.reject(new AppError('第二个参数必须是数组')); } if (destPackages.length <= 0) { return null; @@ -424,9 +424,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel var versionInfo = common.validatorVersion(appVersion); if (!versionInfo[0]) { logger.debug(`releasePackage targetBinaryVersion ${appVersion} not support.`); - return Promise.reject( - new AppError.AppError(`targetBinaryVersion ${appVersion} not support.`), - ); + return Promise.reject(new AppError(`targetBinaryVersion ${appVersion} not support.`)); } var description = packageInfo.description; //描述 var isDisabled = packageInfo.isDisabled; //是否立刻下载 @@ -446,7 +444,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel return security.uploadPackageType(directoryPath).then((type) => { return Apps.findByPk(appId).then((appInfo) => { if (type > 0 && appInfo.os > 0 && appInfo.os != type) { - var e = new AppError.AppError('it must be publish it by ios type'); + var e = new AppError('it must be publish it by ios type'); logger.debug(e); throw e; } else { @@ -476,7 +474,7 @@ proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, rel }) .then((isExist) => { if (isExist) { - var e = new AppError.AppError( + var e = new AppError( "The uploaded package is identical to the contents of the specified deployment's current release.", ); logger.debug(e.message); @@ -528,12 +526,12 @@ proto.modifyReleasePackage = function (packageId, params) { return Packages.findByPk(packageId) .then((packageInfo) => { if (!packageInfo) { - throw new AppError.AppError(`packageInfo not found`); + throw new AppError(`packageInfo not found`); } if (!_.isNull(appVersion)) { var versionInfo = common.validatorVersion(appVersion); if (!versionInfo[0]) { - throw new AppError.AppError(`--targetBinaryVersion ${appVersion} not support.`); + throw new AppError(`--targetBinaryVersion ${appVersion} not support.`); } return Promise.all([ DeploymentsVersions.findOne({ @@ -547,10 +545,10 @@ proto.modifyReleasePackage = function (packageId, params) { .then(([v1, v2]) => { if (v1 && !_.eq(v1.id, v2.id)) { logger.debug(v1); - throw new AppError.AppError(`${appVersion} already exist.`); + throw new AppError(`${appVersion} already exist.`); } if (!v2) { - throw new AppError.AppError(`packages not found.`); + throw new AppError(`packages not found.`); } return DeploymentsVersions.update( { @@ -599,12 +597,12 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param }) .then((sourcePack) => { if (!sourcePack) { - throw new AppError.AppError('label does not exist.'); + throw new AppError('label does not exist.'); } return DeploymentsVersions.findByPk(sourcePack.deployment_version_id).then( (deploymentsVersions) => { if (!deploymentsVersions) { - throw new AppError.AppError('deploymentsVersions does not exist.'); + throw new AppError('deploymentsVersions does not exist.'); } resolve([sourcePack, deploymentsVersions]); }, @@ -620,17 +618,17 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param 0, ); if (_.lte(lastDeploymentVersionId, 0)) { - throw new AppError.AppError(`does not exist last_deployment_version_id.`); + throw new AppError(`does not exist last_deployment_version_id.`); } return DeploymentsVersions.findByPk(lastDeploymentVersionId) .then((deploymentsVersions) => { var sourcePackId = _.get(deploymentsVersions, 'current_package_id', 0); if (_.lte(sourcePackId, 0)) { - throw new AppError.AppError(`packageInfo not found.`); + throw new AppError(`packageInfo not found.`); } return Packages.findByPk(sourcePackId).then((sourcePack) => { if (!sourcePack) { - throw new AppError.AppError(`packageInfo not found.`); + throw new AppError(`packageInfo not found.`); } resolve([sourcePack, deploymentsVersions]); }); @@ -662,7 +660,7 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param }) .then((isExist) => { if (isExist) { - throw new AppError.AppError( + throw new AppError( "The uploaded package is identical to the contents of the specified deployment's current release.", ); } @@ -673,7 +671,7 @@ proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, param var versionInfo = common.validatorVersion(appFinalVersion); if (!versionInfo[0]) { logger.debug(`targetBinaryVersion ${appVersion} not support.`); - throw new AppError.AppError(`targetBinaryVersion ${appVersion} not support.`); + throw new AppError(`targetBinaryVersion ${appVersion} not support.`); } var create_params = { releaseMethod: constConfig.RELEAS_EMETHOD_PROMOTE, @@ -715,7 +713,7 @@ proto.rollbackPackage = function (deploymentVersionId, targetLabel, rollbackUid) var self = this; return DeploymentsVersions.findByPk(deploymentVersionId).then((deploymentsVersions) => { if (!deploymentsVersions) { - throw new AppError.AppError('您之前还没有发布过版本'); + throw new AppError('您之前还没有发布过版本'); } return Packages.findByPk(deploymentsVersions.current_package_id) .then((currentPackageInfo) => { @@ -744,7 +742,7 @@ proto.rollbackPackage = function (deploymentVersionId, targetLabel, rollbackUid) } } } - throw new AppError.AppError('没有可供回滚的版本'); + throw new AppError('没有可供回滚的版本'); }) .then((rollbackPackage) => { var params = { @@ -777,10 +775,7 @@ proto.getCanRollbackPackages = function (deploymentVersionId) { where: { deployment_version_id: deploymentVersionId, release_method: { - [Sequelize.Op.in]: [ - constConfig.RELEAS_EMETHOD_UPLOAD, - constConfig.RELEAS_EMETHOD_PROMOTE, - ], + [Op.in]: [constConfig.RELEAS_EMETHOD_UPLOAD, constConfig.RELEAS_EMETHOD_PROMOTE], }, }, order: [['id', 'desc']], diff --git a/src/core/utils/common.js b/src/core/utils/common.js index ce2d7c35..48fe4b45 100644 --- a/src/core/utils/common.js +++ b/src/core/utils/common.js @@ -1,19 +1,22 @@ -'use strict'; import fs from 'fs'; import fsextra from 'fs-extra'; import extract from 'extract-zip'; import _ from 'lodash'; import validator from 'validator'; import qiniu from 'qiniu'; -const jschardet = require('jschardet'); +import jschardet from 'jschardet'; import path from 'path'; import util from 'util'; -const streamPipeline = util.promisify(require('stream').pipeline); import fetch from 'node-fetch'; import { logger } from 'kv-logger'; +import AWS from 'aws-sdk'; +import COS from 'cos-nodejs-sdk-v5'; +import ALY from 'aliyun-sdk'; import { config } from '../config'; -var AppError = require('../app-error'); +import { AppError } from '../app-error'; + +const streamPipeline = util.promisify(require('stream').pipeline); var common = {}; module.exports = common; @@ -110,7 +113,7 @@ common.createFileFromRequest = async function (url, filePath) { logger.debug(`createFileFromRequest url:${url}`); const response = await fetch(url); if (!response.ok) { - throw new AppError.AppError(`unexpected response ${response.statusText}`); + throw new AppError(`unexpected response ${response.statusText}`); } await streamPipeline(response.body, fs.createWriteStream(filePath)); }; @@ -172,7 +175,7 @@ common.createEmptyFolder = function (folderPath) { fsextra.mkdirs(folderPath, (err) => { if (err) { logger.error(err); - reject(new AppError.AppError(err.message)); + reject(new AppError(err.message)); } else { resolve(folderPath); } @@ -193,7 +196,7 @@ common.unzipFile = async function (zipFile, outputPath) { logger.debug(`Pass unzipFile file ${zipFile}`); } catch (err) { logger.error(err); - throw new AppError.AppError(err.message); + throw new AppError(err.message); } try { @@ -201,7 +204,7 @@ common.unzipFile = async function (zipFile, outputPath) { logger.debug(`unzipFile success`); } catch (err) { logger.error(err); - throw new AppError.AppError(`it's not a zipFile`); + throw new AppError(`it's not a zipFile`); } return outputPath; }; @@ -227,18 +230,18 @@ common.uploadFileToStorage = function (key, filePath) { } else if (storageType === 'tencentcloud') { return common.uploadFileToTencentCloud(key, filePath); } - throw new AppError.AppError(`${storageType} storageType does not support.`); + throw new AppError(`${storageType} storageType does not support.`); }; common.uploadFileToLocal = function (key, filePath) { return new Promise((resolve, reject) => { var storageDir = _.get(config, 'local.storageDir'); if (!storageDir) { - throw new AppError.AppError('please set config local storageDir'); + throw new AppError('please set config local storageDir'); } if (key.length < 3) { logger.error(`generate key is too short, key value:${key}`); - throw new AppError.AppError('generate key is too short.'); + throw new AppError('generate key is too short.'); } try { logger.debug(`uploadFileToLocal check directory ${storageDir} fs.R_OK`); @@ -246,7 +249,7 @@ common.uploadFileToLocal = function (key, filePath) { logger.debug(`uploadFileToLocal directory ${storageDir} fs.R_OK is ok`); } catch (e) { logger.error(e); - throw new AppError.AppError(e.message); + throw new AppError(e.message); } var subDir = key.substr(0, 2).toLowerCase(); var finalDir = path.join(storageDir, subDir); @@ -256,7 +259,7 @@ common.uploadFileToLocal = function (key, filePath) { } var stats = fs.statSync(storageDir); if (!stats.isDirectory()) { - var e = new AppError.AppError(`${storageDir} must be directory`); + var e = new AppError(`${storageDir} must be directory`); logger.error(e); throw e; } @@ -268,18 +271,18 @@ common.uploadFileToLocal = function (key, filePath) { fs.accessSync(filePath, fs.R_OK); } catch (e) { logger.error(e); - throw new AppError.AppError(e.message); + throw new AppError(e.message); } stats = fs.statSync(filePath); if (!stats.isFile()) { - var e = new AppError.AppError(`${filePath} must be file`); + var e = new AppError(`${filePath} must be file`); logger.error(e); throw e; } fsextra.copy(filePath, fileName, (err) => { if (err) { - logger.error(new AppError.AppError(err.message)); - return reject(new AppError.AppError(err.message)); + logger.error(new AppError(err.message)); + return reject(new AppError(err.message)); } logger.debug(`uploadFileToLocal copy file ${key} success.`); resolve(key); @@ -295,7 +298,7 @@ common.getBlobDownloadUrl = function (blobUrl) { fileName = blobUrl.substr(0, 2).toLowerCase() + '/' + blobUrl; } if (!validator.isURL(downloadUrl)) { - var e = new AppError.AppError(`Please config ${storageType}.downloadUrl in config.js`); + var e = new AppError(`Please config ${storageType}.downloadUrl in config.js`); logger.error(e); throw e; } @@ -313,7 +316,7 @@ common.uploadFileToQiniu = function (key, filePath) { bucketManager.stat(bucket, key, (respErr, respBody, respInfo) => { if (respErr) { logger.debug('uploadFileToQiniu file stat:', respErr); - return reject(new AppError.AppError(respErr.message)); + return reject(new AppError(respErr.message)); } logger.debug('uploadFileToQiniu file stat respBody:', respBody); logger.debug('uploadFileToQiniu file stat respInfo:', respInfo); @@ -323,7 +326,7 @@ common.uploadFileToQiniu = function (key, filePath) { try { var uploadToken = common.getUploadTokenQiniu(mac, bucket, key); } catch (e) { - return reject(new AppError.AppError(e.message)); + return reject(new AppError(e.message)); } var formUploader = new qiniu.form_up.FormUploader(conf); var putExtra = new qiniu.form_up.PutExtra(); @@ -336,7 +339,7 @@ common.uploadFileToQiniu = function (key, filePath) { if (respErr) { logger.error('uploadFileToQiniu putFile:', respErr); // 上传失败, 处理返回代码 - return reject(new AppError.AppError(JSON.stringify(respErr))); + return reject(new AppError(JSON.stringify(respErr))); } else { logger.debug('uploadFileToQiniu putFile respBody:', respBody); logger.debug('uploadFileToQiniu putFile respInfo:', respInfo); @@ -344,7 +347,7 @@ common.uploadFileToQiniu = function (key, filePath) { if (respInfo.statusCode == 200) { return resolve(respBody.hash); } else { - return reject(new AppError.AppError(respBody.error)); + return reject(new AppError(respBody.error)); } } }, @@ -355,7 +358,6 @@ common.uploadFileToQiniu = function (key, filePath) { }; common.uploadFileToS3 = function (key, filePath) { - var AWS = require('aws-sdk'); return new Promise((resolve, reject) => { AWS.config.update({ accessKeyId: _.get(config, 's3.accessKeyId'), @@ -375,7 +377,7 @@ common.uploadFileToS3 = function (key, filePath) { }, (err, response) => { if (err) { - reject(new AppError.AppError(JSON.stringify(err))); + reject(new AppError(JSON.stringify(err))); } else { resolve(response.ETag); } @@ -386,7 +388,6 @@ common.uploadFileToS3 = function (key, filePath) { }; common.uploadFileToOSS = function (key, filePath) { - var ALY = require('aliyun-sdk'); var ossStream = require('aliyun-oss-upload-stream')( new ALY.OSS({ accessKeyId: _.get(config, 'oss.accessKeyId'), @@ -419,7 +420,6 @@ common.uploadFileToOSS = function (key, filePath) { common.uploadFileToTencentCloud = function (key, filePath) { return new Promise((resolve, reject) => { - var COS = require('cos-nodejs-sdk-v5'); var cosIn = new COS({ SecretId: _.get(config, 'tencentcloud.accessKeyId'), SecretKey: _.get(config, 'tencentcloud.secretAccessKey'), @@ -434,7 +434,7 @@ common.uploadFileToTencentCloud = function (key, filePath) { function (err, data) { logger.debug('uploadFileToTencentCloud', { err, data }); if (err) { - reject(new AppError.AppError(JSON.stringify(err))); + reject(new AppError(JSON.stringify(err))); } else { resolve(data.Key); } diff --git a/src/core/utils/factory.js b/src/core/utils/factory.js index b4a5ba13..eb4ddd31 100644 --- a/src/core/utils/factory.js +++ b/src/core/utils/factory.js @@ -1,4 +1,3 @@ -'use strict'; import util from 'util'; import redis from 'redis'; import { config } from '../config'; diff --git a/src/core/utils/security.js b/src/core/utils/security.js index 082a8b10..47596e86 100644 --- a/src/core/utils/security.js +++ b/src/core/utils/security.js @@ -1,16 +1,18 @@ -'use strict'; +import { logger } from 'kv-logger'; +import fs from 'fs'; +import _ from 'lodash'; +import crypto from 'crypto'; + +import { AppError } from '../app-error'; + var bcrypt = require('bcryptjs'); -var crypto = require('crypto'); -var fs = require('fs'); var qetag = require('../utils/qetag'); -var _ = require('lodash'); -var { logger } = require('kv-logger'); -var AppError = require('../app-error'); -var randToken = require('rand-token').generator({ +const randToken = require('rand-token').generator({ chars: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', source: 'crypto', }); + var security = {}; module.exports = security; @@ -80,7 +82,7 @@ security.qetag = function (buffer) { logger.debug(`Pass upload file ${buffer}`); } catch (e) { logger.error(e); - return Promise.reject(new AppError.AppError(e.message)); + return Promise.reject(new AppError(e.message)); } } logger.debug(`generate file identical`); @@ -114,12 +116,12 @@ security.uploadPackageType = function (directoryPath) { var recursive = require('recursive-readdir'); recursive(directoryPath, (err, files) => { if (err) { - logger.error(new AppError.AppError(err.message)); - reject(new AppError.AppError(err.message)); + logger.error(new AppError(err.message)); + reject(new AppError(err.message)); } else { if (files.length == 0) { logger.debug(`uploadPackageType empty files`); - reject(new AppError.AppError('empty files')); + reject(new AppError('empty files')); } else { var constName = require('../const'); const AREGEX = /android\.bundle/; @@ -183,7 +185,7 @@ security.calcAllFileSha256 = function (directoryPath) { recursive(directoryPath, (error, files) => { if (error) { logger.error(error); - reject(new AppError.AppError(error.message)); + reject(new AppError(error.message)); } else { // filter files that should be ignored files = files.filter((file) => { @@ -193,7 +195,7 @@ security.calcAllFileSha256 = function (directoryPath) { if (files.length == 0) { logger.debug(`calcAllFileSha256 empty files in directoryPath:`, directoryPath); - reject(new AppError.AppError('empty files')); + reject(new AppError('empty files')); } else { security.sha256AllFiles(files).then((results) => { var data = {}; diff --git a/src/routes/accessKeys.js b/src/routes/accessKeys.js index 0461769f..7a67eebf 100644 --- a/src/routes/accessKeys.js +++ b/src/routes/accessKeys.js @@ -2,11 +2,11 @@ import express from 'express'; import _ from 'lodash'; import { logger } from 'kv-logger'; import { UserTokens } from '../models/user_tokens'; +import { AppError } from '../core/app-error'; var security = require('../core/utils/security'); var middleware = require('../core/middleware'); var accountManager = require('../core/services/account-manager')(); -var AppError = require('../core/app-error'); const router = express.Router(); @@ -40,7 +40,7 @@ router.post('/', middleware.checkToken, (req, res, next) => { .isExsitAccessKeyName(uid, friendlyName) .then((data) => { if (!_.isEmpty(data)) { - throw new AppError.AppError(`The access key "${friendlyName}" already exists.`); + throw new AppError(`The access key "${friendlyName}" already exists.`); } }) .then(() => { @@ -74,7 +74,7 @@ router.post('/', middleware.checkToken, (req, res, next) => { res.send({ accessKey: info }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { logger.debug(e); res.status(406).send(e.message); } else { @@ -92,7 +92,7 @@ router.delete('/:name', middleware.checkToken, (req, res, next) => { res.send({ friendlyName: name }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { logger.debug(e); res.status(406).send(e.message); } else { diff --git a/src/routes/apps.js b/src/routes/apps.js index 250857cd..7b8e5e3e 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -4,13 +4,14 @@ import validator from 'validator'; import { config } from '../core/config'; import { logger } from 'kv-logger'; +import { AppError } from '../core/app-error'; + var middleware = require('../core/middleware'); var accountManager = require('../core/services/account-manager')(); var Deployments = require('../core/services/deployments'); var Collaborators = require('../core/services/collaborators'); var AppManager = require('../core/services/app-manager'); var PackageManager = require('../core/services/package-manager'); -var AppError = require('../core/app-error'); var common = require('../core/utils/common'); const router = express.Router(); @@ -30,7 +31,7 @@ router.get('/', middleware.checkToken, (req, res, next) => { res.send({ apps: data }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -51,7 +52,7 @@ router.get('/:appName/deployments', middleware.checkToken, (req, res, next) => { res.send({ deployments: data }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -71,13 +72,13 @@ router.get('/:appName/deployments/:deploymentName', middleware.checkToken, (req, }) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { - throw new AppError.AppError('does not find the deployment'); + throw new AppError('does not find the deployment'); } res.send({ deployment: deployments.listDeloyment(deploymentInfo) }); return true; }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -99,7 +100,7 @@ router.post('/:appName/deployments', middleware.checkToken, (req, res, next) => res.send({ deployment: { name: data.name, key: data.deployment_key } }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -123,7 +124,7 @@ router.get( .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { - throw new AppError.AppError('does not find the deployment'); + throw new AppError('does not find the deployment'); } return deploymentInfo; }); @@ -152,7 +153,7 @@ router.get( res.send({ metrics: rs }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.send({ metrics: null }); } else { next(e); @@ -176,7 +177,7 @@ router.get( .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { - throw new AppError.AppError('does not find the deployment'); + throw new AppError('does not find the deployment'); } return deploymentInfo; }); @@ -188,7 +189,7 @@ router.get( res.send({ history: _.pullAll(rs, [null, false]) }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -212,7 +213,7 @@ router.delete( .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { - throw new AppError.AppError('does not find the deployment'); + throw new AppError('does not find the deployment'); } return deploymentInfo; }); @@ -224,7 +225,7 @@ router.delete( res.send('ok'); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -248,7 +249,7 @@ router.patch('/:appName/deployments/:deploymentName', middleware.checkToken, (re res.send({ deployment: data }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -270,7 +271,7 @@ router.delete('/:appName/deployments/:deploymentName', middleware.checkToken, (r res.send({ deployment: data }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -307,7 +308,7 @@ router.post( .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { logger.debug(`does not find the deployment`); - throw new AppError.AppError('does not find the deployment'); + throw new AppError('does not find the deployment'); } logger.debug('release deployment check ok', { uid, @@ -320,7 +321,7 @@ router.post( .then((data) => { if (data.package.mimetype != 'application/zip') { logger.debug(`upload file type is invlidate`, data.package); - throw new AppError.AppError('upload file type is invalidate'); + throw new AppError('upload file type is invalidate'); } logger.debug('release packagee parse ok', { uid, @@ -381,7 +382,7 @@ router.post( res.send('{"msg": "succeed"}'); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { logger.warn(e.message); res.status(406).send(e.message); } else { @@ -409,7 +410,7 @@ router.patch( .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { - throw new AppError.AppError('does not find the deployment'); + throw new AppError('does not find the deployment'); } if (label) { return packageManager @@ -428,7 +429,7 @@ router.patch( }) .then(([deploymentInfo, packageInfo]) => { if (!packageInfo) { - throw new AppError.AppError('does not find the packageInfo'); + throw new AppError('does not find the packageInfo'); } return packageManager .modifyReleasePackage(packageInfo.id, _.get(req, 'body.packageInfo')) @@ -453,7 +454,7 @@ router.patch( res.send(''); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -483,10 +484,10 @@ router.post( ]) .then(([sourceDeploymentInfo, destDeploymentInfo]) => { if (!sourceDeploymentInfo) { - throw new AppError.AppError(`${sourceDeploymentName} does not exist.`); + throw new AppError(`${sourceDeploymentName} does not exist.`); } if (!destDeploymentInfo) { - throw new AppError.AppError(`${destDeploymentName} does not exist.`); + throw new AppError(`${destDeploymentName} does not exist.`); } return [sourceDeploymentInfo, destDeploymentInfo]; }) @@ -536,7 +537,7 @@ router.post( res.send({ package: packages }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -598,7 +599,7 @@ var rollbackCb = function (req, res, next) { res.send('ok'); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -640,7 +641,7 @@ router.get('/:appName/collaborators', middleware.checkToken, (req, res, next) => res.send({ collaborators: rs }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -667,7 +668,7 @@ router.post('/:appName/collaborators/:email', middleware.checkToken, (req, res, res.send(data); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -688,7 +689,7 @@ router.delete('/:appName/collaborators/:email', middleware.checkToken, (req, res .then((col) => { return accountManager.findUserByEmail(email).then((data) => { if (_.eq(data.id, uid)) { - throw new AppError.AppError("can't delete yourself!"); + throw new AppError("can't delete yourself!"); } else { return collaborators.deleteCollaborator(col.appid, data.id); } @@ -698,7 +699,7 @@ router.delete('/:appName/collaborators/:email', middleware.checkToken, (req, res res.send(''); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -729,7 +730,7 @@ router.delete('/:appName', middleware.checkToken, (req, res, next) => { res.send(data); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -755,7 +756,7 @@ router.patch('/:appName', middleware.checkToken, (req, res, next) => { .then((col) => { return appManager.findAppByName(uid, newAppName).then((appInfo) => { if (!_.isEmpty(appInfo)) { - throw new AppError.AppError(newAppName + ' Exist!'); + throw new AppError(newAppName + ' Exist!'); } return appManager.modifyApp(col.appid, { name: newAppName }); }); @@ -770,7 +771,7 @@ router.patch('/:appName', middleware.checkToken, (req, res, next) => { res.send(''); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -791,7 +792,7 @@ router.post('/:appName/transfer/:email', middleware.checkToken, (req, res, next) .then((col) => { return accountManager.findUserByEmail(email).then((data) => { if (_.eq(data.id, uid)) { - throw new AppError.AppError("You can't transfer to yourself!"); + throw new AppError("You can't transfer to yourself!"); } var appManager = new AppManager(); return appManager.transferApp(col.appid, uid, data.id); @@ -801,7 +802,7 @@ router.post('/:appName/transfer/:email', middleware.checkToken, (req, res, next) res.send(data); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); @@ -847,7 +848,7 @@ router.post('/', middleware.checkToken, (req, res, next) => { .findAppByName(uid, appName) .then((appInfo) => { if (!_.isEmpty(appInfo)) { - throw new AppError.AppError(appName + ' Exist!'); + throw new AppError(appName + ' Exist!'); } return appManager.addApp(uid, appName, os, platform, req.users.identical).then(() => { return { @@ -864,7 +865,7 @@ router.post('/', middleware.checkToken, (req, res, next) => { res.send({ app: data }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(406).send(e.message); } else { next(e); diff --git a/src/routes/auth.js b/src/routes/auth.js index 399db63e..fa0a01b4 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -5,6 +5,10 @@ import { logger } from 'kv-logger'; import jwt from 'jsonwebtoken'; import { config } from '../core/config'; +import { AppError } from '../core/app-error'; + +var accountManager = require('../core/services/account-manager')(); +var security = require('../core/utils/security'); const router = express.Router(); @@ -51,9 +55,6 @@ router.post('/logout', (req, res) => { }); router.post('/login', (req, res, next) => { - var AppError = require('../core/app-error'); - var accountManager = require('../core/services/account-manager')(); - var security = require('../core/utils/security'); var account = _.trim(req.body.account); var password = _.trim(req.body.password); var tokenSecret = _.get(config, 'jwt.tokenSecret'); @@ -80,7 +81,7 @@ router.post('/login', (req, res, next) => { res.send({ status: 'OK', results: { tokens: token } }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { logger.debug(e); res.send({ status: 'ERROR', errorMessage: e.message }); } else { diff --git a/src/routes/index.js b/src/routes/index.js index 84258578..9691e946 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -1,10 +1,13 @@ -var express = require('express'); -var router = express.Router(); -var AppError = require('../core/app-error'); +import express from 'express'; +import _ from 'lodash'; +import { logger } from 'kv-logger'; + +import { AppError } from '../core/app-error'; + var middleware = require('../core/middleware'); var ClientManager = require('../core/services/client-manager'); -var _ = require('lodash'); -var { logger } = require('kv-logger'); + +const router = express.Router(); router.get('/', (req, res, next) => { res.render('index', { title: 'CodePushServer' }); @@ -44,7 +47,7 @@ router.get('/updateCheck', (req, res, next) => { res.send({ updateInfo: rs }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(404).send(e.message); } else { next(e); @@ -61,7 +64,7 @@ router.post('/reportStatus/download', (req, res) => { var deploymentKey = _.get(req, 'body.deploymentKey'); var clientManager = new ClientManager(); clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { - if (!err instanceof AppError.AppError) { + if (!err instanceof AppError) { logger.error(err); } }); @@ -79,7 +82,7 @@ router.post('/reportStatus/deploy', (req, res) => { clientManager .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) .catch((err) => { - if (!err instanceof AppError.AppError) { + if (!err instanceof AppError) { logger.error(err); } }); diff --git a/src/routes/indexV1.js b/src/routes/indexV1.js index 9f76e76e..497bda30 100644 --- a/src/routes/indexV1.js +++ b/src/routes/indexV1.js @@ -1,9 +1,12 @@ -var express = require('express'); -var router = express.Router(); -var AppError = require('../core/app-error'); +import express from 'express'; +import _ from 'lodash'; +import { logger } from 'kv-logger'; + +import { AppError } from '../core/app-error'; + var ClientManager = require('../core/services/client-manager'); -var _ = require('lodash'); -var { logger } = require('kv-logger'); + +const router = express.Router(); router.get('/update_check', (req, res, next) => { var deploymentKey = _.get(req, 'query.deployment_key'); @@ -49,7 +52,7 @@ router.get('/update_check', (req, res, next) => { res.send({ update_info: update_info }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.status(404).send(e.message); } else { next(e); @@ -64,7 +67,7 @@ router.post('/report_status/download', (req, res) => { var deploymentKey = _.get(req, 'body.deployment_key'); var clientManager = new ClientManager(); clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { - if (!err instanceof AppError.AppError) { + if (!err instanceof AppError) { logger.error(err); } }); @@ -80,7 +83,7 @@ router.post('/report_status/deploy', (req, res) => { clientManager .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) .catch((err) => { - if (!err instanceof AppError.AppError) { + if (!err instanceof AppError) { logger.error(err); } }); diff --git a/src/routes/users.js b/src/routes/users.js index 20a30add..e1cc5617 100644 --- a/src/routes/users.js +++ b/src/routes/users.js @@ -3,10 +3,10 @@ import { logger } from 'kv-logger'; import _ from 'lodash'; import { Users } from '../models/users'; +import { AppError } from '../core/app-error'; var middleware = require('../core/middleware'); var AccountManager = require('../core/services/account-manager'); -var AppError = require('../core/app-error'); const router = express.Router(); @@ -23,7 +23,7 @@ router.post('/', (req, res, next) => { .checkRegisterCode(email, token) .then((u) => { if (_.isString(password) && password.length < 6) { - throw new AppError.AppError('请您输入6~20位长度的密码'); + throw new AppError('请您输入6~20位长度的密码'); } return accountManager.register(email, password); }) @@ -31,7 +31,7 @@ router.post('/', (req, res, next) => { res.send({ status: 'OK' }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.send({ status: 'ERROR', message: e.message }); } else { next(e); @@ -44,12 +44,12 @@ router.get('/exists', (req, res, next) => { Users.findOne({ where: { email: email } }) .then((u) => { if (!email) { - throw new AppError.AppError(`请您输入邮箱地址`); + throw new AppError(`请您输入邮箱地址`); } res.send({ status: 'OK', exists: u ? true : false }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.send({ status: 'ERROR', message: e.message }); } else { next(e); @@ -68,7 +68,7 @@ router.post('/registerCode', (req, res, next) => { res.send({ status: 'OK' }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { logger.warn('send register code error', { email, message: e.message }); res.send({ status: 'ERROR', message: e.message }); } else { @@ -87,7 +87,7 @@ router.get('/registerCode/exists', (req, res, next) => { res.send({ status: 'OK' }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.send({ status: 'ERROR', message: e.message }); } else { next(e); @@ -107,7 +107,7 @@ router.patch('/password', middleware.checkToken, (req, res, next) => { res.send({ status: 'OK' }); }) .catch((e) => { - if (e instanceof AppError.AppError) { + if (e instanceof AppError) { res.send({ status: 'ERROR', message: e.message }); } else { next(e); From f2b839ae9451d84fdf70ad7ac5dae9c0653245b7 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 9 Feb 2022 16:16:06 +0800 Subject: [PATCH 162/347] refactor: turn account-manager to ts --- src/core/services/account-manager.js | 265 -------------------------- src/core/services/account-manager.ts | 266 +++++++++++++++++++++++++++ src/routes/accessKeys.js | 2 +- src/routes/apps.js | 2 +- src/routes/auth.js | 2 +- src/routes/users.js | 6 +- 6 files changed, 270 insertions(+), 273 deletions(-) delete mode 100644 src/core/services/account-manager.js create mode 100644 src/core/services/account-manager.ts diff --git a/src/core/services/account-manager.js b/src/core/services/account-manager.js deleted file mode 100644 index cf2098b3..00000000 --- a/src/core/services/account-manager.js +++ /dev/null @@ -1,265 +0,0 @@ -import _ from 'lodash'; -import validator from 'validator'; -import { logger } from 'kv-logger'; -import moment from 'moment'; - -import { Users } from '../../models/users'; -import { UserTokens } from '../../models/user_tokens'; -import { findCollaboratorsByAppNameAndUid } from '../../models/collaborators'; -import { config } from '../config'; -import { AppError } from '../app-error'; - -var security = require('../utils/security'); -var factory = require('../utils/factory'); -var EmailManager = require('./email-manager'); - -var proto = (module.exports = function () { - function AccountManager() {} - AccountManager.__proto__ = proto; - return AccountManager; -}); - -proto.collaboratorCan = function (uid, appName) { - return this.getCollaborator(uid, appName).then((data) => { - if (!data) { - logger.debug(`collaboratorCan App ${appName} not exists.`); - throw new AppError(`App ${appName} not exists.`); - } - return data; - }); -}; - -proto.ownerCan = function (uid, appName) { - return this.getCollaborator(uid, appName).then((data) => { - if (!data) { - logger.debug(`ownerCan App ${appName} not exists.`); - throw new AppError(`App ${appName} not exists.`); - } - if (!_.eq(_.get(data, 'roles'), 'Owner')) { - logger.debug(`ownerCan Permission Deny, You are not owner!`); - throw new AppError('Permission Deny, You are not owner!'); - } - return data; - }); -}; - -proto.getCollaborator = function (uid, appName) { - return findCollaboratorsByAppNameAndUid(uid, appName); -}; - -proto.findUserByEmail = function (email) { - return Users.findOne({ where: { email: email } }).then((data) => { - if (_.isEmpty(data)) { - throw new AppError(email + ' does not exist.'); - } else { - return data; - } - }); -}; - -proto.getAllAccessKeyByUid = function (uid) { - return UserTokens.findAll({ - where: { uid: uid }, - order: [['id', 'DESC']], - }).then((tokens) => { - return _.map(tokens, function (v) { - return { - name: '(hidden)', - createdTime: parseInt(moment(v.created_at).format('x')), - createdBy: v.created_by, - expires: parseInt(moment(v.expires_at).format('x')), - friendlyName: v.name, - description: v.description, - }; - }); - }); -}; - -proto.isExsitAccessKeyName = function (uid, friendlyName) { - return UserTokens.findOne({ - where: { uid: uid, name: friendlyName }, - }); -}; - -proto.createAccessKey = function (uid, newAccessKey, ttl, friendlyName, createdBy, description) { - return UserTokens.create({ - uid: uid, - name: friendlyName, - tokens: newAccessKey, - description: description, - created_by: createdBy, - expires_at: moment() - .add(ttl / 1000, 'seconds') - .format('YYYY-MM-DD HH:mm:ss'), - created_at: moment().format('YYYY-MM-DD HH:mm:ss'), - }); -}; - -const LOGIN_LIMIT_PRE = 'LOGIN_LIMIT_PRE_'; - -proto.login = function (account, password) { - if (_.isEmpty(account)) { - return Promise.reject(new AppError('请您输入邮箱地址')); - } - if (_.isEmpty(password)) { - return Promise.reject(new AppError('请您输入密码')); - } - var where = {}; - if (validator.isEmail(account)) { - where = { email: account }; - } else { - where = { username: account }; - } - var tryLoginTimes = _.get(config, 'common.tryLoginTimes', 0); - return Users.findOne({ where: where }) - .then((users) => { - if (_.isEmpty(users)) { - throw new AppError('您输入的邮箱或密码有误'); - } - return users; - }) - .then((users) => { - if (tryLoginTimes > 0) { - var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; - var client = factory.getRedisClient(); - return client - .get(loginKey) - .then((loginErrorTimes) => { - if (loginErrorTimes > tryLoginTimes) { - throw new AppError(`您输入密码错误次数超过限制,帐户已经锁定`); - } - return users; - }) - .finally(() => client.quit()); - } else { - return users; - } - }) - .then((users) => { - if (!security.passwordVerifySync(password, users.password)) { - if (tryLoginTimes > 0) { - var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; - var client = factory.getRedisClient(); - client - .exists(loginKey) - .then((isExists) => { - if (!isExists) { - var expires = - moment().endOf('day').format('X') - moment().format('X'); - return client.setex(loginKey, expires, 0); - } - return isExists; - }) - .then(() => { - return client.incr(loginKey); - }) - .finally(() => client.quit()); - } - throw new AppError('您输入的邮箱或密码有误'); - } else { - return users; - } - }); -}; - -const REGISTER_CODE = 'REGISTER_CODE_'; -const EXPIRED = 1200; -const EXPIRED_SPEED = 10; - -proto.sendRegisterCode = function (email) { - if (_.isEmpty(email)) { - return Promise.reject(new AppError('请您输入邮箱地址')); - } - return Users.findOne({ where: { email: email } }) - .then((u) => { - if (u) { - throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); - } - }) - .then(() => { - //将token临时存储到redis - var token = security.randToken(40); - var client = factory.getRedisClient(); - return client - .setex(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) - .then(() => { - return token; - }) - .finally(() => client.quit()); - }) - .then((token) => { - //将token发送到用户邮箱 - var emailManager = new EmailManager(); - return emailManager.sendRegisterCode(email, token); - }); -}; - -proto.checkRegisterCode = function (email, token) { - return Users.findOne({ where: { email: email } }) - .then((u) => { - if (u) { - throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); - } - }) - .then(() => { - var registerKey = `${REGISTER_CODE}${security.md5(email)}`; - var client = factory.getRedisClient(); - return client.get(registerKey).then((storageToken) => { - if (_.isEmpty(storageToken)) { - throw new AppError(`验证码已经失效,请您重新获取`); - } - if (!_.eq(token, storageToken)) { - client - .ttl(registerKey) - .then((ttl) => { - if (ttl > 0) { - return client.expire(registerKey, ttl - EXPIRED_SPEED); - } - return ttl; - }) - .finally(() => client.quit()); - throw new AppError(`您输入的验证码不正确,请重新输入`); - } - return storageToken; - }); - }); -}; - -proto.register = function (email, password) { - return Users.findOne({ where: { email: email } }) - .then((u) => { - if (u) { - throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); - } - }) - .then(() => { - var identical = security.randToken(9); - return Users.create({ - email: email, - password: security.passwordHashSync(password), - identical: identical, - }); - }); -}; - -proto.changePassword = function (uid, oldPassword, newPassword) { - if (!_.isString(newPassword) || newPassword.length < 6) { - return Promise.reject(new AppError('请您输入6~20位长度的新密码')); - } - return Users.findOne({ where: { id: uid } }) - .then((u) => { - if (!u) { - throw new AppError(`未找到用户信息`); - } - return u; - }) - .then((u) => { - var isEq = security.passwordVerifySync(oldPassword, u.get('password')); - if (!isEq) { - throw new AppError(`您输入的旧密码不正确,请重新输入`); - } - u.set('password', security.passwordHashSync(newPassword)); - u.set('ack_code', security.randToken(5)); - return u.save(); - }); -}; diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts new file mode 100644 index 00000000..65f71481 --- /dev/null +++ b/src/core/services/account-manager.ts @@ -0,0 +1,266 @@ +import _ from 'lodash'; +import validator from 'validator'; +import { logger } from 'kv-logger'; +import moment from 'moment'; + +import { Users } from '../../models/users'; +import { UserTokens } from '../../models/user_tokens'; +import { findCollaboratorsByAppNameAndUid } from '../../models/collaborators'; +import { config } from '../config'; +import { AppError } from '../app-error'; + +var security = require('../utils/security'); +var factory = require('../utils/factory'); +var EmailManager = require('./email-manager'); + +const LOGIN_LIMIT_PRE = 'LOGIN_LIMIT_PRE_'; +const REGISTER_CODE = 'REGISTER_CODE_'; +const EXPIRED = 1200; +const EXPIRED_SPEED = 10; + +class AccountManager { + collaboratorCan(uid: number, appName: string) { + return this.getCollaborator(uid, appName).then((data) => { + if (!data) { + logger.debug(`collaboratorCan App ${appName} not exists.`); + throw new AppError(`App ${appName} not exists.`); + } + return data; + }); + } + + ownerCan(uid: number, appName: string) { + return this.getCollaborator(uid, appName).then((data) => { + if (!data) { + logger.debug(`ownerCan App ${appName} not exists.`); + throw new AppError(`App ${appName} not exists.`); + } + if (!_.eq(_.get(data, 'roles'), 'Owner')) { + logger.debug(`ownerCan Permission Deny, You are not owner!`); + throw new AppError('Permission Deny, You are not owner!'); + } + return data; + }); + } + + findUserByEmail(email: string) { + return Users.findOne({ where: { email: email } }).then((data) => { + if (_.isEmpty(data)) { + throw new AppError(email + ' does not exist.'); + } else { + return data; + } + }); + } + + getAllAccessKeyByUid(uid: number) { + return UserTokens.findAll({ + where: { uid: uid }, + order: [['id', 'DESC']], + }).then((tokens) => { + return _.map(tokens, function (v) { + return { + name: '(hidden)', + createdTime: parseInt(moment(v.created_at).format('x')), + createdBy: v.created_by, + expires: parseInt(moment(v.expires_at).format('x')), + friendlyName: v.name, + description: v.description, + }; + }); + }); + } + isExsitAccessKeyName(uid: number, friendlyName: string) { + return UserTokens.findOne({ + where: { uid: uid, name: friendlyName }, + }); + } + createAccessKey( + uid: number, + newAccessKey: string, + ttl: number, + friendlyName: string, + createdBy: string, + description: string, + ) { + return UserTokens.create({ + uid: uid, + name: friendlyName, + tokens: newAccessKey, + description: description, + created_by: createdBy, + expires_at: moment() + .add(ttl / 1000, 'seconds') + .format('YYYY-MM-DD HH:mm:ss'), + created_at: moment().format('YYYY-MM-DD HH:mm:ss'), + }); + } + + login(account: string, password: string) { + if (_.isEmpty(account)) { + return Promise.reject(new AppError('请您输入邮箱地址')); + } + if (_.isEmpty(password)) { + return Promise.reject(new AppError('请您输入密码')); + } + var where = {}; + if (validator.isEmail(account)) { + where = { email: account }; + } else { + where = { username: account }; + } + var tryLoginTimes = _.get(config, 'common.tryLoginTimes', 0); + return Users.findOne({ where: where }) + .then((users) => { + if (_.isEmpty(users)) { + throw new AppError('您输入的邮箱或密码有误'); + } + return users; + }) + .then((users) => { + if (tryLoginTimes > 0) { + var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; + var client = factory.getRedisClient(); + return client + .get(loginKey) + .then((loginErrorTimes) => { + if (loginErrorTimes > tryLoginTimes) { + throw new AppError(`您输入密码错误次数超过限制,帐户已经锁定`); + } + return users; + }) + .finally(() => client.quit()); + } else { + return users; + } + }) + .then((users) => { + if (!security.passwordVerifySync(password, users.password)) { + if (tryLoginTimes > 0) { + var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; + var client = factory.getRedisClient(); + client + .exists(loginKey) + .then((isExists) => { + if (!isExists) { + var expires = moment().endOf('day').unix() - moment().unix(); + return client.setex(loginKey, expires, 0); + } + return isExists; + }) + .then(() => { + return client.incr(loginKey); + }) + .finally(() => client.quit()); + } + throw new AppError('您输入的邮箱或密码有误'); + } else { + return users; + } + }); + } + + sendRegisterCode(email: string) { + if (_.isEmpty(email)) { + return Promise.reject(new AppError('请您输入邮箱地址')); + } + return Users.findOne({ where: { email: email } }) + .then((u) => { + if (u) { + throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); + } + }) + .then(() => { + //将token临时存储到redis + var token = security.randToken(40); + var client = factory.getRedisClient(); + return client + .setex(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) + .then(() => { + return token; + }) + .finally(() => client.quit()); + }) + .then((token) => { + //将token发送到用户邮箱 + var emailManager = new EmailManager(); + return emailManager.sendRegisterCode(email, token); + }); + } + + checkRegisterCode(email: string, token: string) { + return Users.findOne({ where: { email: email } }) + .then((u) => { + if (u) { + throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); + } + }) + .then(() => { + var registerKey = `${REGISTER_CODE}${security.md5(email)}`; + var client = factory.getRedisClient(); + return client.get(registerKey).then((storageToken) => { + if (_.isEmpty(storageToken)) { + throw new AppError(`验证码已经失效,请您重新获取`); + } + if (!_.eq(token, storageToken)) { + client + .ttl(registerKey) + .then((ttl) => { + if (ttl > 0) { + return client.expire(registerKey, ttl - EXPIRED_SPEED); + } + return ttl; + }) + .finally(() => client.quit()); + throw new AppError(`您输入的验证码不正确,请重新输入`); + } + return storageToken; + }); + }); + } + + register(email: string, password: string) { + return Users.findOne({ where: { email: email } }) + .then((u) => { + if (u) { + throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); + } + }) + .then(() => { + var identical = security.randToken(9); + return Users.create({ + email: email, + password: security.passwordHashSync(password), + identical: identical, + }); + }); + } + + changePassword(uid: number, oldPassword: string, newPassword: string) { + if (!_.isString(newPassword) || newPassword.length < 6) { + return Promise.reject(new AppError('请您输入6~20位长度的新密码')); + } + return Users.findOne({ where: { id: uid } }) + .then((u) => { + if (!u) { + throw new AppError(`未找到用户信息`); + } + return u; + }) + .then((u) => { + var isEq = security.passwordVerifySync(oldPassword, u.get('password')); + if (!isEq) { + throw new AppError(`您输入的旧密码不正确,请重新输入`); + } + u.set('password', security.passwordHashSync(newPassword)); + u.set('ack_code', security.randToken(5)); + return u.save(); + }); + } + + private getCollaborator(uid: number, appName: string) { + return findCollaboratorsByAppNameAndUid(uid, appName); + } +} + +export const accountManager = new AccountManager(); diff --git a/src/routes/accessKeys.js b/src/routes/accessKeys.js index 7a67eebf..c290bb0f 100644 --- a/src/routes/accessKeys.js +++ b/src/routes/accessKeys.js @@ -3,10 +3,10 @@ import _ from 'lodash'; import { logger } from 'kv-logger'; import { UserTokens } from '../models/user_tokens'; import { AppError } from '../core/app-error'; +import { accountManager } from '../core/services/account-manager'; var security = require('../core/utils/security'); var middleware = require('../core/middleware'); -var accountManager = require('../core/services/account-manager')(); const router = express.Router(); diff --git a/src/routes/apps.js b/src/routes/apps.js index 7b8e5e3e..f49c3d9e 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -5,9 +5,9 @@ import { config } from '../core/config'; import { logger } from 'kv-logger'; import { AppError } from '../core/app-error'; +import { accountManager } from '../core/services/account-manager'; var middleware = require('../core/middleware'); -var accountManager = require('../core/services/account-manager')(); var Deployments = require('../core/services/deployments'); var Collaborators = require('../core/services/collaborators'); var AppManager = require('../core/services/app-manager'); diff --git a/src/routes/auth.js b/src/routes/auth.js index fa0a01b4..4c3cb881 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -6,8 +6,8 @@ import jwt from 'jsonwebtoken'; import { config } from '../core/config'; import { AppError } from '../core/app-error'; +import { accountManager } from '../core/services/account-manager'; -var accountManager = require('../core/services/account-manager')(); var security = require('../core/utils/security'); const router = express.Router(); diff --git a/src/routes/users.js b/src/routes/users.js index e1cc5617..bba6d849 100644 --- a/src/routes/users.js +++ b/src/routes/users.js @@ -4,9 +4,9 @@ import _ from 'lodash'; import { Users } from '../models/users'; import { AppError } from '../core/app-error'; +import { accountManager } from '../core/services/account-manager'; var middleware = require('../core/middleware'); -var AccountManager = require('../core/services/account-manager'); const router = express.Router(); @@ -18,7 +18,6 @@ router.post('/', (req, res, next) => { var email = _.trim(_.get(req, 'body.email')); var token = _.trim(_.get(req, 'body.token')); var password = _.trim(_.get(req, 'body.password')); - var accountManager = new AccountManager(); return accountManager .checkRegisterCode(email, token) .then((u) => { @@ -59,7 +58,6 @@ router.get('/exists', (req, res, next) => { router.post('/registerCode', (req, res, next) => { var email = _.get(req, 'body.email'); - var accountManager = new AccountManager(); logger.info('try send register code', { email }); return accountManager .sendRegisterCode(email) @@ -80,7 +78,6 @@ router.post('/registerCode', (req, res, next) => { router.get('/registerCode/exists', (req, res, next) => { var email = _.trim(_.get(req, 'query.email')); var token = _.trim(_.get(req, 'query.token')); - var accountManager = new AccountManager(); return accountManager .checkRegisterCode(email, token) .then(() => { @@ -100,7 +97,6 @@ router.patch('/password', middleware.checkToken, (req, res, next) => { var oldPassword = _.trim(_.get(req, 'body.oldPassword')); var newPassword = _.trim(_.get(req, 'body.newPassword')); var uid = req.users.id; - var accountManager = new AccountManager(); return accountManager .changePassword(uid, oldPassword, newPassword) .then(() => { From 78d42d0de74a48bbe808fba359c6571e89b86764 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 9 Feb 2022 16:29:31 +0800 Subject: [PATCH 163/347] refactor: turn client-manager to ts --- src/core/services/client-manager.js | 352 --------------------------- src/core/services/client-manager.ts | 358 ++++++++++++++++++++++++++++ src/routes/apps.js | 9 +- src/routes/index.js | 5 +- src/routes/indexV1.js | 6 +- 5 files changed, 361 insertions(+), 369 deletions(-) delete mode 100644 src/core/services/client-manager.js create mode 100644 src/core/services/client-manager.ts diff --git a/src/core/services/client-manager.js b/src/core/services/client-manager.js deleted file mode 100644 index 89040289..00000000 --- a/src/core/services/client-manager.js +++ /dev/null @@ -1,352 +0,0 @@ -import _ from 'lodash'; -import { logger } from 'kv-logger'; -import { Op } from 'sequelize'; - -import { Deployments } from '../../models/deployments'; -import { DeploymentsVersions } from '../../models/deployments_versions'; -import { Packages } from '../../models/packages'; -import { PackagesDiff } from '../../models/packages_diff'; -import { PackagesMetrics } from '../../models/packages_metrics'; -import { LogReportDeploy } from '../../models/log_report_deploy'; -import { LogReportDownload } from '../../models/log_report_download'; -import { config } from '../config'; -import { AppError } from '../app-error'; - -var common = require('../utils/common'); -var factory = require('../utils/factory'); - -var proto = (module.exports = function () { - function ClientManager() {} - ClientManager.__proto__ = proto; - return ClientManager; -}); - -const UPDATE_CHECK = 'UPDATE_CHECK'; -const CHOSEN_MAN = 'CHOSEN_MAN'; -const EXPIRED = 600; - -proto.getUpdateCheckCacheKey = function (deploymentKey, appVersion, label, packageHash) { - return [UPDATE_CHECK, deploymentKey, appVersion, label, packageHash].join(':'); -}; - -proto.clearUpdateCheckCache = function (deploymentKey, appVersion, label, packageHash) { - logger.debug('clear cache Deployments key:', { - key: deploymentKey, - }); - let redisCacheKey = this.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); - var client = factory.getRedisClient(); - return client - .keys(redisCacheKey) - .then((data) => { - if (_.isArray(data)) { - return Promise.all( - data.map((key) => { - return client.del(key); - }), - ); - } - return null; - }) - .finally(() => client.quit()); -}; - -proto.updateCheckFromCache = function ( - deploymentKey, - appVersion, - label, - packageHash, - clientUniqueId, -) { - const self = this; - var updateCheckCache = _.get(config, 'common.updateCheckCache', false); - if (updateCheckCache === false) { - return self.updateCheck(deploymentKey, appVersion, label, packageHash); - } - let redisCacheKey = self.getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash); - var client = factory.getRedisClient(); - return client - .get(redisCacheKey) - .then((data) => { - if (data) { - try { - logger.debug('updateCheckFromCache read from catch'); - var obj = JSON.parse(data); - return obj; - } catch (e) {} - } - return self - .updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId) - .then((rs) => { - try { - logger.debug('updateCheckFromCache read from db'); - var strRs = JSON.stringify(rs); - client.setex(redisCacheKey, EXPIRED, strRs); - } catch (e) {} - return rs; - }); - }) - .finally(() => client.quit()); -}; - -proto.getChosenManCacheKey = function (packageId, rollout, clientUniqueId) { - return [CHOSEN_MAN, packageId, rollout, clientUniqueId].join(':'); -}; - -proto.random = function (rollout) { - var r = Math.ceil(Math.random() * 10000); - if (r < rollout * 100) { - return Promise.resolve(true); - } else { - return Promise.resolve(false); - } -}; - -proto.chosenMan = function (packageId, rollout, clientUniqueId) { - var self = this; - if (rollout >= 100) { - return Promise.resolve(true); - } - var rolloutClientUniqueIdCache = _.get(config, 'common.rolloutClientUniqueIdCache', false); - if (rolloutClientUniqueIdCache === false) { - return self.random(rollout); - } else { - var client = factory.getRedisClient(); - var redisCacheKey = self.getChosenManCacheKey(packageId, rollout, clientUniqueId); - return client - .get(redisCacheKey) - .then((data) => { - if (data == 1) { - return true; - } else if (data == 2) { - return false; - } else { - return self.random(rollout).then((r) => { - return client.setex(redisCacheKey, 60 * 60 * 24 * 7, r ? 1 : 2).then(() => { - return r; - }); - }); - } - }) - .finally(() => client.quit()); - } -}; - -proto.updateCheck = function (deploymentKey, appVersion, label, packageHash, clientUniqueId) { - var rs = { - packageId: 0, - downloadURL: '', - downloadUrl: '', - description: '', - isAvailable: false, - isDisabled: true, - isMandatory: false, - appVersion: appVersion, - targetBinaryRange: '', - packageHash: '', - label: '', - packageSize: 0, - updateAppVersion: false, - shouldRunBinaryVersion: false, - rollout: 100, - }; - var self = this; - if (_.isEmpty(deploymentKey) || _.isEmpty(appVersion)) { - return Promise.reject(new AppError('please input deploymentKey and appVersion')); - } - return Deployments.findOne({ where: { deployment_key: deploymentKey } }) - .then((dep) => { - if (_.isEmpty(dep)) { - throw new AppError('Not found deployment, check deployment key is right.'); - } - var version = common.parseVersion(appVersion); - return DeploymentsVersions.findAll({ - where: { - deployment_id: dep.id, - min_version: { [Op.lte]: version }, - max_version: { [Op.gt]: version }, - }, - }).then((deploymentsVersionsMore) => { - var distance = 0; - var item = null; - _.map(deploymentsVersionsMore, function (value, index) { - if (index == 0) { - item = value; - distance = value.max_version - value.min_version; - } else { - if (distance > value.max_version - value.min_version) { - distance = value.max_version - value.min_version; - item = value; - } - } - }); - logger.debug({ - item, - }); - return item; - }); - }) - .then((deploymentsVersions) => { - var packageId = _.get(deploymentsVersions, 'current_package_id', 0); - if (_.eq(packageId, 0)) { - return; - } - return Packages.findByPk(packageId) - .then((packages) => { - if ( - packages && - _.eq(packages.deployment_id, deploymentsVersions.deployment_id) && - !_.eq(packages.package_hash, packageHash) - ) { - rs.packageId = packageId; - rs.targetBinaryRange = deploymentsVersions.app_version; - rs.downloadUrl = rs.downloadURL = common.getBlobDownloadUrl( - _.get(packages, 'blob_url'), - ); - rs.description = _.get(packages, 'description', ''); - rs.isAvailable = _.eq(packages.is_disabled, 1) ? false : true; - rs.isDisabled = _.eq(packages.is_disabled, 1) ? true : false; - rs.isMandatory = _.eq(packages.is_mandatory, 1) ? true : false; - rs.appVersion = appVersion; - rs.packageHash = _.get(packages, 'package_hash', ''); - rs.label = _.get(packages, 'label', ''); - rs.packageSize = _.get(packages, 'size', 0); - rs.rollout = _.get(packages, 'rollout', 100); - } - return packages; - }) - .then((packages) => { - // 尝试增量更新 - if ( - packageHash && - !_.isEmpty(packages) && - !_.eq(_.get(packages, 'package_hash', ''), packageHash) - ) { - return PackagesDiff.findOne({ - where: { - package_id: packages.id, - diff_against_package_hash: packageHash, - }, - }).then((diffPackage) => { - if (!_.isEmpty(diffPackage)) { - rs.downloadURL = common.getBlobDownloadUrl( - _.get(diffPackage, 'diff_blob_url'), - ); - rs.downloadUrl = common.getBlobDownloadUrl( - _.get(diffPackage, 'diff_blob_url'), - ); - rs.packageSize = _.get(diffPackage, 'diff_size', 0); - } - return; - }); - } else { - return; - } - }); - }) - .then(() => { - return rs; - }); -}; - -proto.getPackagesInfo = function (deploymentKey, label) { - if (_.isEmpty(deploymentKey) || _.isEmpty(label)) { - return Promise.reject(new AppError('please input deploymentKey and label')); - } - return Deployments.findOne({ where: { deployment_key: deploymentKey } }) - .then((dep) => { - if (_.isEmpty(dep)) { - throw new AppError('does not found deployment'); - } - return Packages.findOne({ where: { deployment_id: dep.id, label: label } }); - }) - .then((packages) => { - if (_.isEmpty(packages)) { - throw new AppError('does not found packages'); - } - return packages; - }); -}; - -proto.reportStatusDownload = function (deploymentKey, label, clientUniqueId) { - return this.getPackagesInfo(deploymentKey, label).then((packages) => { - return Promise.all([ - PackagesMetrics.findOne({ where: { package_id: packages.id } }).then((metrics) => { - if (metrics) { - return metrics.increment('downloaded'); - } - return; - }), - LogReportDownload.create({ - package_id: packages.id, - client_unique_id: clientUniqueId, - }), - ]); - }); -}; - -proto.reportStatusDeploy = function (deploymentKey, label, clientUniqueId, others) { - return this.getPackagesInfo(deploymentKey, label).then((packages) => { - var constConfig = require('../const'); - var statusText = _.get(others, 'status'); - var status = 0; - if (_.eq(statusText, 'DeploymentSucceeded')) { - status = constConfig.DEPLOYMENT_SUCCEEDED; - } else if (_.eq(statusText, 'DeploymentFailed')) { - status = constConfig.DEPLOYMENT_FAILED; - } - var packageId = packages.id; - var previous_deployment_key = _.get(others, 'previousDeploymentKey'); - var previous_label = _.get(others, 'previousLabelOrAppVersion'); - if (status > 0) { - return Promise.all([ - LogReportDeploy.create({ - package_id: packageId, - client_unique_id: clientUniqueId, - previous_label: previous_label, - previous_deployment_key: previous_deployment_key, - status: status, - }), - PackagesMetrics.findOne({ where: { package_id: packageId } }).then((metrics) => { - if (_.isEmpty(metrics)) { - return; - } - if (_.eq(status, constConfig.DEPLOYMENT_SUCCEEDED)) { - return metrics.increment(['installed', 'active'], { by: 1 }); - } else { - return metrics.increment(['installed', 'failed'], { by: 1 }); - } - }), - ]).then(() => { - if (previous_deployment_key && previous_label) { - return Deployments.findOne({ - where: { deployment_key: previous_deployment_key }, - }) - .then((dep) => { - if (_.isEmpty(dep)) { - return; - } - return Packages.findOne({ - where: { deployment_id: dep.id, label: previous_label }, - }).then((p) => { - if (_.isEmpty(p)) { - return; - } - return PackagesMetrics.findOne({ - where: { package_id: p.id }, - }); - }); - }) - .then((metrics) => { - if (metrics) { - return metrics.decrement('active'); - } - return; - }); - } - return; - }); - } else { - return; - } - }); -}; diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts new file mode 100644 index 00000000..fb3594ba --- /dev/null +++ b/src/core/services/client-manager.ts @@ -0,0 +1,358 @@ +import _ from 'lodash'; +import { logger } from 'kv-logger'; +import { Op } from 'sequelize'; + +import { Deployments } from '../../models/deployments'; +import { DeploymentsVersions } from '../../models/deployments_versions'; +import { Packages } from '../../models/packages'; +import { PackagesDiff } from '../../models/packages_diff'; +import { PackagesMetrics } from '../../models/packages_metrics'; +import { LogReportDeploy } from '../../models/log_report_deploy'; +import { LogReportDownload } from '../../models/log_report_download'; +import { config } from '../config'; +import { AppError } from '../app-error'; + +var constConfig = require('../const'); +var common = require('../utils/common'); +var factory = require('../utils/factory'); + +const UPDATE_CHECK = 'UPDATE_CHECK'; +const CHOSEN_MAN = 'CHOSEN_MAN'; +const EXPIRED = 600; + +class ClientManager { + getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash) { + return [UPDATE_CHECK, deploymentKey, appVersion, label, packageHash].join(':'); + } + + clearUpdateCheckCache(deploymentKey, appVersion, label, packageHash) { + logger.debug('clear cache Deployments key:', { + key: deploymentKey, + }); + let redisCacheKey = this.getUpdateCheckCacheKey( + deploymentKey, + appVersion, + label, + packageHash, + ); + var client = factory.getRedisClient(); + return client + .keys(redisCacheKey) + .then((data) => { + if (_.isArray(data)) { + return Promise.all( + data.map((key) => { + return client.del(key); + }), + ); + } + return null; + }) + .finally(() => client.quit()); + } + + updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) { + const self = this; + var updateCheckCache = _.get(config, 'common.updateCheckCache', false); + if (updateCheckCache === false) { + return self.updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId); + } + let redisCacheKey = self.getUpdateCheckCacheKey( + deploymentKey, + appVersion, + label, + packageHash, + ); + var client = factory.getRedisClient(); + return client + .get(redisCacheKey) + .then((data) => { + if (data) { + try { + logger.debug('updateCheckFromCache read from catch'); + var obj = JSON.parse(data); + return obj; + } catch (e) {} + } + return self + .updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId) + .then((rs) => { + try { + logger.debug('updateCheckFromCache read from db'); + var strRs = JSON.stringify(rs); + client.setex(redisCacheKey, EXPIRED, strRs); + } catch (e) {} + return rs; + }); + }) + .finally(() => client.quit()); + } + + getChosenManCacheKey(packageId, rollout, clientUniqueId) { + return [CHOSEN_MAN, packageId, rollout, clientUniqueId].join(':'); + } + + random(rollout) { + var r = Math.ceil(Math.random() * 10000); + if (r < rollout * 100) { + return Promise.resolve(true); + } else { + return Promise.resolve(false); + } + } + + chosenMan(packageId, rollout, clientUniqueId: string) { + var self = this; + if (rollout >= 100) { + return Promise.resolve(true); + } + var rolloutClientUniqueIdCache = _.get(config, 'common.rolloutClientUniqueIdCache', false); + if (rolloutClientUniqueIdCache === false) { + return self.random(rollout); + } else { + var client = factory.getRedisClient(); + var redisCacheKey = self.getChosenManCacheKey(packageId, rollout, clientUniqueId); + return client + .get(redisCacheKey) + .then((data) => { + if (data == 1) { + return true; + } else if (data == 2) { + return false; + } else { + return self.random(rollout).then((r) => { + return client + .setex(redisCacheKey, 60 * 60 * 24 * 7, r ? 1 : 2) + .then(() => { + return r; + }); + }); + } + }) + .finally(() => client.quit()); + } + } + + updateCheck(deploymentKey: string, appVersion, label, packageHash, clientUniqueId: string) { + var rs = { + packageId: 0, + downloadURL: '', + downloadUrl: '', + description: '', + isAvailable: false, + isDisabled: true, + isMandatory: false, + appVersion: appVersion, + targetBinaryRange: '', + packageHash: '', + label: '', + packageSize: 0, + updateAppVersion: false, + shouldRunBinaryVersion: false, + rollout: 100, + }; + var self = this; + if (_.isEmpty(deploymentKey) || _.isEmpty(appVersion)) { + return Promise.reject(new AppError('please input deploymentKey and appVersion')); + } + return Deployments.findOne({ where: { deployment_key: deploymentKey } }) + .then((dep) => { + if (_.isEmpty(dep)) { + throw new AppError('Not found deployment, check deployment key is right.'); + } + var version = common.parseVersion(appVersion); + return DeploymentsVersions.findAll({ + where: { + deployment_id: dep.id, + min_version: { [Op.lte]: version }, + max_version: { [Op.gt]: version }, + }, + }).then((deploymentsVersionsMore) => { + var distance = 0; + var item = null; + _.map(deploymentsVersionsMore, function (value, index) { + if (index == 0) { + item = value; + distance = value.max_version - value.min_version; + } else { + if (distance > value.max_version - value.min_version) { + distance = value.max_version - value.min_version; + item = value; + } + } + }); + logger.debug({ + item, + }); + return item; + }); + }) + .then((deploymentsVersions) => { + var packageId = _.get(deploymentsVersions, 'current_package_id', 0); + if (_.eq(packageId, 0)) { + return; + } + return Packages.findByPk(packageId) + .then((packages) => { + if ( + packages && + _.eq(packages.deployment_id, deploymentsVersions.deployment_id) && + !_.eq(packages.package_hash, packageHash) + ) { + rs.packageId = packageId; + rs.targetBinaryRange = deploymentsVersions.app_version; + rs.downloadUrl = rs.downloadURL = common.getBlobDownloadUrl( + _.get(packages, 'blob_url'), + ); + rs.description = _.get(packages, 'description', ''); + rs.isAvailable = _.eq(packages.is_disabled, 1) ? false : true; + rs.isDisabled = _.eq(packages.is_disabled, 1) ? true : false; + rs.isMandatory = _.eq(packages.is_mandatory, 1) ? true : false; + rs.appVersion = appVersion; + rs.packageHash = _.get(packages, 'package_hash', ''); + rs.label = _.get(packages, 'label', ''); + rs.packageSize = _.get(packages, 'size', 0); + rs.rollout = _.get(packages, 'rollout', 100); + } + return packages; + }) + .then((packages) => { + // 尝试增量更新 + if ( + packageHash && + !_.isEmpty(packages) && + !_.eq(_.get(packages, 'package_hash', ''), packageHash) + ) { + return PackagesDiff.findOne({ + where: { + package_id: packages.id, + diff_against_package_hash: packageHash, + }, + }).then((diffPackage) => { + if (!_.isEmpty(diffPackage)) { + rs.downloadURL = common.getBlobDownloadUrl( + _.get(diffPackage, 'diff_blob_url'), + ); + rs.downloadUrl = common.getBlobDownloadUrl( + _.get(diffPackage, 'diff_blob_url'), + ); + rs.packageSize = _.get(diffPackage, 'diff_size', 0); + } + return; + }); + } else { + return; + } + }); + }) + .then(() => { + return rs; + }); + } + + getPackagesInfo(deploymentKey, label) { + if (_.isEmpty(deploymentKey) || _.isEmpty(label)) { + return Promise.reject(new AppError('please input deploymentKey and label')); + } + return Deployments.findOne({ where: { deployment_key: deploymentKey } }) + .then((dep) => { + if (_.isEmpty(dep)) { + throw new AppError('does not found deployment'); + } + return Packages.findOne({ where: { deployment_id: dep.id, label: label } }); + }) + .then((packages) => { + if (_.isEmpty(packages)) { + throw new AppError('does not found packages'); + } + return packages; + }); + } + + reportStatusDownload(deploymentKey, label, clientUniqueId) { + return this.getPackagesInfo(deploymentKey, label).then((packages) => { + return Promise.all([ + PackagesMetrics.findOne({ where: { package_id: packages.id } }).then((metrics) => { + if (metrics) { + return metrics.increment('downloaded'); + } + return; + }), + LogReportDownload.create({ + package_id: packages.id, + client_unique_id: clientUniqueId, + }), + ]); + }); + } + + reportStatusDeploy(deploymentKey: string, label, clientUniqueId: string, others) { + return this.getPackagesInfo(deploymentKey, label).then((packages) => { + var statusText = _.get(others, 'status'); + var status = 0; + if (_.eq(statusText, 'DeploymentSucceeded')) { + status = constConfig.DEPLOYMENT_SUCCEEDED; + } else if (_.eq(statusText, 'DeploymentFailed')) { + status = constConfig.DEPLOYMENT_FAILED; + } + var packageId = packages.id; + var previous_deployment_key = _.get(others, 'previousDeploymentKey'); + var previous_label = _.get(others, 'previousLabelOrAppVersion'); + if (status > 0) { + return Promise.all([ + LogReportDeploy.create({ + package_id: packageId, + client_unique_id: clientUniqueId, + previous_label: previous_label, + previous_deployment_key: previous_deployment_key, + status: status, + }), + PackagesMetrics.findOne({ where: { package_id: packageId } }).then( + (metrics) => { + if (_.isEmpty(metrics)) { + return; + } + if (_.eq(status, constConfig.DEPLOYMENT_SUCCEEDED)) { + return metrics.increment(['installed', 'active'], { by: 1 }); + } else { + return metrics.increment(['installed', 'failed'], { by: 1 }); + } + }, + ), + ]).then(() => { + if (previous_deployment_key && previous_label) { + return Deployments.findOne({ + where: { deployment_key: previous_deployment_key }, + }) + .then((dep) => { + if (_.isEmpty(dep)) { + return; + } + return Packages.findOne({ + where: { deployment_id: dep.id, label: previous_label }, + }).then((p) => { + if (_.isEmpty(p)) { + return; + } + return PackagesMetrics.findOne({ + where: { package_id: p.id }, + }); + }); + }) + .then((metrics) => { + if (metrics) { + return metrics.decrement('active'); + } + return; + }); + } + return; + }); + } else { + return; + } + }); + } +} + +export const clientManager = new ClientManager(); diff --git a/src/routes/apps.js b/src/routes/apps.js index f49c3d9e..896a60b3 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -6,6 +6,7 @@ import { logger } from 'kv-logger'; import { AppError } from '../core/app-error'; import { accountManager } from '../core/services/account-manager'; +import { clientManager } from '../core/services/client-manager'; var middleware = require('../core/middleware'); var Deployments = require('../core/services/deployments'); @@ -358,8 +359,6 @@ router.post( //clear cache if exists. if (_.get(config, 'common.updateCheckCache', false) !== false) { delay(2500).then(() => { - var ClientManager = require('../core/services/client-manager'); - var clientManager = new ClientManager(); clientManager.clearUpdateCheckCache( deploymentInfo.deployment_key, '*', @@ -437,8 +436,6 @@ router.patch( //clear cache if exists. if (_.get(config, 'common.updateCheckCache', false) !== false) { delay(2500).then(() => { - var ClientManager = require('../core/services/client-manager'); - var clientManager = new ClientManager(); clientManager.clearUpdateCheckCache( deploymentInfo.deployment_key, '*', @@ -520,8 +517,6 @@ router.post( //clear cache if exists. if (_.get(config, 'common.updateCheckCache', false) !== false) { delay(2500).then(() => { - var ClientManager = require('../core/services/client-manager'); - var clientManager = new ClientManager(); clientManager.clearUpdateCheckCache( destDeploymentInfo.deployment_key, '*', @@ -580,8 +575,6 @@ var rollbackCb = function (req, res, next) { //clear cache if exists. if (_.get(config, 'common.updateCheckCache', false) !== false) { delay(2500).then(() => { - var ClientManager = require('../core/services/client-manager'); - var clientManager = new ClientManager(); clientManager.clearUpdateCheckCache(dep.deployment_key, '*', '*', '*'); }); } diff --git a/src/routes/index.js b/src/routes/index.js index 9691e946..cea2daa2 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -3,9 +3,9 @@ import _ from 'lodash'; import { logger } from 'kv-logger'; import { AppError } from '../core/app-error'; +import { clientManager } from '../core/services/client-manager'; var middleware = require('../core/middleware'); -var ClientManager = require('../core/services/client-manager'); const router = express.Router(); @@ -23,7 +23,6 @@ router.get('/updateCheck', (req, res, next) => { var label = _.get(req, 'query.label'); var packageHash = _.get(req, 'query.packageHash'); var clientUniqueId = _.get(req, 'query.clientUniqueId'); - var clientManager = new ClientManager(); logger.debug('/updateCheck', { query: req.query, }); @@ -62,7 +61,6 @@ router.post('/reportStatus/download', (req, res) => { var clientUniqueId = _.get(req, 'body.clientUniqueId'); var label = _.get(req, 'body.label'); var deploymentKey = _.get(req, 'body.deploymentKey'); - var clientManager = new ClientManager(); clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { if (!err instanceof AppError) { logger.error(err); @@ -78,7 +76,6 @@ router.post('/reportStatus/deploy', (req, res) => { var clientUniqueId = _.get(req, 'body.clientUniqueId'); var label = _.get(req, 'body.label'); var deploymentKey = _.get(req, 'body.deploymentKey'); - var clientManager = new ClientManager(); clientManager .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) .catch((err) => { diff --git a/src/routes/indexV1.js b/src/routes/indexV1.js index 497bda30..19b935fc 100644 --- a/src/routes/indexV1.js +++ b/src/routes/indexV1.js @@ -3,8 +3,7 @@ import _ from 'lodash'; import { logger } from 'kv-logger'; import { AppError } from '../core/app-error'; - -var ClientManager = require('../core/services/client-manager'); +import { clientManager } from '../core/services/client-manager'; const router = express.Router(); @@ -15,7 +14,6 @@ router.get('/update_check', (req, res, next) => { var packageHash = _.get(req, 'query.package_hash'); var isCompanion = _.get(req, 'query.is_companion'); var clientUniqueId = _.get(req, 'query.client_unique_id'); - var clientManager = new ClientManager(); logger.debug('/update_check req.query', req.query); clientManager .updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) @@ -65,7 +63,6 @@ router.post('/report_status/download', (req, res) => { var clientUniqueId = _.get(req, 'body.client_unique_id'); var label = _.get(req, 'body.label'); var deploymentKey = _.get(req, 'body.deployment_key'); - var clientManager = new ClientManager(); clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { if (!err instanceof AppError) { logger.error(err); @@ -79,7 +76,6 @@ router.post('/report_status/deploy', (req, res) => { var clientUniqueId = _.get(req, 'body.client_unique_id'); var label = _.get(req, 'body.label'); var deploymentKey = _.get(req, 'body.deployment_key'); - var clientManager = new ClientManager(); clientManager .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) .catch((err) => { From 98c2ca60a3285353c9ce3cdab5f8eee1b9deffba Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 9 Feb 2022 18:17:48 +0800 Subject: [PATCH 164/347] fix: update deps redis to v4, reuse the same redis client without quit --- docs/install-server.md | 4 ++ package-lock.json | 72 +++++++++++++++----- package.json | 2 +- src/core/config.ts | 20 +----- src/core/services/account-manager.ts | 71 ++++++++------------ src/core/services/app-manager.js | 2 +- src/core/services/client-manager.ts | 98 ++++++++++++---------------- src/core/services/deployments.js | 2 +- src/core/services/package-manager.js | 2 +- src/core/utils/connections.ts | 27 ++++++++ src/core/utils/factory.js | 21 ------ src/models/apps.ts | 2 +- src/models/collaborators.ts | 2 +- src/models/deployments.ts | 2 +- src/models/deployments_history.ts | 2 +- src/models/deployments_versions.ts | 2 +- src/models/index.ts | 9 --- src/models/log_report_deploy.ts | 2 +- src/models/log_report_download.ts | 2 +- src/models/packages.ts | 2 +- src/models/packages_diff.ts | 2 +- src/models/packages_metrics.ts | 2 +- src/models/user_tokens.ts | 2 +- src/models/users.ts | 2 +- src/models/versions.ts | 2 +- tests/api/init/database.js | 17 +++-- tests/api/users/users.test.js | 26 +++----- 27 files changed, 194 insertions(+), 205 deletions(-) create mode 100644 src/core/utils/connections.ts delete mode 100644 src/core/utils/factory.js delete mode 100644 src/models/index.ts diff --git a/docs/install-server.md b/docs/install-server.md index c1091871..43a7de13 100644 --- a/docs/install-server.md +++ b/docs/install-server.md @@ -19,6 +19,10 @@ $ sudo npm i -g pm2 > notice. mysql8.x default auth caching_sha2_pasword not support in node-mysql2 see [issue](https://github.com/mysqljs/mysql/pull/1962) +## Install Redis + +- [Redis Quick Start](https://redis.io/topics/quickstart) + ## Get code-push-server from NPM ```shell diff --git a/package-lock.json b/package-lock.json index 1d7f2bb7..7d1865ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -455,6 +455,42 @@ "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true }, + "@node-redis/bloom": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@node-redis/bloom/-/bloom-1.0.1.tgz", + "integrity": "sha512-mXEBvEIgF4tUzdIN89LiYsbi6//EdpFA7L8M+DHCvePXg+bfHWi+ct5VI6nHUFQE5+ohm/9wmgihCH3HSkeKsw==" + }, + "@node-redis/client": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@node-redis/client/-/client-1.0.3.tgz", + "integrity": "sha512-IXNgOG99PHGL3NxN3/e8J8MuX+H08I+OMNmheGmZBXngE0IntaCQwwrd7NzmiHA+zH3SKHiJ+6k3P7t7XYknMw==", + "requires": { + "cluster-key-slot": "1.1.0", + "generic-pool": "3.8.2", + "redis-parser": "3.0.0", + "yallist": "4.0.0" + } + }, + "@node-redis/graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@node-redis/graph/-/graph-1.0.0.tgz", + "integrity": "sha512-mRSo8jEGC0cf+Rm7q8mWMKKKqkn6EAnA9IA2S3JvUv/gaWW/73vil7GLNwion2ihTptAm05I9LkepzfIXUKX5g==" + }, + "@node-redis/json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@node-redis/json/-/json-1.0.2.tgz", + "integrity": "sha512-qVRgn8WfG46QQ08CghSbY4VhHFgaTY71WjpwRBGEuqGPfWwfRcIf3OqSpR7Q/45X+v3xd8mvYjywqh0wqJ8T+g==" + }, + "@node-redis/search": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@node-redis/search/-/search-1.0.2.tgz", + "integrity": "sha512-gWhEeji+kTAvzZeguUNJdMSZNH2c5dv3Bci8Nn2f7VGuf6IvvwuZDSBOuOlirLVgayVuWzAG7EhwaZWK1VDnWQ==" + }, + "@node-redis/time-series": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@node-redis/time-series/-/time-series-1.0.1.tgz", + "integrity": "sha512-+nTn6EewVj3GlUXPuD3dgheWqo219jTxlo6R+pg24OeVvFHx9aFGGiyOgj3vBPhWUdRZ0xMcujXV5ki4fbLyMw==" + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1640,6 +1676,11 @@ "wrap-ansi": "^7.0.0" } }, + "cluster-key-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", + "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==" + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2309,11 +2350,6 @@ "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, - "denque": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", - "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" - }, "depd": { "version": "1.1.2", "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", @@ -3715,6 +3751,11 @@ "is-property": "^1.0.2" } }, + "generic-pool": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz", + "integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==" + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -6191,21 +6232,18 @@ } }, "redis": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz", - "integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.0.3.tgz", + "integrity": "sha512-SJMRXvgiQUYN0HaWwWv002J5ZgkhYXOlbLomzcrL3kP42yRNZ8Jx5nvLYhVpgmf10xcDpanFOxxJkphu2eyIFQ==", "requires": { - "denque": "^1.5.0", - "redis-commands": "^1.7.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0" + "@node-redis/bloom": "1.0.1", + "@node-redis/client": "1.0.3", + "@node-redis/graph": "1.0.0", + "@node-redis/json": "1.0.2", + "@node-redis/search": "1.0.2", + "@node-redis/time-series": "1.0.1" } }, - "redis-commands": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", - "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" - }, "redis-errors": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", diff --git a/package.json b/package.json index 01311e95..78489e81 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "qiniu": "7.4.0", "rand-token": "1.0.1", "recursive-readdir": "2.2.2", - "redis": "3.1.2", + "redis": "4.0.3", "sequelize": "6.16.0", "slash": "3.0.0", "validator": "13.7.0", diff --git a/src/core/config.ts b/src/core/config.ts index 75386f9e..ab1b98db 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -121,25 +121,9 @@ export const config = { // Config for redis (register module, tryLoginTimes module) redis: { host: process.env.REDIS_HOST || '127.0.0.1', - port: process.env.REDIS_PORT || 6379, + port: toNumber(process.env.REDIS_PORT, 6379), password: process.env.REDIS_PASSWORD, - db: process.env.REDIS_DB || 0, - retry_strategy: function (options) { - if (options.error.code === 'ECONNREFUSED') { - // End reconnecting on a specific error and flush all commands with a individual error - return new Error('The server refused the connection'); - } - if (options.total_retry_time > 1000 * 60 * 60) { - // End reconnecting after a specific timeout and flush all commands with a individual error - return new Error('Retry time exhausted'); - } - if (options.times_connected > 10) { - // End reconnecting with built in error - return undefined; - } - // reconnect after - return Math.max(options.attempt * 100, 3000); - }, + db: toNumber(process.env.REDIS_DB, 0), }, } as const; diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts index 65f71481..90695b80 100644 --- a/src/core/services/account-manager.ts +++ b/src/core/services/account-manager.ts @@ -8,9 +8,9 @@ import { UserTokens } from '../../models/user_tokens'; import { findCollaboratorsByAppNameAndUid } from '../../models/collaborators'; import { config } from '../config'; import { AppError } from '../app-error'; +import { redisClient } from '../utils/connections'; var security = require('../utils/security'); -var factory = require('../utils/factory'); var EmailManager = require('./email-manager'); const LOGIN_LIMIT_PRE = 'LOGIN_LIMIT_PRE_'; @@ -109,7 +109,7 @@ class AccountManager { } else { where = { username: account }; } - var tryLoginTimes = _.get(config, 'common.tryLoginTimes', 0); + const { tryLoginTimes } = config.common; return Users.findOne({ where: where }) .then((users) => { if (_.isEmpty(users)) { @@ -119,17 +119,13 @@ class AccountManager { }) .then((users) => { if (tryLoginTimes > 0) { - var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; - var client = factory.getRedisClient(); - return client - .get(loginKey) - .then((loginErrorTimes) => { - if (loginErrorTimes > tryLoginTimes) { - throw new AppError(`您输入密码错误次数超过限制,帐户已经锁定`); - } - return users; - }) - .finally(() => client.quit()); + const loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; + return redisClient.get(loginKey).then((loginErrorTimes) => { + if (Number(loginErrorTimes) > tryLoginTimes) { + throw new AppError(`您输入密码错误次数超过限制,帐户已经锁定`); + } + return users; + }); } else { return users; } @@ -137,21 +133,15 @@ class AccountManager { .then((users) => { if (!security.passwordVerifySync(password, users.password)) { if (tryLoginTimes > 0) { - var loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; - var client = factory.getRedisClient(); - client - .exists(loginKey) - .then((isExists) => { - if (!isExists) { - var expires = moment().endOf('day').unix() - moment().unix(); - return client.setex(loginKey, expires, 0); - } - return isExists; - }) - .then(() => { - return client.incr(loginKey); - }) - .finally(() => client.quit()); + const loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; + redisClient.exists(loginKey).then((isExists) => { + if (!isExists) { + var expires = moment().endOf('day').unix() - moment().unix(); + redisClient.setEx(loginKey, expires, '1'); + return; + } + redisClient.incr(loginKey); + }); } throw new AppError('您输入的邮箱或密码有误'); } else { @@ -173,13 +163,11 @@ class AccountManager { .then(() => { //将token临时存储到redis var token = security.randToken(40); - var client = factory.getRedisClient(); - return client - .setex(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) + return redisClient + .setEx(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) .then(() => { return token; - }) - .finally(() => client.quit()); + }); }) .then((token) => { //将token发送到用户邮箱 @@ -197,21 +185,16 @@ class AccountManager { }) .then(() => { var registerKey = `${REGISTER_CODE}${security.md5(email)}`; - var client = factory.getRedisClient(); - return client.get(registerKey).then((storageToken) => { + return redisClient.get(registerKey).then((storageToken) => { if (_.isEmpty(storageToken)) { throw new AppError(`验证码已经失效,请您重新获取`); } if (!_.eq(token, storageToken)) { - client - .ttl(registerKey) - .then((ttl) => { - if (ttl > 0) { - return client.expire(registerKey, ttl - EXPIRED_SPEED); - } - return ttl; - }) - .finally(() => client.quit()); + redisClient.ttl(registerKey).then((ttl) => { + if (ttl > 0) { + redisClient.expire(registerKey, ttl - EXPIRED_SPEED); + } + }); throw new AppError(`您输入的验证码不正确,请重新输入`); } return storageToken; diff --git a/src/core/services/app-manager.js b/src/core/services/app-manager.js index b0cf5f7b..bd4662f3 100644 --- a/src/core/services/app-manager.js +++ b/src/core/services/app-manager.js @@ -4,7 +4,7 @@ import { Apps } from '../../models/apps'; import { Collaborators } from '../../models/collaborators'; import { Deployments } from '../../models/deployments'; import { Users } from '../../models/users'; -import { sequelize } from '../../models/index'; +import { sequelize } from '../utils/connections'; import { AppError } from '../app-error'; var security = require('../../core/utils/security'); diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index fb3594ba..545ed646 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -11,10 +11,10 @@ import { LogReportDeploy } from '../../models/log_report_deploy'; import { LogReportDownload } from '../../models/log_report_download'; import { config } from '../config'; import { AppError } from '../app-error'; +import { redisClient } from '../utils/connections'; var constConfig = require('../const'); var common = require('../utils/common'); -var factory = require('../utils/factory'); const UPDATE_CHECK = 'UPDATE_CHECK'; const CHOSEN_MAN = 'CHOSEN_MAN'; @@ -35,20 +35,16 @@ class ClientManager { label, packageHash, ); - var client = factory.getRedisClient(); - return client - .keys(redisCacheKey) - .then((data) => { - if (_.isArray(data)) { - return Promise.all( - data.map((key) => { - return client.del(key); - }), - ); - } - return null; - }) - .finally(() => client.quit()); + return redisClient.keys(redisCacheKey).then((data) => { + if (_.isArray(data)) { + return Promise.all( + data.map((key) => { + return redisClient.del(key); + }), + ); + } + return null; + }); } updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) { @@ -63,29 +59,25 @@ class ClientManager { label, packageHash, ); - var client = factory.getRedisClient(); - return client - .get(redisCacheKey) - .then((data) => { - if (data) { + return redisClient.get(redisCacheKey).then((data) => { + if (data) { + try { + logger.debug('updateCheckFromCache read from catch'); + var obj = JSON.parse(data); + return obj; + } catch (e) {} + } + return self + .updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId) + .then((rs) => { try { - logger.debug('updateCheckFromCache read from catch'); - var obj = JSON.parse(data); - return obj; + logger.debug('updateCheckFromCache read from db'); + var strRs = JSON.stringify(rs); + redisClient.setEx(redisCacheKey, EXPIRED, strRs); } catch (e) {} - } - return self - .updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId) - .then((rs) => { - try { - logger.debug('updateCheckFromCache read from db'); - var strRs = JSON.stringify(rs); - client.setex(redisCacheKey, EXPIRED, strRs); - } catch (e) {} - return rs; - }); - }) - .finally(() => client.quit()); + return rs; + }); + }); } getChosenManCacheKey(packageId, rollout, clientUniqueId) { @@ -110,26 +102,22 @@ class ClientManager { if (rolloutClientUniqueIdCache === false) { return self.random(rollout); } else { - var client = factory.getRedisClient(); var redisCacheKey = self.getChosenManCacheKey(packageId, rollout, clientUniqueId); - return client - .get(redisCacheKey) - .then((data) => { - if (data == 1) { - return true; - } else if (data == 2) { - return false; - } else { - return self.random(rollout).then((r) => { - return client - .setex(redisCacheKey, 60 * 60 * 24 * 7, r ? 1 : 2) - .then(() => { - return r; - }); - }); - } - }) - .finally(() => client.quit()); + return redisClient.get(redisCacheKey).then((data) => { + if (data == '1') { + return true; + } else if (data == '2') { + return false; + } else { + return self.random(rollout).then((r) => { + return redisClient + .setEx(redisCacheKey, 60 * 60 * 24 * 7, r ? '1' : '2') + .then(() => { + return r; + }); + }); + } + }); } } diff --git a/src/core/services/deployments.js b/src/core/services/deployments.js index be16144e..a934ae3f 100644 --- a/src/core/services/deployments.js +++ b/src/core/services/deployments.js @@ -9,7 +9,7 @@ import { Packages } from '../../models/packages'; import { PackagesDiff } from '../../models/packages_diff'; import { PackagesMetrics } from '../../models/packages_metrics'; import { Users } from '../../models/users'; -import { sequelize } from '../../models/index'; +import { sequelize } from '../utils/connections'; import { AppError } from '../app-error'; var security = require('../../core/utils/security'); diff --git a/src/core/services/package-manager.js b/src/core/services/package-manager.js index d63673b5..bd372790 100644 --- a/src/core/services/package-manager.js +++ b/src/core/services/package-manager.js @@ -14,7 +14,7 @@ import { DeploymentsHistory } from '../../models/deployments_history'; import { Packages } from '../../models/packages'; import { PackagesDiff } from '../../models/packages_diff'; import { PackagesMetrics } from '../../models/packages_metrics'; -import { sequelize } from '../../models/index'; +import { sequelize } from '../utils/connections'; import { AppError } from '../app-error'; var security = require('../utils/security'); diff --git a/src/core/utils/connections.ts b/src/core/utils/connections.ts new file mode 100644 index 00000000..14d5bce6 --- /dev/null +++ b/src/core/utils/connections.ts @@ -0,0 +1,27 @@ +import { Sequelize } from 'sequelize'; +import { createClient } from 'redis'; +import { config } from '../config'; + +export const sequelize = new Sequelize( + config.db.database, + config.db.username, + config.db.password, + config.db, +); + +export const redisClient = createClient({ + socket: { + host: config.redis.host, + port: config.redis.port, + reconnectStrategy: (retries) => { + if (retries > 10) { + return new Error('Retry count exhausted'); + } + + return retries * 100; + }, + }, + password: config.redis.password, + database: config.redis.db, +}); +redisClient.connect(); diff --git a/src/core/utils/factory.js b/src/core/utils/factory.js deleted file mode 100644 index eb4ddd31..00000000 --- a/src/core/utils/factory.js +++ /dev/null @@ -1,21 +0,0 @@ -import util from 'util'; -import redis from 'redis'; -import { config } from '../config'; - -const factory = {}; -module.exports = factory; - -factory.getRedisClient = function () { - const client = redis.createClient(config.redis); - return { - del: util.promisify(client.del).bind(client), - exists: util.promisify(client.exists).bind(client), - expire: util.promisify(client.expire).bind(client), - get: util.promisify(client.get).bind(client), - incr: util.promisify(client.incr).bind(client), - keys: util.promisify(client.keys).bind(client), - quit: util.promisify(client.quit).bind(client), - setex: util.promisify(client.setex).bind(client), - ttl: util.promisify(client.ttl).bind(client), - }; -}; diff --git a/src/models/apps.ts b/src/models/apps.ts index ffea114d..542f0b8c 100644 --- a/src/models/apps.ts +++ b/src/models/apps.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface AppsInterface extends Model { id: number; diff --git a/src/models/collaborators.ts b/src/models/collaborators.ts index bd51ffe4..82b7f7eb 100644 --- a/src/models/collaborators.ts +++ b/src/models/collaborators.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface CollaboratorsInterface extends Model { id: number; diff --git a/src/models/deployments.ts b/src/models/deployments.ts index b6de7098..b5ba4adf 100644 --- a/src/models/deployments.ts +++ b/src/models/deployments.ts @@ -1,6 +1,6 @@ import { DataTypes, Model } from 'sequelize'; import _ from 'lodash'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; const { AppError } = require('../core/app-error'); diff --git a/src/models/deployments_history.ts b/src/models/deployments_history.ts index e877f776..fae17b99 100644 --- a/src/models/deployments_history.ts +++ b/src/models/deployments_history.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface DeploymentsHistoryInterface extends Model { id: number; diff --git a/src/models/deployments_versions.ts b/src/models/deployments_versions.ts index 3cc912ba..9baaf601 100644 --- a/src/models/deployments_versions.ts +++ b/src/models/deployments_versions.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface DeploymentsVersionsInterface extends Model { id: number; diff --git a/src/models/index.ts b/src/models/index.ts deleted file mode 100644 index 788b664b..00000000 --- a/src/models/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Sequelize } from 'sequelize'; -import { config } from '../core/config'; - -export const sequelize = new Sequelize( - config.db.database, - config.db.username, - config.db.password, - config.db, -); diff --git a/src/models/log_report_deploy.ts b/src/models/log_report_deploy.ts index 94834a49..4a6341b1 100644 --- a/src/models/log_report_deploy.ts +++ b/src/models/log_report_deploy.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface LogReportDeployInterface extends Model { id: number; diff --git a/src/models/log_report_download.ts b/src/models/log_report_download.ts index 932ca2da..1a3b20b7 100644 --- a/src/models/log_report_download.ts +++ b/src/models/log_report_download.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface LogReportDownloadInterface extends Model { id: number; diff --git a/src/models/packages.ts b/src/models/packages.ts index a1a96db9..6394448b 100644 --- a/src/models/packages.ts +++ b/src/models/packages.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface PackagesInterface extends Model { id: number; diff --git a/src/models/packages_diff.ts b/src/models/packages_diff.ts index aa287efe..32d5807c 100644 --- a/src/models/packages_diff.ts +++ b/src/models/packages_diff.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface PackagesDiffInterface extends Model { id: number; diff --git a/src/models/packages_metrics.ts b/src/models/packages_metrics.ts index 7ac9e4f5..5108aed3 100644 --- a/src/models/packages_metrics.ts +++ b/src/models/packages_metrics.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface PackagesMetricsInterface extends Model { id: number; diff --git a/src/models/user_tokens.ts b/src/models/user_tokens.ts index 128cd316..4b723633 100644 --- a/src/models/user_tokens.ts +++ b/src/models/user_tokens.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface UserTokensInterface extends Model { id: number; diff --git a/src/models/users.ts b/src/models/users.ts index def71433..9bc148b1 100644 --- a/src/models/users.ts +++ b/src/models/users.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface UsersInterface extends Model { id: number; diff --git a/src/models/versions.ts b/src/models/versions.ts index 9d3bad94..8a12172e 100644 --- a/src/models/versions.ts +++ b/src/models/versions.ts @@ -1,5 +1,5 @@ import { DataTypes, Model } from 'sequelize'; -import { sequelize } from './index'; +import { sequelize } from '../core/utils/connections'; interface VersionsInterface extends Model { id: number; diff --git a/tests/api/init/database.js b/tests/api/init/database.js index 4a5431ba..6f754535 100644 --- a/tests/api/init/database.js +++ b/tests/api/init/database.js @@ -1,10 +1,10 @@ const mysql = require('mysql2'); -const redis = require('redis'); const should = require('should'); const fs = require('fs'); const path = require('path'); const { config } = require('../../../bin/core/config'); +const { redisClient } = require('../../../bin/core/utils/connections'); describe('api/init/database.js', function () { describe('create database', function (done) { @@ -29,12 +29,15 @@ describe('api/init/database.js', function () { describe('flushall redis', function (done) { it('should flushall redis successful', function (done) { - var client = redis.createClient(config.redis.default); - client.flushall(function (err, reply) { - should.not.exist(err); - reply.toLowerCase().should.equal('ok'); - done(); - }); + redisClient + .flushAll() + .then(function (reply) { + reply.toLowerCase().should.equal('ok'); + done(); + }) + .catch(function (err) { + should.not.exist(err); + }); }); }); diff --git a/tests/api/users/users.test.js b/tests/api/users/users.test.js index c2259aeb..53d47bb2 100644 --- a/tests/api/users/users.test.js +++ b/tests/api/users/users.test.js @@ -4,7 +4,7 @@ const should = require('should'); const _ = require('lodash'); const security = require('../../../bin/core/utils/security'); -const factory = require('../../../bin/core/utils/factory'); +const { redisClient } = require('../../../bin/core/utils/connections'); describe('api/users/users.test.js', function () { var accountExist = 'lisong2010@gmail.com'; @@ -89,14 +89,10 @@ describe('api/users/users.test.js', function () { var account2 = '522539441@qq.com2'; var storageToken; before(function (done) { - var client = factory.getRedisClient(); - client - .get(registerKey) - .then(function (t) { - storageToken = t; - done(); - }) - .finally(() => client.quit()); + redisClient.get(registerKey).then(function (t) { + storageToken = t; + done(); + }); }); it('should not check register code successful when email already exists', function (done) { @@ -156,14 +152,10 @@ describe('api/users/users.test.js', function () { describe('sign up', function (done) { var storageToken; before(function (done) { - var client = factory.getRedisClient(); - client - .get(registerKey) - .then(function (t) { - storageToken = t; - done(); - }) - .finally(() => client.quit()); + redisClient.get(registerKey).then(function (t) { + storageToken = t; + done(); + }); }); it('should not sign up successful when password length invalid', function (done) { From 255ea1530aba7a57c66e0e304fa6c7b23485f219 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 9 Feb 2022 18:21:44 +0800 Subject: [PATCH 165/347] refactor!: drop codePushWeb redirect support --- src/core/config.ts | 3 --- src/routes/auth.js | 21 ++++----------------- tests/api/auth/auth.test.js | 27 --------------------------- 3 files changed, 4 insertions(+), 47 deletions(-) diff --git a/src/core/config.ts b/src/core/config.ts index ab1b98db..0c6eae15 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -104,9 +104,6 @@ export const config = { updateCheckCache: toBool(process.env.UPDATE_CHECK_CACHE), // options value is (true | false), when it's true, it will cache rollout results in redis rolloutClientUniqueIdCache: toBool(process.env.ROLLOUT_CLIENT_UNIQUE_ID_CACHE), - - // CodePush Web(https://github.com/lisong/code-push-web) login address. - //codePushWebUrl: "http://127.0.0.1:3001/login", }, // Config for smtp email,register module need validate user email project source https://github.com/nodemailer/nodemailer smtpConfig: { diff --git a/src/routes/auth.js b/src/routes/auth.js index 4c3cb881..c82a8483 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -17,13 +17,7 @@ router.get('/password', (req, res) => { }); router.get('/login', (req, res) => { - var codePushWebUrl = _.get(config, 'common.codePushWebUrl'); - if (codePushWebUrl && validator.isURL(codePushWebUrl)) { - logger.debug(`login redirect:${codePushWebUrl}`); - res.redirect(`${codePushWebUrl}/login`); - } else { - res.render('auth/login', { title: 'CodePushServer', email: req.query.email || '' }); - } + res.render('auth/login', { title: 'CodePushServer', email: req.query.email || '' }); }); router.get('/link', (req, res) => { @@ -31,17 +25,10 @@ router.get('/link', (req, res) => { }); router.get('/register', (req, res) => { - var codePushWebUrl = _.get(config, 'common.codePushWebUrl'); - var isRedirect = false; - if (codePushWebUrl && validator.isURL(codePushWebUrl)) { - logger.debug(`register redirect:${codePushWebUrl}`); - res.redirect(`${codePushWebUrl}/register`); + if (_.get(config, 'common.allowRegistration')) { + res.render('auth/register', { title: 'CodePushServer', email: req.query.email || '' }); } else { - if (_.get(config, 'common.allowRegistration')) { - res.render('auth/register', { title: 'CodePushServer', email: req.query.email || '' }); - } else { - res.redirect(`/auth/login`); - } + res.redirect(`/auth/login`); } }); diff --git a/tests/api/auth/auth.test.js b/tests/api/auth/auth.test.js index 8c40ae87..98ae71d6 100644 --- a/tests/api/auth/auth.test.js +++ b/tests/api/auth/auth.test.js @@ -10,20 +10,7 @@ describe('api/auth/test.js', function () { var password = '123456'; describe('sign in view', function (done) { - it('should show sign in redirect view successful', function (done) { - _.set(config, 'common.codePushWebUrl', 'http://127.0.0.1:3001'); - request - .get('/auth/login') - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(302); - done(); - }); - }); - it('should show sign in view successful', function (done) { - _.set(config, 'common.codePushWebUrl', null); request .get('/auth/login') .send() @@ -48,21 +35,7 @@ describe('api/auth/test.js', function () { }); }); - it('should show sign up redirect view successful', function (done) { - _.set(config, 'common.codePushWebUrl', 'http://127.0.0.1:3001'); - _.set(config, 'common.allowRegistration', true); - request - .get('/auth/register') - .send() - .end(function (err, res) { - should.not.exist(err); - res.status.should.equal(302); - done(); - }); - }); - it('should show sign up view successful', function (done) { - _.set(config, 'common.codePushWebUrl', null); _.set(config, 'common.allowRegistration', true); request .get('/auth/register') From 568a5b02b280eb9211948a4d6a7380efac33d199 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 9 Feb 2022 10:22:48 +0000 Subject: [PATCH 166/347] fix(deps): update dependency sequelize to v6.16.1 --- package-lock.json | 34 ++++++++++++++++++---------------- package.json | 2 +- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d1865ab..b73d7739 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2282,6 +2282,21 @@ "mimic-fn": "^3.0.0" } }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "decamelize": { "version": "1.2.0", "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", @@ -6497,9 +6512,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.16.0.tgz", - "integrity": "sha512-t0RRopzm4EN+nWrkbMt+EvND8pQcwqyPb/8M3k2wJgiMqNZy2X998VSw1SKhk3YzoNV2Ftdrqqy/NXB9th//JQ==", + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.16.1.tgz", + "integrity": "sha512-YFGqrwkmEhSbpZBxay5+PRKMiZNNUJzgIixCyFkLm9+/5Rqq5jBADEjTAC8RYHzwsOGNboYh18imXrYNCjBZCQ==", "requires": { "@types/debug": "^4.1.7", "debug": "^4.3.3", @@ -6518,19 +6533,6 @@ "wkx": "^0.5.0" }, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", diff --git a/package.json b/package.json index 78489e81..8bf0c443 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "4.0.3", - "sequelize": "6.16.0", + "sequelize": "6.16.1", "slash": "3.0.0", "validator": "13.7.0", "yargs": "17.3.1", From 82f41e0e347802a851534af3d9558fe1a3919936 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 9 Feb 2022 20:48:22 +0000 Subject: [PATCH 167/347] fix(deps): update dependency aws-sdk to v2.1072.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d1865ab..d4a824d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1323,9 +1323,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.1062.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1062.0.tgz", - "integrity": "sha512-QIU8jwi7Uqyvw2HjsXXXUZv3V/6TinUzLewrdl2EdvonqZCXhwMgnZx2F9I2x62IKH1RqnINwFWdoK+OTgcAjA==", + "version": "2.1072.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1072.0.tgz", + "integrity": "sha512-b0gEHuC6xTGduPTS+ZCScurw9RTyOned9gf6H0rDagW8hdSMebsFQy84ZreeiZHHChyKyWrNUbUFugOYdw+WXw==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index 78489e81..c19ed98d 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1062.0", + "aws-sdk": "2.1072.0", "bcryptjs": "2.4.3", "body-parser": "1.19.1", "cookie-parser": "1.4.6", From e067aed251a5376bc437502c9ceee86f9408988e Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 10 Feb 2022 09:41:45 +0800 Subject: [PATCH 168/347] refactor: turn package-manager to ts BREAKING CHANGE: drop is_use_diff_text support --- package-lock.json | 14 +- package.json | 2 +- src/core/const.js | 4 - src/core/services/package-manager.js | 784 --------------------------- src/core/services/package-manager.ts | 746 +++++++++++++++++++++++++ src/models/apps.ts | 3 + src/models/packages.ts | 2 +- src/routes/apps.js | 7 +- 8 files changed, 761 insertions(+), 801 deletions(-) delete mode 100644 src/core/services/package-manager.js create mode 100644 src/core/services/package-manager.ts diff --git a/package-lock.json b/package-lock.json index 7d1865ab..999c2215 100644 --- a/package-lock.json +++ b/package-lock.json @@ -797,6 +797,15 @@ "@types/node": "*" } }, + "@types/yazl": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/yazl/-/yazl-2.4.2.tgz", + "integrity": "sha512-T+9JH8O2guEjXNxqmybzQ92mJUh2oCwDDMSSimZSe1P+pceZiFROZLYmcbqkzV5EUwz6VwcKXCO2S2yUpra6XQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@typescript-eslint/eslint-plugin": { "version": "5.10.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz", @@ -2387,11 +2396,6 @@ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, - "diff-match-patch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", - "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" - }, "digest-header": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/digest-header/-/digest-header-0.0.1.tgz", diff --git a/package.json b/package.json index 78489e81..acc8189e 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "body-parser": "1.19.1", "cookie-parser": "1.4.6", "cos-nodejs-sdk-v5": "2.11.6", - "diff-match-patch": "1.0.5", "express": "4.17.2", "extract-zip": "2.0.1", "formidable": "2.0.1", @@ -79,6 +78,7 @@ "@types/node-fetch": "2.5.12", "@types/nodemailer": "6.4.4", "@types/validator": "13.7.1", + "@types/yazl": "2.4.2", "concurrently": "7.0.0", "mocha": "9.2.0", "should": "13.2.3", diff --git a/src/core/const.js b/src/core/const.js index d048c274..638e8cc5 100644 --- a/src/core/const.js +++ b/src/core/const.js @@ -36,8 +36,4 @@ define('DEPLOYMENT_FAILED', 2); define('DIFF_MANIFEST_FILE_NAME', 'hotcodepush.json'); -//文本文件是否使用google diff-match-patch 计算差异 -define('IS_USE_DIFF_TEXT_NO', 0); -define('IS_USE_DIFF_TEXT_YES', 1); - define('CURRENT_DB_VERSION', '0.5.0'); diff --git a/src/core/services/package-manager.js b/src/core/services/package-manager.js deleted file mode 100644 index bd372790..00000000 --- a/src/core/services/package-manager.js +++ /dev/null @@ -1,784 +0,0 @@ -import { Op } from 'sequelize'; -import _ from 'lodash'; -import formidable from 'formidable'; -import fs from 'fs'; -import slash from 'slash'; -import os from 'os'; -import path from 'path'; -import { logger } from 'kv-logger'; - -import { Apps } from '../../models/apps'; -import { Deployments, generateDeploymentsLabelId } from '../../models/deployments'; -import { DeploymentsVersions } from '../../models/deployments_versions'; -import { DeploymentsHistory } from '../../models/deployments_history'; -import { Packages } from '../../models/packages'; -import { PackagesDiff } from '../../models/packages_diff'; -import { PackagesMetrics } from '../../models/packages_metrics'; -import { sequelize } from '../utils/connections'; -import { AppError } from '../app-error'; - -var security = require('../utils/security'); -var yazl = require('yazl'); -var common = require('../utils/common'); -var constConfig = require('../const'); - -var proto = (module.exports = function () { - function PackageManager() {} - PackageManager.__proto__ = proto; - return PackageManager; -}); - -proto.getMetricsbyPackageId = function (packageId) { - return PackagesMetrics.findOne({ where: { package_id: packageId } }); -}; - -proto.findPackageInfoByDeploymentIdAndLabel = function (deploymentId, label) { - return Packages.findOne({ where: { deployment_id: deploymentId, label: label } }); -}; - -proto.findLatestPackageInfoByDeployVersion = function (deploymentsVersionsId) { - return DeploymentsVersions.findByPk(deploymentsVersionsId).then((deploymentsVersions) => { - if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { - var e = new AppError('not found last packages'); - logger.debug(e); - throw e; - } - return Packages.findByPk(deploymentsVersions.current_package_id); - }); -}; - -proto.parseReqFile = function (req) { - logger.debug('parseReqFile'); - return new Promise((resolve, reject) => { - var form = formidable(); - form.parse(req, (err, fields, files) => { - if (err) { - logger.debug('parseReqFile:', err); - reject(new AppError('upload error')); - } else { - logger.debug('parseReqFile fields:', fields); - logger.debug('parseReqFile file location:', _.get(files, 'package.filepath')); - if (_.isEmpty(fields.packageInfo) || _.isEmpty(_.get(files, 'package'))) { - logger.debug('parseReqFile upload info lack'); - reject(new AppError('upload info lack')); - } else { - logger.debug('parseReqFile is ok'); - resolve({ - packageInfo: JSON.parse(fields.packageInfo), - package: files.package, - }); - } - } - }); - }); -}; - -proto.createDeploymentsVersionIfNotExist = function ( - deploymentId, - appVersion, - minVersion, - maxVersion, - t, -) { - return DeploymentsVersions.findOrCreate({ - where: { - deployment_id: deploymentId, - app_version: appVersion, - min_version: minVersion, - max_version: maxVersion, - }, - defaults: { current_package_id: 0 }, - transaction: t, - }).then(([data, created]) => { - if (created) { - logger.debug(`createDeploymentsVersionIfNotExist findOrCreate version ${appVersion}`); - } - logger.debug(`createDeploymentsVersionIfNotExist version data:`, data.get()); - return data; - }); -}; - -proto.isMatchPackageHash = function (packageId, packageHash) { - if (_.lt(packageId, 0)) { - logger.debug(`isMatchPackageHash packageId is 0`); - return Promise.resolve(false); - } - return Packages.findByPk(packageId).then((data) => { - if (data && _.eq(data.get('package_hash'), packageHash)) { - logger.debug(`isMatchPackageHash data:`, data.get()); - logger.debug(`isMatchPackageHash packageHash exist`); - return true; - } else { - logger.debug(`isMatchPackageHash package is null`); - return false; - } - }); -}; - -proto.createPackage = function ( - deploymentId, - appVersion, - packageHash, - manifestHash, - blobHash, - params, -) { - var releaseMethod = params.releaseMethod || constConfig.RELEAS_EMETHOD_UPLOAD; - var releaseUid = params.releaseUid || 0; - var isMandatory = params.isMandatory || 0; - var size = params.size || 0; - var rollout = params.rollout || 100; - var description = params.description || ''; - var originalLabel = params.originalLabel || ''; - var isDisabled = params.isDisabled || 0; - var originalDeployment = params.originalDeployment || ''; - var self = this; - return generateDeploymentsLabelId(deploymentId).then((labelId) => { - return sequelize.transaction((t) => { - return self - .createDeploymentsVersionIfNotExist( - deploymentId, - appVersion, - params.min_version, - params.max_version, - t, - ) - .then((deploymentsVersions) => { - return Packages.create( - { - deployment_version_id: deploymentsVersions.id, - deployment_id: deploymentId, - description: description, - package_hash: packageHash, - blob_url: blobHash, - size: size, - manifest_blob_url: manifestHash, - release_method: releaseMethod, - label: 'v' + labelId, - released_by: releaseUid, - is_mandatory: isMandatory, - is_disabled: isDisabled, - rollout: rollout, - original_label: originalLabel, - original_deployment: originalDeployment, - }, - { transaction: t }, - ).then((packages) => { - deploymentsVersions.set('current_package_id', packages.id); - return Promise.all([ - deploymentsVersions.save({ transaction: t }), - Deployments.update( - { last_deployment_version_id: deploymentsVersions.id }, - { where: { id: deploymentId }, transaction: t }, - ), - PackagesMetrics.create({ package_id: packages.id }, { transaction: t }), - DeploymentsHistory.create( - { deployment_id: deploymentId, package_id: packages.id }, - { transaction: t }, - ), - ]).then(() => packages); - }); - }); - }); - }); -}; - -proto.downloadPackageAndExtract = function (workDirectoryPath, packageHash, blobHash) { - var dataCenterManager = require('./datacenter-manager')(); - return dataCenterManager.validateStore(packageHash).then((isValidate) => { - if (isValidate) { - return dataCenterManager.getPackageInfo(packageHash); - } else { - var downloadURL = common.getBlobDownloadUrl(blobHash); - return common - .createFileFromRequest(downloadURL, path.join(workDirectoryPath, blobHash)) - .then((download) => { - return common - .unzipFile( - path.join(workDirectoryPath, blobHash), - path.join(workDirectoryPath, 'current'), - ) - .then((outputPath) => { - return dataCenterManager.storePackage(outputPath, true); - }); - }); - } - }); -}; - -proto.zipDiffPackage = function (fileName, files, baseDirectoryPath, hotCodePushFile) { - return new Promise((resolve, reject) => { - var zipFile = new yazl.ZipFile(); - var writeStream = fs.createWriteStream(fileName); - writeStream.on('error', (error) => { - reject(error); - }); - zipFile.outputStream - .pipe(writeStream) - .on('error', (error) => { - reject(error); - }) - .on('close', () => { - resolve({ isTemporary: true, path: fileName }); - }); - for (var i = 0; i < files.length; ++i) { - var file = files[i]; - zipFile.addFile(path.join(baseDirectoryPath, file), slash(file)); - } - zipFile.addFile(hotCodePushFile, constConfig.DIFF_MANIFEST_FILE_NAME); - zipFile.end(); - }); -}; - -proto.generateOneDiffPackage = function ( - workDirectoryPath, - packageId, - originDataCenter, - oldPackageDataCenter, - diffPackageHash, - diffManifestBlobHash, - isUseDiffText, -) { - var self = this; - return PackagesDiff.findOne({ - where: { - package_id: packageId, - diff_against_package_hash: diffPackageHash, - }, - }).then((diffPackage) => { - if (!_.isEmpty(diffPackage)) { - return; - } - logger.debug('generateOneDiffPackage', { - packageId, - originDataCenter, - oldPackageDataCenter, - }); - var downloadURL = common.getBlobDownloadUrl(diffManifestBlobHash); - return common - .createFileFromRequest(downloadURL, path.join(workDirectoryPath, diffManifestBlobHash)) - .then(() => { - var dataCenterContentPath = path.join(workDirectoryPath, 'dataCenter'); - common.copySync(originDataCenter.contentPath, dataCenterContentPath); - var oldPackageDataCenterContentPath = oldPackageDataCenter.contentPath; - var originManifestJson = JSON.parse( - fs.readFileSync(originDataCenter.manifestFilePath, 'utf8'), - ); - var diffManifestJson = JSON.parse( - fs.readFileSync(path.join(workDirectoryPath, diffManifestBlobHash), 'utf8'), - ); - var json = common.diffCollectionsSync(originManifestJson, diffManifestJson); - var files = _.concat(json.diff, json.collection1Only); - var hotcodepush = { deletedFiles: json.collection2Only, patchedFiles: [] }; - if (isUseDiffText == constConfig.IS_USE_DIFF_TEXT_YES) { - //使用google diff-match-patch - _.forEach(json.diff, function (tmpFilePath) { - var dataCenterContentPathTmpFilePath = path.join( - dataCenterContentPath, - tmpFilePath, - ); - var oldPackageDataCenterContentPathTmpFilePath = path.join( - oldPackageDataCenterContentPath, - tmpFilePath, - ); - if ( - fs.existsSync(dataCenterContentPathTmpFilePath) && - fs.existsSync(oldPackageDataCenterContentPathTmpFilePath) && - common.detectIsTextFile(dataCenterContentPathTmpFilePath) && - common.detectIsTextFile(oldPackageDataCenterContentPathTmpFilePath) - ) { - var textOld = fs.readFileSync( - oldPackageDataCenterContentPathTmpFilePath, - 'utf-8', - ); - var textNew = fs.readFileSync( - dataCenterContentPathTmpFilePath, - 'utf-8', - ); - if (!textOld || !textNew) { - return; - } - var DiffMatchPatch = require('diff-match-patch'); - var dmp = new DiffMatchPatch(); - var patchs = dmp.patch_make(textOld, textNew); - var patchText = dmp.patch_toText(patchs); - if (patchText && patchText.length < _.parseInt(textNew.length * 0.8)) { - fs.writeFileSync(dataCenterContentPathTmpFilePath, patchText); - hotcodepush.patchedFiles.push(tmpFilePath); - } - } - }); - } - var hotCodePushFile = path.join( - workDirectoryPath, - `${diffManifestBlobHash}_hotcodepush`, - ); - fs.writeFileSync(hotCodePushFile, JSON.stringify(hotcodepush)); - var fileName = path.join(workDirectoryPath, `${diffManifestBlobHash}.zip`); - return self - .zipDiffPackage(fileName, files, dataCenterContentPath, hotCodePushFile) - .then((data) => { - return security.qetag(data.path).then((diffHash) => { - return common.uploadFileToStorage(diffHash, fileName).then(() => { - var stats = fs.statSync(fileName); - return PackagesDiff.create({ - package_id: packageId, - diff_against_package_hash: diffPackageHash, - diff_blob_url: diffHash, - diff_size: stats.size, - }); - }); - }); - }); - }); - }); -}; - -proto.createDiffPackagesByLastNums = function (appId, originalPackage, num) { - var self = this; - var packageId = originalPackage.id; - return Promise.all([ - Packages.findAll({ - where: { - deployment_version_id: originalPackage.deployment_version_id, - id: { [Op.lt]: packageId }, - }, - order: [['id', 'desc']], - limit: num, - }), - Packages.findAll({ - where: { - deployment_version_id: originalPackage.deployment_version_id, - id: { [Op.lt]: packageId }, - }, - order: [['id', 'asc']], - limit: 2, - }), - Apps.findByPk(appId), - ]) - .then(([lastNumsPackages, basePackages, appInfo]) => { - return [ - _.uniqBy(_.unionBy(lastNumsPackages, basePackages, 'id'), 'package_hash'), - appInfo, - ]; - }) - .then(([lastNumsPackages, appInfo]) => { - return self.createDiffPackages( - originalPackage, - lastNumsPackages, - _.get(appInfo, 'is_use_diff_text', constConfig.IS_USE_DIFF_TEXT_NO), - ); - }); -}; - -proto.createDiffPackages = function (originalPackage, destPackages, isUseDiffText) { - if (!_.isArray(destPackages)) { - return Promise.reject(new AppError('第二个参数必须是数组')); - } - if (destPackages.length <= 0) { - return null; - } - var self = this; - var package_hash = _.get(originalPackage, 'package_hash'); - var manifest_blob_url = _.get(originalPackage, 'manifest_blob_url'); - var blob_url = _.get(originalPackage, 'blob_url'); - var workDirectoryPath = path.join(os.tmpdir(), 'codepush_' + security.randToken(32)); - logger.debug('workDirectoryPath', workDirectoryPath); - return common - .createEmptyFolder(workDirectoryPath) - .then(() => self.downloadPackageAndExtract(workDirectoryPath, package_hash, blob_url)) - .then((originDataCenter) => - Promise.all( - destPackages.map((v) => { - var diffWorkDirectoryPath = path.join( - workDirectoryPath, - _.get(v, 'package_hash'), - ); - common.createEmptyFolderSync(diffWorkDirectoryPath); - return self - .downloadPackageAndExtract( - diffWorkDirectoryPath, - _.get(v, 'package_hash'), - _.get(v, 'blob_url'), - ) - .then((oldPackageDataCenter) => - self.generateOneDiffPackage( - diffWorkDirectoryPath, - originalPackage.id, - originDataCenter, - oldPackageDataCenter, - v.package_hash, - v.manifest_blob_url, - isUseDiffText, - ), - ); - }), - ), - ) - .finally(() => common.deleteFolderSync(workDirectoryPath)); -}; - -proto.releasePackage = function (appId, deploymentId, packageInfo, filePath, releaseUid) { - var self = this; - var appVersion = packageInfo.appVersion; - var versionInfo = common.validatorVersion(appVersion); - if (!versionInfo[0]) { - logger.debug(`releasePackage targetBinaryVersion ${appVersion} not support.`); - return Promise.reject(new AppError(`targetBinaryVersion ${appVersion} not support.`)); - } - var description = packageInfo.description; //描述 - var isDisabled = packageInfo.isDisabled; //是否立刻下载 - var rollout = packageInfo.rollout; //灰度百分比 - var isMandatory = packageInfo.isMandatory; //是否强制更新,无法跳过 - var tmpDir = os.tmpdir(); - var directoryPathParent = path.join(tmpDir, 'codepuh_' + security.randToken(32)); - var directoryPath = path.join(directoryPathParent, 'current'); - logger.debug(`releasePackage generate an random dir path: ${directoryPath}`); - return Promise.all([ - security.qetag(filePath), - common.createEmptyFolder(directoryPath).then(() => { - return common.unzipFile(filePath, directoryPath); - }), - ]) - .then(([blobHash]) => { - return security.uploadPackageType(directoryPath).then((type) => { - return Apps.findByPk(appId).then((appInfo) => { - if (type > 0 && appInfo.os > 0 && appInfo.os != type) { - var e = new AppError('it must be publish it by ios type'); - logger.debug(e); - throw e; - } else { - //不验证 - logger.debug(`Unknown package type:`, type, ',db os:', appInfo.os); - } - return blobHash; - }); - }); - }) - .then((blobHash) => { - var dataCenterManager = require('./datacenter-manager')(); - return dataCenterManager.storePackage(directoryPath).then((dataCenter) => { - var packageHash = dataCenter.packageHash; - var manifestFile = dataCenter.manifestFilePath; - return DeploymentsVersions.findOne({ - where: { deployment_id: deploymentId, app_version: appVersion }, - }) - .then((deploymentsVersions) => { - if (!deploymentsVersions) { - return false; - } - return self.isMatchPackageHash( - deploymentsVersions.get('current_package_id'), - packageHash, - ); - }) - .then((isExist) => { - if (isExist) { - var e = new AppError( - "The uploaded package is identical to the contents of the specified deployment's current release.", - ); - logger.debug(e.message); - throw e; - } - return security.qetag(manifestFile); - }) - .then((manifestHash) => { - return Promise.all([ - common.uploadFileToStorage(manifestHash, manifestFile), - common.uploadFileToStorage(blobHash, filePath), - ]).then(() => [packageHash, manifestHash, blobHash]); - }); - }); - }) - .then(([packageHash, manifestHash, blobHash]) => { - var stats = fs.statSync(filePath); - var params = { - releaseMethod: constConfig.RELEAS_EMETHOD_UPLOAD, - releaseUid: releaseUid, - isMandatory: isMandatory - ? constConfig.IS_MANDATORY_YES - : constConfig.IS_MANDATORY_NO, - isDisabled: isDisabled ? constConfig.IS_DISABLED_YES : constConfig.IS_DISABLED_NO, - rollout: rollout, - size: stats.size, - description: description, - min_version: versionInfo[1], - max_version: versionInfo[2], - }; - return self.createPackage( - deploymentId, - appVersion, - packageHash, - manifestHash, - blobHash, - params, - ); - }) - .finally(() => common.deleteFolderSync(directoryPathParent)); -}; - -proto.modifyReleasePackage = function (packageId, params) { - var appVersion = _.get(params, 'appVersion'); - var description = _.get(params, 'description'); - var isMandatory = _.get(params, 'isMandatory'); - var isDisabled = _.get(params, 'isDisabled'); - var rollout = _.get(params, 'rollout'); - return Packages.findByPk(packageId) - .then((packageInfo) => { - if (!packageInfo) { - throw new AppError(`packageInfo not found`); - } - if (!_.isNull(appVersion)) { - var versionInfo = common.validatorVersion(appVersion); - if (!versionInfo[0]) { - throw new AppError(`--targetBinaryVersion ${appVersion} not support.`); - } - return Promise.all([ - DeploymentsVersions.findOne({ - where: { - deployment_id: packageInfo.deployment_id, - app_version: appVersion, - }, - }), - DeploymentsVersions.findByPk(packageInfo.deployment_version_id), - ]) - .then(([v1, v2]) => { - if (v1 && !_.eq(v1.id, v2.id)) { - logger.debug(v1); - throw new AppError(`${appVersion} already exist.`); - } - if (!v2) { - throw new AppError(`packages not found.`); - } - return DeploymentsVersions.update( - { - app_version: appVersion, - min_version: versionInfo[1], - max_version: versionInfo[2], - }, - { where: { id: v2.id } }, - ); - }) - .then(() => { - return packageInfo; - }); - } - return packageInfo; - }) - .then((packageInfo) => { - var new_params = { - description: description || packageInfo.description, - }; - if (_.isInteger(rollout)) { - new_params.rollout = rollout; - } - if (_.isBoolean(isMandatory)) { - new_params.is_mandatory = isMandatory - ? constConfig.IS_MANDATORY_YES - : constConfig.IS_MANDATORY_NO; - } - if (_.isBoolean(isDisabled)) { - new_params.is_disabled = isDisabled - ? constConfig.IS_DISABLED_YES - : constConfig.IS_DISABLED_NO; - } - return Packages.update(new_params, { where: { id: packageId } }); - }); -}; - -proto.promotePackage = function (sourceDeploymentInfo, destDeploymentInfo, params) { - var self = this; - var appVersion = _.get(params, 'appVersion', null); - var label = _.get(params, 'label', null); - return new Promise((resolve, reject) => { - if (label) { - return Packages.findOne({ - where: { deployment_id: sourceDeploymentInfo.id, label: label }, - }) - .then((sourcePack) => { - if (!sourcePack) { - throw new AppError('label does not exist.'); - } - return DeploymentsVersions.findByPk(sourcePack.deployment_version_id).then( - (deploymentsVersions) => { - if (!deploymentsVersions) { - throw new AppError('deploymentsVersions does not exist.'); - } - resolve([sourcePack, deploymentsVersions]); - }, - ); - }) - .catch((e) => { - reject(e); - }); - } else { - var lastDeploymentVersionId = _.get( - sourceDeploymentInfo, - 'last_deployment_version_id', - 0, - ); - if (_.lte(lastDeploymentVersionId, 0)) { - throw new AppError(`does not exist last_deployment_version_id.`); - } - return DeploymentsVersions.findByPk(lastDeploymentVersionId) - .then((deploymentsVersions) => { - var sourcePackId = _.get(deploymentsVersions, 'current_package_id', 0); - if (_.lte(sourcePackId, 0)) { - throw new AppError(`packageInfo not found.`); - } - return Packages.findByPk(sourcePackId).then((sourcePack) => { - if (!sourcePack) { - throw new AppError(`packageInfo not found.`); - } - resolve([sourcePack, deploymentsVersions]); - }); - }) - .catch((e) => { - reject(e); - }); - } - }) - .then(([sourcePack, deploymentsVersions]) => { - var appFinalVersion = appVersion || deploymentsVersions.app_version; - logger.debug('sourcePack', sourcePack); - logger.debug('deploymentsVersions', deploymentsVersions); - logger.debug('appFinalVersion', appFinalVersion); - return DeploymentsVersions.findOne({ - where: { - deployment_id: destDeploymentInfo.id, - app_version: appFinalVersion, - }, - }) - .then((destDeploymentsVersions) => { - if (!destDeploymentsVersions) { - return false; - } - return self.isMatchPackageHash( - destDeploymentsVersions.get('current_package_id'), - sourcePack.package_hash, - ); - }) - .then((isExist) => { - if (isExist) { - throw new AppError( - "The uploaded package is identical to the contents of the specified deployment's current release.", - ); - } - return [sourcePack, deploymentsVersions, appFinalVersion]; - }); - }) - .then(([sourcePack, deploymentsVersions, appFinalVersion]) => { - var versionInfo = common.validatorVersion(appFinalVersion); - if (!versionInfo[0]) { - logger.debug(`targetBinaryVersion ${appVersion} not support.`); - throw new AppError(`targetBinaryVersion ${appVersion} not support.`); - } - var create_params = { - releaseMethod: constConfig.RELEAS_EMETHOD_PROMOTE, - releaseUid: params.promoteUid || 0, - rollout: params.rollout || 100, - size: sourcePack.size, - description: params.description || sourcePack.description, - originalLabel: sourcePack.label, - originalDeployment: sourceDeploymentInfo.name, - min_version: versionInfo[1], - max_version: versionInfo[2], - }; - if (_.isBoolean(params.isMandatory)) { - create_params.isMandatory = params.isMandatory - ? constConfig.IS_MANDATORY_YES - : constConfig.IS_MANDATORY_NO; - } else { - create_params.isMandatory = sourcePack.is_mandatory; - } - if (_.isBoolean(params.isDisabled)) { - create_params.isDisabled = params.isDisabled - ? constConfig.IS_DISABLED_YES - : constConfig.IS_DISABLED_NO; - } else { - create_params.isDisabled = sourcePack.is_disabled; - } - return self.createPackage( - destDeploymentInfo.id, - appFinalVersion, - sourcePack.package_hash, - sourcePack.manifest_blob_url, - sourcePack.blob_url, - create_params, - ); - }); -}; - -proto.rollbackPackage = function (deploymentVersionId, targetLabel, rollbackUid) { - var self = this; - return DeploymentsVersions.findByPk(deploymentVersionId).then((deploymentsVersions) => { - if (!deploymentsVersions) { - throw new AppError('您之前还没有发布过版本'); - } - return Packages.findByPk(deploymentsVersions.current_package_id) - .then((currentPackageInfo) => { - if (targetLabel) { - return Packages.findAll({ - where: { deployment_version_id: deploymentVersionId, label: targetLabel }, - limit: 1, - }).then((rollbackPackageInfos) => { - return [currentPackageInfo, rollbackPackageInfos]; - }); - } else { - return self - .getCanRollbackPackages(deploymentVersionId) - .then((rollbackPackageInfos) => { - return [currentPackageInfo, rollbackPackageInfos]; - }); - } - }) - .then(([currentPackageInfo, rollbackPackageInfos]) => { - if (currentPackageInfo && rollbackPackageInfos.length > 0) { - for (var i = rollbackPackageInfos.length - 1; i >= 0; i--) { - if ( - rollbackPackageInfos[i].package_hash != currentPackageInfo.package_hash - ) { - return rollbackPackageInfos[i]; - } - } - } - throw new AppError('没有可供回滚的版本'); - }) - .then((rollbackPackage) => { - var params = { - releaseMethod: 'Rollback', - releaseUid: rollbackUid, - isMandatory: rollbackPackage.is_mandatory, - isDisabled: rollbackPackage.is_disabled, - rollout: rollbackPackage.rollout, - size: rollbackPackage.size, - description: rollbackPackage.description, - originalLabel: rollbackPackage.label, - originalDeployment: '', - min_version: deploymentsVersions.min_version, - max_version: deploymentsVersions.max_version, - }; - return self.createPackage( - deploymentsVersions.deployment_id, - deploymentsVersions.app_version, - rollbackPackage.package_hash, - rollbackPackage.manifest_blob_url, - rollbackPackage.blob_url, - params, - ); - }); - }); -}; - -proto.getCanRollbackPackages = function (deploymentVersionId) { - return Packages.findAll({ - where: { - deployment_version_id: deploymentVersionId, - release_method: { - [Op.in]: [constConfig.RELEAS_EMETHOD_UPLOAD, constConfig.RELEAS_EMETHOD_PROMOTE], - }, - }, - order: [['id', 'desc']], - limit: 2, - }); -}; diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts new file mode 100644 index 00000000..ec110aff --- /dev/null +++ b/src/core/services/package-manager.ts @@ -0,0 +1,746 @@ +import { Op } from 'sequelize'; +import _ from 'lodash'; +import formidable from 'formidable'; +import fs from 'fs'; +import slash from 'slash'; +import os from 'os'; +import path from 'path'; +import { logger } from 'kv-logger'; +import yazl from 'yazl'; + +import { Apps } from '../../models/apps'; +import { Deployments, generateDeploymentsLabelId } from '../../models/deployments'; +import { DeploymentsVersions } from '../../models/deployments_versions'; +import { DeploymentsHistory } from '../../models/deployments_history'; +import { Packages, PackagesInterface } from '../../models/packages'; +import { PackagesDiff } from '../../models/packages_diff'; +import { PackagesMetrics } from '../../models/packages_metrics'; +import { sequelize } from '../utils/connections'; +import { AppError } from '../app-error'; + +var dataCenterManager = require('./datacenter-manager')(); +var security = require('../utils/security'); +var common = require('../utils/common'); +var constConfig = require('../const'); + +class PackageManager { + getMetricsbyPackageId = function (packageId) { + return PackagesMetrics.findOne({ where: { package_id: packageId } }); + }; + + findPackageInfoByDeploymentIdAndLabel = function (deploymentId, label) { + return Packages.findOne({ where: { deployment_id: deploymentId, label: label } }); + }; + + findLatestPackageInfoByDeployVersion = function (deploymentsVersionsId) { + return DeploymentsVersions.findByPk(deploymentsVersionsId).then((deploymentsVersions) => { + if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { + var e = new AppError('not found last packages'); + logger.debug(e); + throw e; + } + return Packages.findByPk(deploymentsVersions.current_package_id); + }); + }; + + parseReqFile(req) { + logger.debug('parseReqFile'); + return new Promise((resolve, reject) => { + var form = formidable(); + form.parse(req, (err, fields, files) => { + if (err) { + logger.debug('parseReqFile:', err); + reject(new AppError('upload error')); + } else { + logger.debug('parseReqFile fields:', fields); + logger.debug('parseReqFile file location:', _.get(files, 'package.filepath')); + if (_.isEmpty(fields.packageInfo) || _.isEmpty(_.get(files, 'package'))) { + logger.debug('parseReqFile upload info lack'); + reject(new AppError('upload info lack')); + } else { + logger.debug('parseReqFile is ok'); + resolve({ + packageInfo: JSON.parse(fields.packageInfo), + package: files.package, + }); + } + } + }); + }); + } + + createDeploymentsVersionIfNotExist(deploymentId, appVersion, minVersion, maxVersion, t) { + return DeploymentsVersions.findOrCreate({ + where: { + deployment_id: deploymentId, + app_version: appVersion, + min_version: minVersion, + max_version: maxVersion, + }, + defaults: { current_package_id: 0 }, + transaction: t, + }).then(([data, created]) => { + if (created) { + logger.debug( + `createDeploymentsVersionIfNotExist findOrCreate version ${appVersion}`, + ); + } + logger.debug(`createDeploymentsVersionIfNotExist version data:`, data.get()); + return data; + }); + } + + isMatchPackageHash(packageId, packageHash) { + if (_.lt(packageId, 0)) { + logger.debug(`isMatchPackageHash packageId is 0`); + return Promise.resolve(false); + } + return Packages.findByPk(packageId).then((data) => { + if (data && _.eq(data.get('package_hash'), packageHash)) { + logger.debug(`isMatchPackageHash data:`, data.get()); + logger.debug(`isMatchPackageHash packageHash exist`); + return true; + } else { + logger.debug(`isMatchPackageHash package is null`); + return false; + } + }); + } + + createPackage(deploymentId, appVersion, packageHash, manifestHash, blobHash, params) { + var releaseMethod = params.releaseMethod || constConfig.RELEAS_EMETHOD_UPLOAD; + var releaseUid = params.releaseUid || 0; + var isMandatory = params.isMandatory || 0; + var size = params.size || 0; + var rollout = params.rollout || 100; + var description = params.description || ''; + var originalLabel = params.originalLabel || ''; + var isDisabled = params.isDisabled || 0; + var originalDeployment = params.originalDeployment || ''; + var self = this; + return generateDeploymentsLabelId(deploymentId).then((labelId) => { + return sequelize.transaction((t) => { + return self + .createDeploymentsVersionIfNotExist( + deploymentId, + appVersion, + params.min_version, + params.max_version, + t, + ) + .then((deploymentsVersions) => { + return Packages.create( + { + deployment_version_id: deploymentsVersions.id, + deployment_id: deploymentId, + description: description, + package_hash: packageHash, + blob_url: blobHash, + size: size, + manifest_blob_url: manifestHash, + release_method: releaseMethod, + label: 'v' + labelId, + released_by: releaseUid, + is_mandatory: isMandatory, + is_disabled: isDisabled, + rollout: rollout, + original_label: originalLabel, + original_deployment: originalDeployment, + }, + { transaction: t }, + ).then((packages) => { + deploymentsVersions.set('current_package_id', packages.id); + return Promise.all([ + deploymentsVersions.save({ transaction: t }), + Deployments.update( + { last_deployment_version_id: deploymentsVersions.id }, + { where: { id: deploymentId }, transaction: t }, + ), + PackagesMetrics.create( + { package_id: packages.id }, + { transaction: t }, + ), + DeploymentsHistory.create( + { deployment_id: deploymentId, package_id: packages.id }, + { transaction: t }, + ), + ]).then(() => packages); + }); + }); + }); + }); + } + + downloadPackageAndExtract(workDirectoryPath, packageHash, blobHash) { + return dataCenterManager.validateStore(packageHash).then((isValidate) => { + if (isValidate) { + return dataCenterManager.getPackageInfo(packageHash); + } else { + var downloadURL = common.getBlobDownloadUrl(blobHash); + return common + .createFileFromRequest(downloadURL, path.join(workDirectoryPath, blobHash)) + .then((download) => { + return common + .unzipFile( + path.join(workDirectoryPath, blobHash), + path.join(workDirectoryPath, 'current'), + ) + .then((outputPath) => { + return dataCenterManager.storePackage(outputPath, true); + }); + }); + } + }); + } + + zipDiffPackage(fileName, files, baseDirectoryPath, hotCodePushFile) { + return new Promise<{ isTemporary: boolean; path: string }>((resolve, reject) => { + var zipFile = new yazl.ZipFile(); + var writeStream = fs.createWriteStream(fileName); + writeStream.on('error', (error) => { + reject(error); + }); + zipFile.outputStream + .pipe(writeStream) + .on('error', (error) => { + reject(error); + }) + .on('close', () => { + resolve({ isTemporary: true, path: fileName }); + }); + for (var i = 0; i < files.length; ++i) { + var file = files[i]; + zipFile.addFile(path.join(baseDirectoryPath, file), slash(file)); + } + zipFile.addFile(hotCodePushFile, constConfig.DIFF_MANIFEST_FILE_NAME); + zipFile.end(); + }); + } + + generateOneDiffPackage( + workDirectoryPath, + packageId, + originDataCenter, + oldPackageDataCenter, + diffPackageHash, + diffManifestBlobHash, + ) { + var self = this; + return PackagesDiff.findOne({ + where: { + package_id: packageId, + diff_against_package_hash: diffPackageHash, + }, + }).then((diffPackage) => { + if (!_.isEmpty(diffPackage)) { + return; + } + logger.debug('generateOneDiffPackage', { + packageId, + originDataCenter, + oldPackageDataCenter, + }); + var downloadURL = common.getBlobDownloadUrl(diffManifestBlobHash); + return common + .createFileFromRequest( + downloadURL, + path.join(workDirectoryPath, diffManifestBlobHash), + ) + .then(() => { + var dataCenterContentPath = path.join(workDirectoryPath, 'dataCenter'); + common.copySync(originDataCenter.contentPath, dataCenterContentPath); + var oldPackageDataCenterContentPath = oldPackageDataCenter.contentPath; + var originManifestJson = JSON.parse( + fs.readFileSync(originDataCenter.manifestFilePath, 'utf8'), + ); + var diffManifestJson = JSON.parse( + fs.readFileSync(path.join(workDirectoryPath, diffManifestBlobHash), 'utf8'), + ); + var json = common.diffCollectionsSync(originManifestJson, diffManifestJson); + var files = _.concat(json.diff, json.collection1Only); + var hotcodepush = { deletedFiles: json.collection2Only, patchedFiles: [] }; + var hotCodePushFile = path.join( + workDirectoryPath, + `${diffManifestBlobHash}_hotcodepush`, + ); + fs.writeFileSync(hotCodePushFile, JSON.stringify(hotcodepush)); + var fileName = path.join(workDirectoryPath, `${diffManifestBlobHash}.zip`); + return self + .zipDiffPackage(fileName, files, dataCenterContentPath, hotCodePushFile) + .then((data) => { + return security.qetag(data.path).then((diffHash) => { + return common.uploadFileToStorage(diffHash, fileName).then(() => { + var stats = fs.statSync(fileName); + return PackagesDiff.create({ + package_id: packageId, + diff_against_package_hash: diffPackageHash, + diff_blob_url: diffHash, + diff_size: stats.size, + }); + }); + }); + }); + }); + }); + } + + createDiffPackagesByLastNums(appId, originalPackage, num) { + var self = this; + var packageId = originalPackage.id; + return Promise.all([ + Packages.findAll({ + where: { + deployment_version_id: originalPackage.deployment_version_id, + id: { [Op.lt]: packageId }, + }, + order: [['id', 'desc']], + limit: num, + }), + Packages.findAll({ + where: { + deployment_version_id: originalPackage.deployment_version_id, + id: { [Op.lt]: packageId }, + }, + order: [['id', 'asc']], + limit: 2, + }), + Apps.findByPk(appId), + ]) + .then(([lastNumsPackages, basePackages, appInfo]) => { + return [ + _.uniqBy(_.unionBy(lastNumsPackages, basePackages, 'id'), 'package_hash'), + appInfo, + ]; + }) + .then(([lastNumsPackages, appInfo]) => { + return self.createDiffPackages(originalPackage, lastNumsPackages); + }); + } + + createDiffPackages(originalPackage, destPackages) { + if (!_.isArray(destPackages)) { + return Promise.reject(new AppError('第二个参数必须是数组')); + } + if (destPackages.length <= 0) { + return null; + } + var self = this; + var package_hash = _.get(originalPackage, 'package_hash'); + var manifest_blob_url = _.get(originalPackage, 'manifest_blob_url'); + var blob_url = _.get(originalPackage, 'blob_url'); + var workDirectoryPath = path.join(os.tmpdir(), 'codepush_' + security.randToken(32)); + logger.debug('createDiffPackages using dir', { workDirectoryPath }); + return common + .createEmptyFolder(workDirectoryPath) + .then(() => self.downloadPackageAndExtract(workDirectoryPath, package_hash, blob_url)) + .then((originDataCenter) => + Promise.all( + destPackages.map((v) => { + var diffWorkDirectoryPath = path.join( + workDirectoryPath, + _.get(v, 'package_hash'), + ); + common.createEmptyFolderSync(diffWorkDirectoryPath); + return self + .downloadPackageAndExtract( + diffWorkDirectoryPath, + _.get(v, 'package_hash'), + _.get(v, 'blob_url'), + ) + .then((oldPackageDataCenter) => + self.generateOneDiffPackage( + diffWorkDirectoryPath, + originalPackage.id, + originDataCenter, + oldPackageDataCenter, + v.package_hash, + v.manifest_blob_url, + ), + ); + }), + ), + ) + .finally(() => common.deleteFolderSync(workDirectoryPath)); + } + + releasePackage(appId, deploymentId, packageInfo, filePath, releaseUid) { + var self = this; + var appVersion = packageInfo.appVersion; + var versionInfo = common.validatorVersion(appVersion); + if (!versionInfo[0]) { + logger.debug(`releasePackage targetBinaryVersion ${appVersion} not support.`); + return Promise.reject(new AppError(`targetBinaryVersion ${appVersion} not support.`)); + } + var description = packageInfo.description; //描述 + var isDisabled = packageInfo.isDisabled; //是否立刻下载 + var rollout = packageInfo.rollout; //灰度百分比 + var isMandatory = packageInfo.isMandatory; //是否强制更新,无法跳过 + var tmpDir = os.tmpdir(); + var directoryPathParent = path.join(tmpDir, 'codepuh_' + security.randToken(32)); + var directoryPath = path.join(directoryPathParent, 'current'); + logger.debug(`releasePackage generate an random dir path: ${directoryPath}`); + return Promise.all([ + security.qetag(filePath), + common.createEmptyFolder(directoryPath).then(() => { + return common.unzipFile(filePath, directoryPath); + }), + ]) + .then(([blobHash]) => { + return security.uploadPackageType(directoryPath).then((type) => { + return Apps.findByPk(appId).then((appInfo) => { + if (type > 0 && appInfo.os > 0 && appInfo.os != type) { + var e = new AppError('it must be publish it by ios type'); + logger.debug(e); + throw e; + } else { + //不验证 + logger.debug(`Unknown package type:`, { + type, + os: appInfo.os, + }); + } + return blobHash; + }); + }); + }) + .then((blobHash) => { + var dataCenterManager = require('./datacenter-manager')(); + return dataCenterManager.storePackage(directoryPath).then((dataCenter) => { + var packageHash = dataCenter.packageHash; + var manifestFile = dataCenter.manifestFilePath; + return DeploymentsVersions.findOne({ + where: { deployment_id: deploymentId, app_version: appVersion }, + }) + .then((deploymentsVersions) => { + if (!deploymentsVersions) { + return false; + } + return self.isMatchPackageHash( + deploymentsVersions.get('current_package_id'), + packageHash, + ); + }) + .then((isExist) => { + if (isExist) { + var e = new AppError( + "The uploaded package is identical to the contents of the specified deployment's current release.", + ); + logger.debug(e.message); + throw e; + } + return security.qetag(manifestFile); + }) + .then((manifestHash) => { + return Promise.all([ + common.uploadFileToStorage(manifestHash, manifestFile), + common.uploadFileToStorage(blobHash, filePath), + ]).then(() => [packageHash, manifestHash, blobHash]); + }); + }); + }) + .then(([packageHash, manifestHash, blobHash]) => { + var stats = fs.statSync(filePath); + var params = { + releaseMethod: constConfig.RELEAS_EMETHOD_UPLOAD, + releaseUid: releaseUid, + isMandatory: isMandatory + ? constConfig.IS_MANDATORY_YES + : constConfig.IS_MANDATORY_NO, + isDisabled: isDisabled + ? constConfig.IS_DISABLED_YES + : constConfig.IS_DISABLED_NO, + rollout: rollout, + size: stats.size, + description: description, + min_version: versionInfo[1], + max_version: versionInfo[2], + }; + return self.createPackage( + deploymentId, + appVersion, + packageHash, + manifestHash, + blobHash, + params, + ); + }) + .finally(() => common.deleteFolderSync(directoryPathParent)); + } + + modifyReleasePackage(packageId, params) { + var appVersion = _.get(params, 'appVersion'); + var description = _.get(params, 'description'); + var isMandatory = _.get(params, 'isMandatory'); + var isDisabled = _.get(params, 'isDisabled'); + var rollout = _.get(params, 'rollout'); + return Packages.findByPk(packageId) + .then((packageInfo) => { + if (!packageInfo) { + throw new AppError(`packageInfo not found`); + } + if (!_.isNull(appVersion)) { + var versionInfo = common.validatorVersion(appVersion); + if (!versionInfo[0]) { + throw new AppError(`--targetBinaryVersion ${appVersion} not support.`); + } + return Promise.all([ + DeploymentsVersions.findOne({ + where: { + deployment_id: packageInfo.deployment_id, + app_version: appVersion, + }, + }), + DeploymentsVersions.findByPk(packageInfo.deployment_version_id), + ]) + .then(([v1, v2]) => { + if (v1 && !_.eq(v1.id, v2.id)) { + logger.debug(v1); + throw new AppError(`${appVersion} already exist.`); + } + if (!v2) { + throw new AppError(`packages not found.`); + } + return DeploymentsVersions.update( + { + app_version: appVersion, + min_version: versionInfo[1], + max_version: versionInfo[2], + }, + { where: { id: v2.id } }, + ); + }) + .then(() => { + return packageInfo; + }); + } + return packageInfo; + }) + .then((packageInfo) => { + var new_params = { + description: description || packageInfo.description, + } as PackagesInterface; + if (_.isInteger(rollout)) { + new_params.rollout = rollout; + } + if (_.isBoolean(isMandatory)) { + new_params.is_mandatory = isMandatory + ? constConfig.IS_MANDATORY_YES + : constConfig.IS_MANDATORY_NO; + } + if (_.isBoolean(isDisabled)) { + new_params.is_disabled = isDisabled + ? constConfig.IS_DISABLED_YES + : constConfig.IS_DISABLED_NO; + } + return Packages.update(new_params, { where: { id: packageId } }); + }); + } + + promotePackage(sourceDeploymentInfo, destDeploymentInfo, params) { + var self = this; + var appVersion = _.get(params, 'appVersion', null); + var label = _.get(params, 'label', null); + return new Promise((resolve, reject) => { + if (label) { + return Packages.findOne({ + where: { deployment_id: sourceDeploymentInfo.id, label: label }, + }) + .then((sourcePack) => { + if (!sourcePack) { + throw new AppError('label does not exist.'); + } + return DeploymentsVersions.findByPk(sourcePack.deployment_version_id).then( + (deploymentsVersions) => { + if (!deploymentsVersions) { + throw new AppError('deploymentsVersions does not exist.'); + } + resolve([sourcePack, deploymentsVersions]); + }, + ); + }) + .catch((e) => { + reject(e); + }); + } else { + var lastDeploymentVersionId = _.get( + sourceDeploymentInfo, + 'last_deployment_version_id', + 0, + ); + if (_.lte(lastDeploymentVersionId, 0)) { + throw new AppError(`does not exist last_deployment_version_id.`); + } + return DeploymentsVersions.findByPk(lastDeploymentVersionId) + .then((deploymentsVersions) => { + var sourcePackId = _.get(deploymentsVersions, 'current_package_id', 0); + if (_.lte(sourcePackId, 0)) { + throw new AppError(`packageInfo not found.`); + } + return Packages.findByPk(sourcePackId).then((sourcePack) => { + if (!sourcePack) { + throw new AppError(`packageInfo not found.`); + } + resolve([sourcePack, deploymentsVersions]); + }); + }) + .catch((e) => { + reject(e); + }); + } + }) + .then(([sourcePack, deploymentsVersions]) => { + var appFinalVersion = appVersion || deploymentsVersions.app_version; + logger.debug('sourcePack', sourcePack); + logger.debug('deploymentsVersions', deploymentsVersions); + logger.debug('appFinalVersion', appFinalVersion); + return DeploymentsVersions.findOne({ + where: { + deployment_id: destDeploymentInfo.id, + app_version: appFinalVersion, + }, + }) + .then((destDeploymentsVersions) => { + if (!destDeploymentsVersions) { + return false; + } + return self.isMatchPackageHash( + destDeploymentsVersions.get('current_package_id'), + sourcePack.package_hash, + ); + }) + .then((isExist) => { + if (isExist) { + throw new AppError( + "The uploaded package is identical to the contents of the specified deployment's current release.", + ); + } + return [sourcePack, deploymentsVersions, appFinalVersion]; + }); + }) + .then(([sourcePack, deploymentsVersions, appFinalVersion]) => { + var versionInfo = common.validatorVersion(appFinalVersion); + if (!versionInfo[0]) { + logger.debug(`targetBinaryVersion ${appVersion} not support.`); + throw new AppError(`targetBinaryVersion ${appVersion} not support.`); + } + var create_params = { + releaseMethod: constConfig.RELEAS_EMETHOD_PROMOTE, + releaseUid: params.promoteUid || 0, + rollout: params.rollout || 100, + size: sourcePack.size, + description: params.description || sourcePack.description, + originalLabel: sourcePack.label, + originalDeployment: sourceDeploymentInfo.name, + min_version: versionInfo[1], + max_version: versionInfo[2], + isMandatory: 0, + isDisabled: 0, + }; + if (_.isBoolean(params.isMandatory)) { + create_params.isMandatory = params.isMandatory + ? constConfig.IS_MANDATORY_YES + : constConfig.IS_MANDATORY_NO; + } else { + create_params.isMandatory = sourcePack.is_mandatory; + } + if (_.isBoolean(params.isDisabled)) { + create_params.isDisabled = params.isDisabled + ? constConfig.IS_DISABLED_YES + : constConfig.IS_DISABLED_NO; + } else { + create_params.isDisabled = sourcePack.is_disabled; + } + return self.createPackage( + destDeploymentInfo.id, + appFinalVersion, + sourcePack.package_hash, + sourcePack.manifest_blob_url, + sourcePack.blob_url, + create_params, + ); + }); + } + + rollbackPackage(deploymentVersionId, targetLabel, rollbackUid) { + var self = this; + return DeploymentsVersions.findByPk(deploymentVersionId).then((deploymentsVersions) => { + if (!deploymentsVersions) { + throw new AppError('您之前还没有发布过版本'); + } + return Packages.findByPk(deploymentsVersions.current_package_id) + .then((currentPackageInfo): Promise<[PackagesInterface, PackagesInterface[]]> => { + if (targetLabel) { + return Packages.findAll({ + where: { + deployment_version_id: deploymentVersionId, + label: targetLabel, + }, + limit: 1, + }).then((rollbackPackageInfos) => { + return [currentPackageInfo, rollbackPackageInfos]; + }); + } else { + return self + .getCanRollbackPackages(deploymentVersionId) + .then((rollbackPackageInfos) => { + return [currentPackageInfo, rollbackPackageInfos]; + }); + } + }) + .then(([currentPackageInfo, rollbackPackageInfos]) => { + if (currentPackageInfo && rollbackPackageInfos.length > 0) { + for (var i = rollbackPackageInfos.length - 1; i >= 0; i--) { + if ( + rollbackPackageInfos[i].package_hash != + currentPackageInfo.package_hash + ) { + return rollbackPackageInfos[i]; + } + } + } + throw new AppError('没有可供回滚的版本'); + }) + .then((rollbackPackage) => { + var params = { + releaseMethod: 'Rollback', + releaseUid: rollbackUid, + isMandatory: rollbackPackage.is_mandatory, + isDisabled: rollbackPackage.is_disabled, + rollout: rollbackPackage.rollout, + size: rollbackPackage.size, + description: rollbackPackage.description, + originalLabel: rollbackPackage.label, + originalDeployment: '', + min_version: deploymentsVersions.min_version, + max_version: deploymentsVersions.max_version, + }; + return self.createPackage( + deploymentsVersions.deployment_id, + deploymentsVersions.app_version, + rollbackPackage.package_hash, + rollbackPackage.manifest_blob_url, + rollbackPackage.blob_url, + params, + ); + }); + }); + } + + getCanRollbackPackages(deploymentVersionId) { + return Packages.findAll({ + where: { + deployment_version_id: deploymentVersionId, + release_method: { + [Op.in]: [ + constConfig.RELEAS_EMETHOD_UPLOAD, + constConfig.RELEAS_EMETHOD_PROMOTE, + ], + }, + }, + order: [['id', 'desc']], + limit: 2, + }); + } +} + +export const packageManager = new PackageManager(); diff --git a/src/models/apps.ts b/src/models/apps.ts index 542f0b8c..6c5cf542 100644 --- a/src/models/apps.ts +++ b/src/models/apps.ts @@ -7,6 +7,9 @@ interface AppsInterface extends Model { uid: number; os: number; platform: number; + /** + * @deprecated is_use_diff_text is no longer supported + */ is_use_diff_text: number; created_at: Date; updated_at: Date; diff --git a/src/models/packages.ts b/src/models/packages.ts index 6394448b..011d66d4 100644 --- a/src/models/packages.ts +++ b/src/models/packages.ts @@ -1,7 +1,7 @@ import { DataTypes, Model } from 'sequelize'; import { sequelize } from '../core/utils/connections'; -interface PackagesInterface extends Model { +export interface PackagesInterface extends Model { id: number; deployment_version_id: number; deployment_id: number; diff --git a/src/routes/apps.js b/src/routes/apps.js index 896a60b3..00ae708d 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -7,12 +7,12 @@ import { logger } from 'kv-logger'; import { AppError } from '../core/app-error'; import { accountManager } from '../core/services/account-manager'; import { clientManager } from '../core/services/client-manager'; +import { packageManager } from '../core/services/package-manager'; var middleware = require('../core/middleware'); var Deployments = require('../core/services/deployments'); var Collaborators = require('../core/services/collaborators'); var AppManager = require('../core/services/app-manager'); -var PackageManager = require('../core/services/package-manager'); var common = require('../core/utils/common'); const router = express.Router(); @@ -117,7 +117,6 @@ router.get( var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); var deployments = new Deployments(); - var packageManager = new PackageManager(); accountManager .collaboratorCan(uid, appName) .then((col) => { @@ -294,7 +293,6 @@ router.post( deploymentName, }); var deployments = new Deployments(); - var packageManager = new PackageManager(); accountManager .collaboratorCan(uid, appName) .then((col) => { @@ -400,7 +398,6 @@ router.patch( var deploymentName = _.trim(req.params.deploymentName); var uid = req.users.id; var deployments = new Deployments(); - var packageManager = new PackageManager(); var label = _.get(req, 'body.packageInfo.label'); accountManager .collaboratorCan(uid, appName) @@ -469,7 +466,6 @@ router.post( var sourceDeploymentName = _.trim(req.params.sourceDeploymentName); var destDeploymentName = _.trim(req.params.destDeploymentName); var uid = req.users.id; - var packageManager = new PackageManager(); var deployments = new Deployments(); accountManager .collaboratorCan(uid, appName) @@ -553,7 +549,6 @@ var rollbackCb = function (req, res, next) { targetLabel, }); var deployments = new Deployments(); - var packageManager = new PackageManager(); accountManager .collaboratorCan(uid, appName) .then((col) => { From b721f2ad3d6fd02ce3a68633a8620e32a57c8147 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 10 Feb 2022 10:15:05 +0800 Subject: [PATCH 169/347] refactor: turn core/const to ts --- src/core/const.js | 44 +++++++++++++------------- src/core/services/app-manager.js | 40 ++++++++++++++--------- src/core/services/client-manager.ts | 9 +++--- src/core/services/package-manager.ts | 47 +++++++++++++--------------- src/core/utils/security.js | 6 ++-- src/db.ts | 5 ++- src/routes/apps.js | 33 ++++++++++++------- src/www.ts | 4 +-- 8 files changed, 103 insertions(+), 85 deletions(-) diff --git a/src/core/const.js b/src/core/const.js index 638e8cc5..c8629112 100644 --- a/src/core/const.js +++ b/src/core/const.js @@ -6,34 +6,34 @@ function define(name, value) { } //定义支持的平台 -define('IOS', 1); -define('IOS_NAME', 'iOS'); -define('ANDROID', 2); -define('ANDROID_NAME', 'Android'); -define('WINDOWS', 3); -define('WINDOWS_NAME', 'Windows'); +export const IOS = 1; +export const IOS_NAME = 'iOS'; +export const ANDROID = 2; +export const ANDROID_NAME = 'Android'; +export const WINDOWS = 3; +export const WINDOWS_NAME = 'Windows'; //定义支持的应用类型 -define('REACT_NATIVE', 1); -define('REACT_NATIVE_NAME', 'React-Native'); -define('CORDOVA', 2); -define('CORDOVA_NAME', 'Cordova'); +export const REACT_NATIVE = 1; +export const REACT_NATIVE_NAME = 'React-Native'; +export const CORDOVA = 2; +export const CORDOVA_NAME = 'Cordova'; -define('PRODUCTION', 'Production'); -define('STAGING', 'Staging'); +export const PRODUCTION = 'Production'; +export const STAGING = 'Staging'; -define('IS_MANDATORY_YES', 1); -define('IS_MANDATORY_NO', 0); +export const IS_MANDATORY_YES = 1; +export const IS_MANDATORY_NO = 0; -define('IS_DISABLED_YES', 1); -define('IS_DISABLED_NO', 0); +export const IS_DISABLED_YES = 1; +export const IS_DISABLED_NO = 0; -define('RELEAS_EMETHOD_PROMOTE', 'Promote'); -define('RELEAS_EMETHOD_UPLOAD', 'Upload'); +export const RELEAS_EMETHOD_PROMOTE = 'Promote'; +export const RELEAS_EMETHOD_UPLOAD = 'Upload'; -define('DEPLOYMENT_SUCCEEDED', 1); -define('DEPLOYMENT_FAILED', 2); +export const DEPLOYMENT_SUCCEEDED = 1; +export const DEPLOYMENT_FAILED = 2; -define('DIFF_MANIFEST_FILE_NAME', 'hotcodepush.json'); +export const DIFF_MANIFEST_FILE_NAME = 'hotcodepush.json'; -define('CURRENT_DB_VERSION', '0.5.0'); +export const CURRENT_DB_VERSION = '0.5.0'; diff --git a/src/core/services/app-manager.js b/src/core/services/app-manager.js index bd4662f3..80c7b130 100644 --- a/src/core/services/app-manager.js +++ b/src/core/services/app-manager.js @@ -6,6 +6,20 @@ import { Deployments } from '../../models/deployments'; import { Users } from '../../models/users'; import { sequelize } from '../utils/connections'; import { AppError } from '../app-error'; +import { + IOS, + IOS_NAME, + ANDROID, + ANDROID_NAME, + WINDOWS, + WINDOWS_NAME, + CORDOVA, + CORDOVA_NAME, + REACT_NATIVE, + REACT_NATIVE_NAME, + STAGING, + PRODUCTION, +} from '../const'; var security = require('../../core/utils/security'); @@ -32,13 +46,12 @@ proto.addApp = function (uid, appName, os, platform, identical) { transaction: t, }, ).then((apps) => { - var constName = require('../const'); var appId = apps.id; var deployments = []; var deploymentKey = security.randToken(28) + identical; deployments.push({ appid: appId, - name: constName.PRODUCTION, + name: PRODUCTION, last_deployment_version_id: 0, label_id: 0, deployment_key: deploymentKey, @@ -46,7 +59,7 @@ proto.addApp = function (uid, appName, os, platform, identical) { deploymentKey = security.randToken(28) + identical; deployments.push({ appid: appId, - name: constName.STAGING, + name: STAGING, last_deployment_version_id: 0, label_id: 0, deployment_key: deploymentKey, @@ -110,18 +123,17 @@ proto.listApps = function (uid) { var rs = Promise.all( _.values(appInfos).map((v) => { return self.getAppDetailInfo(v, uid).then((info) => { - var constName = require('../const'); - if (info.os == constName.IOS) { - info.os = constName.IOS_NAME; - } else if (info.os == constName.ANDROID) { - info.os = constName.ANDROID_NAME; - } else if (info.os == constName.WINDOWS) { - info.os = constName.WINDOWS_NAME; + if (info.os == IOS) { + info.os = IOS_NAME; + } else if (info.os == ANDROID) { + info.os = ANDROID_NAME; + } else if (info.os == WINDOWS) { + info.os = WINDOWS_NAME; } - if (info.platform == constName.REACT_NATIVE) { - info.platform = constName.REACT_NATIVE_NAME; - } else if (info.platform == constName.CORDOVA) { - info.platform = constName.CORDOVA_NAME; + if (info.platform == REACT_NATIVE) { + info.platform = REACT_NATIVE_NAME; + } else if (info.platform == CORDOVA) { + info.platform = CORDOVA_NAME; } return info; }); diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index 545ed646..41912b1c 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -13,7 +13,8 @@ import { config } from '../config'; import { AppError } from '../app-error'; import { redisClient } from '../utils/connections'; -var constConfig = require('../const'); +import { DEPLOYMENT_FAILED, DEPLOYMENT_SUCCEEDED } from '../const'; + var common = require('../utils/common'); const UPDATE_CHECK = 'UPDATE_CHECK'; @@ -279,9 +280,9 @@ class ClientManager { var statusText = _.get(others, 'status'); var status = 0; if (_.eq(statusText, 'DeploymentSucceeded')) { - status = constConfig.DEPLOYMENT_SUCCEEDED; + status = DEPLOYMENT_SUCCEEDED; } else if (_.eq(statusText, 'DeploymentFailed')) { - status = constConfig.DEPLOYMENT_FAILED; + status = DEPLOYMENT_FAILED; } var packageId = packages.id; var previous_deployment_key = _.get(others, 'previousDeploymentKey'); @@ -300,7 +301,7 @@ class ClientManager { if (_.isEmpty(metrics)) { return; } - if (_.eq(status, constConfig.DEPLOYMENT_SUCCEEDED)) { + if (_.eq(status, DEPLOYMENT_SUCCEEDED)) { return metrics.increment(['installed', 'active'], { by: 1 }); } else { return metrics.increment(['installed', 'failed'], { by: 1 }); diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index ec110aff..590aaa0d 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -17,11 +17,19 @@ import { PackagesDiff } from '../../models/packages_diff'; import { PackagesMetrics } from '../../models/packages_metrics'; import { sequelize } from '../utils/connections'; import { AppError } from '../app-error'; +import { + DIFF_MANIFEST_FILE_NAME, + IS_DISABLED_NO, + IS_DISABLED_YES, + IS_MANDATORY_NO, + IS_MANDATORY_YES, + RELEAS_EMETHOD_PROMOTE, + RELEAS_EMETHOD_UPLOAD, +} from '../const'; var dataCenterManager = require('./datacenter-manager')(); var security = require('../utils/security'); var common = require('../utils/common'); -var constConfig = require('../const'); class PackageManager { getMetricsbyPackageId = function (packageId) { @@ -108,7 +116,7 @@ class PackageManager { } createPackage(deploymentId, appVersion, packageHash, manifestHash, blobHash, params) { - var releaseMethod = params.releaseMethod || constConfig.RELEAS_EMETHOD_UPLOAD; + var releaseMethod = params.releaseMethod || RELEAS_EMETHOD_UPLOAD; var releaseUid = params.releaseUid || 0; var isMandatory = params.isMandatory || 0; var size = params.size || 0; @@ -212,7 +220,7 @@ class PackageManager { var file = files[i]; zipFile.addFile(path.join(baseDirectoryPath, file), slash(file)); } - zipFile.addFile(hotCodePushFile, constConfig.DIFF_MANIFEST_FILE_NAME); + zipFile.addFile(hotCodePushFile, DIFF_MANIFEST_FILE_NAME); zipFile.end(); }); } @@ -441,14 +449,10 @@ class PackageManager { .then(([packageHash, manifestHash, blobHash]) => { var stats = fs.statSync(filePath); var params = { - releaseMethod: constConfig.RELEAS_EMETHOD_UPLOAD, + releaseMethod: RELEAS_EMETHOD_UPLOAD, releaseUid: releaseUid, - isMandatory: isMandatory - ? constConfig.IS_MANDATORY_YES - : constConfig.IS_MANDATORY_NO, - isDisabled: isDisabled - ? constConfig.IS_DISABLED_YES - : constConfig.IS_DISABLED_NO, + isMandatory: isMandatory ? IS_MANDATORY_YES : IS_MANDATORY_NO, + isDisabled: isDisabled ? IS_DISABLED_YES : IS_DISABLED_NO, rollout: rollout, size: stats.size, description: description, @@ -523,14 +527,10 @@ class PackageManager { new_params.rollout = rollout; } if (_.isBoolean(isMandatory)) { - new_params.is_mandatory = isMandatory - ? constConfig.IS_MANDATORY_YES - : constConfig.IS_MANDATORY_NO; + new_params.is_mandatory = isMandatory ? IS_MANDATORY_YES : IS_MANDATORY_NO; } if (_.isBoolean(isDisabled)) { - new_params.is_disabled = isDisabled - ? constConfig.IS_DISABLED_YES - : constConfig.IS_DISABLED_NO; + new_params.is_disabled = isDisabled ? IS_DISABLED_YES : IS_DISABLED_NO; } return Packages.update(new_params, { where: { id: packageId } }); }); @@ -624,7 +624,7 @@ class PackageManager { throw new AppError(`targetBinaryVersion ${appVersion} not support.`); } var create_params = { - releaseMethod: constConfig.RELEAS_EMETHOD_PROMOTE, + releaseMethod: RELEAS_EMETHOD_PROMOTE, releaseUid: params.promoteUid || 0, rollout: params.rollout || 100, size: sourcePack.size, @@ -638,15 +638,13 @@ class PackageManager { }; if (_.isBoolean(params.isMandatory)) { create_params.isMandatory = params.isMandatory - ? constConfig.IS_MANDATORY_YES - : constConfig.IS_MANDATORY_NO; + ? IS_MANDATORY_YES + : IS_MANDATORY_NO; } else { create_params.isMandatory = sourcePack.is_mandatory; } if (_.isBoolean(params.isDisabled)) { - create_params.isDisabled = params.isDisabled - ? constConfig.IS_DISABLED_YES - : constConfig.IS_DISABLED_NO; + create_params.isDisabled = params.isDisabled ? IS_DISABLED_YES : IS_DISABLED_NO; } else { create_params.isDisabled = sourcePack.is_disabled; } @@ -731,10 +729,7 @@ class PackageManager { where: { deployment_version_id: deploymentVersionId, release_method: { - [Op.in]: [ - constConfig.RELEAS_EMETHOD_UPLOAD, - constConfig.RELEAS_EMETHOD_PROMOTE, - ], + [Op.in]: [RELEAS_EMETHOD_UPLOAD, RELEAS_EMETHOD_PROMOTE], }, }, order: [['id', 'desc']], diff --git a/src/core/utils/security.js b/src/core/utils/security.js index 47596e86..ef88bf49 100644 --- a/src/core/utils/security.js +++ b/src/core/utils/security.js @@ -4,6 +4,7 @@ import _ from 'lodash'; import crypto from 'crypto'; import { AppError } from '../app-error'; +import { ANDROID, IOS } from '../const'; var bcrypt = require('bcryptjs'); var qetag = require('../utils/qetag'); @@ -123,17 +124,16 @@ security.uploadPackageType = function (directoryPath) { logger.debug(`uploadPackageType empty files`); reject(new AppError('empty files')); } else { - var constName = require('../const'); const AREGEX = /android\.bundle/; const AREGEX_IOS = /main\.jsbundle/; var packageType = 0; _.forIn(files, function (value) { if (AREGEX.test(value)) { - packageType = constName.ANDROID; + packageType = ANDROID; return false; } if (AREGEX_IOS.test(value)) { - packageType = constName.IOS; + packageType = IOS; return false; } }); diff --git a/src/db.ts b/src/db.ts index e628216e..b49ee612 100755 --- a/src/db.ts +++ b/src/db.ts @@ -8,8 +8,7 @@ import path from 'path'; import _ from 'lodash'; import mysql from 'mysql2'; import yargs from 'yargs'; - -const constConfig = require('./core/const'); +import { CURRENT_DB_VERSION } from './core/const'; var argv = yargs .usage('Usage: $0 [options]') @@ -117,7 +116,7 @@ if (command === 'init') { .query('select `version` from `versions` where `type`=1 limit 1') .then((rs) => { version_no = _.get(rs, '0.version', '0.0.1'); - if (version_no == constConfig.CURRENT_DB_VERSION) { + if (version_no == CURRENT_DB_VERSION) { console.log('Everything up-to-date.'); process.exit(0); } diff --git a/src/routes/apps.js b/src/routes/apps.js index 00ae708d..2c05a138 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -8,6 +8,18 @@ import { AppError } from '../core/app-error'; import { accountManager } from '../core/services/account-manager'; import { clientManager } from '../core/services/client-manager'; import { packageManager } from '../core/services/package-manager'; +import { + IOS, + IOS_NAME, + ANDROID, + ANDROID_NAME, + WINDOWS, + WINDOWS_NAME, + REACT_NATIVE, + REACT_NATIVE_NAME, + CORDOVA, + CORDOVA_NAME, +} from '../core/const'; var middleware = require('../core/middleware'); var Deployments = require('../core/services/deployments'); @@ -804,28 +816,27 @@ router.post('/', middleware.checkToken, (req, res, next) => { uid, ...req.body, }); - var constName = require('../core/const'); var appName = req.body.name; if (_.isEmpty(appName)) { return res.status(406).send('Please input name!'); } var osName = _.toLower(req.body.os); var os; - if (osName == _.toLower(constName.IOS_NAME)) { - os = constName.IOS; - } else if (osName == _.toLower(constName.ANDROID_NAME)) { - os = constName.ANDROID; - } else if (osName == _.toLower(constName.WINDOWS_NAME)) { - os = constName.WINDOWS; + if (osName == _.toLower(IOS_NAME)) { + os = IOS; + } else if (osName == _.toLower(ANDROID_NAME)) { + os = ANDROID; + } else if (osName == _.toLower(WINDOWS_NAME)) { + os = WINDOWS; } else { return res.status(406).send('Please input os [iOS|Android|Windows]!'); } var platformName = _.toLower(req.body.platform); var platform; - if (platformName == _.toLower(constName.REACT_NATIVE_NAME)) { - platform = constName.REACT_NATIVE; - } else if (platformName == _.toLower(constName.CORDOVA_NAME)) { - platform = constName.CORDOVA; + if (platformName == _.toLower(REACT_NATIVE_NAME)) { + platform = REACT_NATIVE; + } else if (platformName == _.toLower(CORDOVA_NAME)) { + platform = CORDOVA; } else { return res.status(406).send('Please input platform [React-Native|Cordova]!'); } diff --git a/src/www.ts b/src/www.ts index 8cbeca15..8a279f16 100755 --- a/src/www.ts +++ b/src/www.ts @@ -12,7 +12,7 @@ import _ from 'lodash'; import { app } from './app'; import { Versions } from './models/versions'; -var constConfig = require('./core/const'); +import { CURRENT_DB_VERSION } from './core/const'; /** * Get port from environment and store in Express. @@ -43,7 +43,7 @@ const server = http.createServer(app); */ Versions.findOne({ where: { type: 1 } }) .then(function (v) { - if (!v || v.get('version') != constConfig.CURRENT_DB_VERSION) { + if (!v || v.version != CURRENT_DB_VERSION) { throw new Error( 'Please upgrade your database. use `npm run upgrade` or `code-push-server-db upgrade`', ); From be219b6cee6a3fd77730f177c28d104db86da84b Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 10 Feb 2022 10:17:57 +0800 Subject: [PATCH 170/347] refactor: rename core/const.js to ts --- src/core/{const.js => const.ts} | 7 ------- 1 file changed, 7 deletions(-) rename src/core/{const.js => const.ts} (86%) diff --git a/src/core/const.js b/src/core/const.ts similarity index 86% rename from src/core/const.js rename to src/core/const.ts index c8629112..a7eff5bb 100644 --- a/src/core/const.js +++ b/src/core/const.ts @@ -1,10 +1,3 @@ -function define(name, value) { - Object.defineProperty(exports, name, { - value: value, - enumerable: true, - }); -} - //定义支持的平台 export const IOS = 1; export const IOS_NAME = 'iOS'; From 2bd6221f25717c32d17bbe5e77d7c845187e04cd Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 10 Feb 2022 10:42:33 +0800 Subject: [PATCH 171/347] chore(release): 2.0.0 --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d55646b..a1d254cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,33 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.0.0](https://github.com/shm-open/code-push-server/compare/v1.2.0...v2.0.0) (2022-02-10) + + +### ⚠ BREAKING CHANGES + +* drop is_use_diff_text support +* drop codePushWeb redirect support +* drop upyun support +* drop CONFIG_FILE support, please use env variable config items + +### Features + +* drop upyun support ([57bbdc5](https://github.com/shm-open/code-push-server/commit/57bbdc58d7c9174f4d00ad9ec1525f5f828e00b4)) + + +### Bug Fixes + +* **deps:** update dependency aws-sdk to v2.1072.0 ([82f41e0](https://github.com/shm-open/code-push-server/commit/82f41e0e347802a851534af3d9558fe1a3919936)) +* **deps:** update dependency sequelize to v6.16.0 ([e3bb1e4](https://github.com/shm-open/code-push-server/commit/e3bb1e4f223f9a43430318fe20fc1af759c30721)) +* **deps:** update dependency sequelize to v6.16.1 ([568a5b0](https://github.com/shm-open/code-push-server/commit/568a5b02b280eb9211948a4d6a7380efac33d199)) +* update deps redis to v4, reuse the same redis client without quit ([98c2ca6](https://github.com/shm-open/code-push-server/commit/98c2ca60a3285353c9ce3cdab5f8eee1b9deffba)) + + +* drop codePushWeb redirect support ([255ea15](https://github.com/shm-open/code-push-server/commit/255ea1530aba7a57c66e0e304fa6c7b23485f219)) +* turn package-manager to ts ([e067aed](https://github.com/shm-open/code-push-server/commit/e067aed251a5376bc437502c9ceee86f9408988e)) +* turn top level app/www to ts ([76d8898](https://github.com/shm-open/code-push-server/commit/76d8898e563bbf52361b87b615bf7c13f40409e0)) + ## [1.2.0](https://github.com/shm-open/code-push-server/compare/v1.1.1...v1.2.0) (2022-02-08) diff --git a/package-lock.json b/package-lock.json index c010f91a..0fa1ff1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "1.2.0", + "version": "2.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 3c69a9ea..02ed7c33 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "1.2.0", + "version": "2.0.0", "license": "MIT", "repository": { "type": "git", From 6289835990e1ae964378fc28d2037d1ce752107a Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 11 Feb 2022 21:37:29 +0800 Subject: [PATCH 172/347] fix(deps): update kv-logger to 0.5.1 --- package-lock.json | 6 +++--- package.json | 2 +- src/core/config.ts | 17 +++++++++++------ 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0fa1ff1d..4f697261 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4690,9 +4690,9 @@ "dev": true }, "kv-logger": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/kv-logger/-/kv-logger-0.4.1.tgz", - "integrity": "sha512-+DuHtrVBcQDU57s8edqkUon3mWgm0lpbvFmPPLCcecQIHWA6QHqPshMZ099qxUdQSSO59B8OEKK4sYYySonDYw==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/kv-logger/-/kv-logger-0.5.1.tgz", + "integrity": "sha512-9r31KH0SYCesAqRRTUcjaPEaFZfNZEouT7QWZ53vIhXIKzkjpAPjl1lubOgCu3kegi6vZyDERAynClaC8E1yvg==" }, "language-subtag-registry": { "version": "0.3.21", diff --git a/package.json b/package.json index 02ed7c33..14b3fa97 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "helmet": "5.0.2", "jschardet": "3.0.0", "jsonwebtoken": "8.5.1", - "kv-logger": "0.4.1", + "kv-logger": "0.5.1", "lodash": "4.17.21", "moment": "2.29.1", "mysql2": "2.3.3", diff --git a/src/core/config.ts b/src/core/config.ts index 0c6eae15..42b9cb0f 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -1,5 +1,11 @@ import os from 'os'; -import { setLogTransports, ConsoleTransport, LogLevelFilter, logger } from 'kv-logger'; +import { + setLogTransports, + ConsoleLogTransport, + logger, + LogLevel, + withLogLevelFilter, +} from 'kv-logger'; function toBool(str: string): boolean { return str === 'true' || str === '1'; @@ -125,12 +131,11 @@ export const config = { } as const; // config logger - make sure its ready before anyting else -setLogTransports([ - new LogLevelFilter( - new ConsoleTransport(config.log.format as 'text' | 'json'), - config.log.level as 'error' | 'warn' | 'info' | 'debug', +setLogTransports( + withLogLevelFilter(config.log.level as LogLevel)( + new ConsoleLogTransport(config.log.format as 'text' | 'json'), ), -]); +); const env = process.env.NODE_ENV || 'development'; logger.info(`use config`, { From cae80fe5ba00c920b79df3422fb8c86424a6dc07 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 11 Feb 2022 21:50:04 +0800 Subject: [PATCH 173/347] fix(deps): update kv-logger to 0.5.2 and fix build issue --- package-lock.json | 6 +++--- package.json | 2 +- src/core/services/package-manager.ts | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4f697261..a0119435 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4690,9 +4690,9 @@ "dev": true }, "kv-logger": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/kv-logger/-/kv-logger-0.5.1.tgz", - "integrity": "sha512-9r31KH0SYCesAqRRTUcjaPEaFZfNZEouT7QWZ53vIhXIKzkjpAPjl1lubOgCu3kegi6vZyDERAynClaC8E1yvg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/kv-logger/-/kv-logger-0.5.2.tgz", + "integrity": "sha512-yiPjzU66HK7xCqgOFBpQGGxMeRq05axt2BJPusNNoH072wizzSF4p4O8ZYohuE50IkX9UH/X9FIucx1ibWQxRg==" }, "language-subtag-registry": { "version": "0.3.21", diff --git a/package.json b/package.json index 14b3fa97..c3f843bc 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "helmet": "5.0.2", "jschardet": "3.0.0", "jsonwebtoken": "8.5.1", - "kv-logger": "0.5.1", + "kv-logger": "0.5.2", "lodash": "4.17.21", "moment": "2.29.1", "mysql2": "2.3.3", diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index 590aaa0d..04f0a432 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -498,7 +498,6 @@ class PackageManager { ]) .then(([v1, v2]) => { if (v1 && !_.eq(v1.id, v2.id)) { - logger.debug(v1); throw new AppError(`${appVersion} already exist.`); } if (!v2) { From 2ab18d4bbd2e72b587750c79de277003e5c24633 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 14 Feb 2022 02:41:11 +0000 Subject: [PATCH 174/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.8.2 --- package-lock.json | 309 ++++++++++++---------------------------------- package.json | 2 +- 2 files changed, 83 insertions(+), 228 deletions(-) diff --git a/package-lock.json b/package-lock.json index a0119435..4fbddeab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -201,18 +201,18 @@ "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" }, "@babel/runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.0.tgz", - "integrity": "sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.0.tgz", - "integrity": "sha512-qeydncU80ravKzovVncW3EYaC1ji3GpntdPgNcJy9g7hHSY6KX+ne1cbV3ov7Zzm4F1z0+QreZPCuw1ynkmYNg==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.2.tgz", + "integrity": "sha512-NcKtr2epxfIrNM4VOmPKO46TvDMCBhgi2CrSHaEarrz+Plk2K5r9QemmOFTGpZaoKnWoGH5MO+CzeRsih/Fcgg==", "dev": true, "requires": { "core-js-pure": "^3.20.2", @@ -333,21 +333,6 @@ "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -361,14 +346,14 @@ } }, "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", + "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", + "espree": "^9.3.1", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", @@ -377,15 +362,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "globals": { "version": "13.12.1", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", @@ -401,12 +377,6 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -424,23 +394,6 @@ "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@humanwhocodes/object-schema": { @@ -572,15 +525,15 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.8.1.tgz", - "integrity": "sha512-ogDArsmily6IJmVB26z7VfyB/qiwx2AD1BikhnI+i8EHYr6X0k2NShwDLPkILzE5rZgOD10ZjBIs6poiv80goA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.8.2.tgz", + "integrity": "sha512-kT1L82POt+domWH32/vcndS0h4W+mOas6b2L5aLsFzo1b4+OB04BocxvALs0Hrb9KFC4CVmCL9x06b5jZWjSiA==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.10.2", - "@typescript-eslint/parser": "5.10.2", + "@typescript-eslint/eslint-plugin": "5.11.0", + "@typescript-eslint/parser": "5.11.0", "babel-eslint": "10.1.0", - "eslint": "8.8.0", + "eslint": "8.9.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.3.0", "eslint-import-resolver-typescript": "2.5.0", @@ -807,14 +760,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz", - "integrity": "sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz", + "integrity": "sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/type-utils": "5.10.2", - "@typescript-eslint/utils": "5.10.2", + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/type-utils": "5.11.0", + "@typescript-eslint/utils": "5.11.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -823,21 +776,6 @@ "tsutils": "^3.21.0" }, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -850,95 +788,61 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.10.2.tgz", - "integrity": "sha512-stRnIlxDduzxtaVLtEohESoXI1k7J6jvJHGyIkOT2pvXbg5whPM6f9tzJ51bJJxaJTdmvwgVFDNCopFRb2F5Gw==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.11.0.tgz", + "integrity": "sha512-EPvC/bU2n1LKtzKWP1AjGWkp7r8tJ8giVlZHIODo6q7SAd6J+/9vjtEKHK2G/Qp+D2IGPsQge+oadDR3CZcFtQ==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.10.2" + "@typescript-eslint/utils": "5.11.0" } }, "@typescript-eslint/parser": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", - "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.11.0.tgz", + "integrity": "sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/typescript-estree": "5.11.0", "debug": "^4.3.2" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@typescript-eslint/scope-manager": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", - "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz", + "integrity": "sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2" + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/visitor-keys": "5.11.0" } }, "@typescript-eslint/type-utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz", - "integrity": "sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz", + "integrity": "sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.10.2", + "@typescript-eslint/utils": "5.11.0", "debug": "^4.3.2", "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@typescript-eslint/types": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", - "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz", + "integrity": "sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", - "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz", + "integrity": "sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/visitor-keys": "5.11.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -946,15 +850,6 @@ "tsutils": "^3.21.0" }, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -964,12 +859,6 @@ "is-extglob": "^2.1.1" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -982,26 +871,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", - "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz", + "integrity": "sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/typescript-estree": "5.11.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", - "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz", + "integrity": "sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/types": "5.11.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -2616,12 +2505,12 @@ } }, "eslint": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", - "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", + "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.1.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -2629,10 +2518,10 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2698,15 +2587,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2714,9 +2594,9 @@ "dev": true }, "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -2774,12 +2654,6 @@ "type-check": "~0.4.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -2899,23 +2773,6 @@ "is-glob": "^4.0.1", "resolve": "^1.20.0", "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "eslint-module-utils": { @@ -3217,20 +3074,20 @@ } }, "eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "requires": { "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "eslint-visitor-keys": "^3.3.0" }, "dependencies": { "acorn": { @@ -3596,16 +3453,14 @@ "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" - }, - "dependencies": { - "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - } } }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", diff --git a/package.json b/package.json index c3f843bc..796155be 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.8.1", + "@shm-open/eslint-config-bundle": "1.8.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", "@types/fs-extra": "9.0.13", From 932faf2c1b921188a947d4a99a4946bc4ea63840 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 15 Feb 2022 01:30:59 +0000 Subject: [PATCH 175/347] chore(deps): update dependency @types/node-fetch to v2.6.0 --- package-lock.json | 21 ++++----------------- package.json | 2 +- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4fbddeab..0e449dcc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -676,26 +676,13 @@ "integrity": "sha1-V9gc2YcZ3yyd4Rjy1fOxEg3NcnU=" }, "@types/node-fetch": { - "version": "2.5.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", - "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-HT+uU6V27wJFXgEqTk/+rVE1MWcp5bg7Yuz//43TZ2PjpQbQ8vDLwVmB+fSpgs83j/+p+rMIlDRo9TL3IexWMA==", "dev": true, "requires": { "@types/node": "*", - "form-data": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } + "form-data": "^2.3.3" } }, "@types/nodemailer": { diff --git a/package.json b/package.json index 796155be..8ef54731 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "@types/fs-extra": "9.0.13", "@types/jsonwebtoken": "8.5.8", "@types/lodash": "4.14.178", - "@types/node-fetch": "2.5.12", + "@types/node-fetch": "2.6.0", "@types/nodemailer": "6.4.4", "@types/validator": "13.7.1", "@types/yazl": "2.4.2", From 886d740c389d5db2fbfad3e044d8b5e7223b63be Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 15 Feb 2022 21:39:43 +0000 Subject: [PATCH 176/347] chore(deps): update dependency @types/node-fetch to v2.6.1 --- package-lock.json | 21 +++++++++++++++++---- package.json | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0e449dcc..5bf502b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -676,13 +676,26 @@ "integrity": "sha1-V9gc2YcZ3yyd4Rjy1fOxEg3NcnU=" }, "@types/node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-HT+uU6V27wJFXgEqTk/+rVE1MWcp5bg7Yuz//43TZ2PjpQbQ8vDLwVmB+fSpgs83j/+p+rMIlDRo9TL3IexWMA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", "dev": true, "requires": { "@types/node": "*", - "form-data": "^2.3.3" + "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "@types/nodemailer": { diff --git a/package.json b/package.json index 8ef54731..114190ad 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "@types/fs-extra": "9.0.13", "@types/jsonwebtoken": "8.5.8", "@types/lodash": "4.14.178", - "@types/node-fetch": "2.6.0", + "@types/node-fetch": "2.6.1", "@types/nodemailer": "6.4.4", "@types/validator": "13.7.1", "@types/yazl": "2.4.2", From 19577357be7bc4257ae6030dde29691e87fb89ba Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 16 Feb 2022 14:56:38 +0800 Subject: [PATCH 177/347] refactor: enable eslint for ts files and fix issues --- .eslintignore | 1 + .eslintrc.js | 35 ++ src/app.ts | 37 ++- src/core/app-error.ts | 4 + src/core/config.ts | 6 +- src/core/const.ts | 14 +- src/core/services/account-manager.ts | 83 ++--- src/core/services/client-manager.ts | 192 +++++------ src/core/services/package-manager.ts | 469 +++++++++++++-------------- src/core/utils/connections.ts | 2 +- src/db.ts | 63 ++-- src/models/collaborators.ts | 2 +- src/models/deployments.ts | 13 +- src/www.ts | 152 ++++----- 14 files changed, 542 insertions(+), 531 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.js diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..a6c7c285 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +*.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..15982061 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,35 @@ +module.exports = { + extends: ['@shm-open/eslint-config-bundle'], + rules: { + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'default', + format: ['camelCase', 'PascalCase', 'UPPER_CASE', 'snake_case'], + leadingUnderscore: 'allowSingleOrDouble', + }, + { + selector: 'enum', + format: ['PascalCase'], + }, + { + selector: 'enumMember', + format: ['UPPER_CASE'], + }, + { + selector: 'variableLike', + format: ['camelCase', 'PascalCase'], + leadingUnderscore: 'allow', + }, + { + selector: 'typeLike', + format: ['PascalCase'], + }, + { + selector: 'objectLiteralProperty', + format: ['camelCase', 'snake_case', 'UPPER_CASE'], + }, + ], + }, +}; diff --git a/src/app.ts b/src/app.ts index 3da56ea1..34cc5b61 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,22 +1,22 @@ -import express from 'express'; +import fs from 'fs'; import path from 'path'; -import cookieParser from 'cookie-parser'; import bodyParser from 'body-parser'; +import cookieParser from 'cookie-parser'; +import express from 'express'; import helmet from 'helmet'; -import _ from 'lodash'; -import fs from 'fs'; import { logger } from 'kv-logger'; +import _ from 'lodash'; -import { config } from './core/config'; import { AppError, NotFound } from './core/app-error'; +import { config } from './core/config'; -const routes = require('./routes/index'); -const indexV1 = require('./routes/indexV1'); -const auth = require('./routes/auth'); const accessKeys = require('./routes/accessKeys'); const account = require('./routes/account'); -const users = require('./routes/users'); const apps = require('./routes/apps'); +const auth = require('./routes/auth'); +const routes = require('./routes/index'); +const indexV1 = require('./routes/indexV1'); +const users = require('./routes/users'); export const app = express(); @@ -35,7 +35,7 @@ app.use(cookieParser()); app.use(express.static(path.join(__dirname, '../public'))); logger.debug('use set Access-Control Header'); -app.all('*', function (req, res, next) { +app.all('*', (req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header( 'Access-Control-Allow-Headers', @@ -45,27 +45,28 @@ app.all('*', function (req, res, next) { next(); }); -logger.debug('config common.storageType value: ' + _.get(config, 'common.storageType')); +logger.debug(`config common.storageType value: ${_.get(config, 'common.storageType')}`); if (_.get(config, 'common.storageType') === 'local') { - var localStorageDir = _.get(config, 'local.storageDir'); + const localStorageDir = _.get(config, 'local.storageDir'); if (localStorageDir) { - logger.debug('config common.storageDir value: ' + localStorageDir); + logger.debug(`config common.storageDir value: ${localStorageDir}`); if (!fs.existsSync(localStorageDir)) { - var e = new Error(`Please create dir ${localStorageDir}`); + const e = new Error(`Please create dir ${localStorageDir}`); logger.error(e); throw e; } try { logger.debug('checking storageDir fs.W_OK | fs.R_OK'); + // eslint-disable-next-line no-bitwise fs.accessSync(localStorageDir, fs.constants.W_OK | fs.constants.R_OK); logger.debug('storageDir fs.W_OK | fs.R_OK is ok'); } catch (e) { logger.error(e); throw e; } - logger.debug('static download uri value: ' + _.get(config, 'local.public', '/download')); + logger.debug(`static download uri value: ${_.get(config, 'local.public', '/download')}`); app.use(_.get(config, 'local.public', '/download'), express.static(localStorageDir)); } else { logger.error('please config local storageDir'); @@ -81,12 +82,14 @@ app.use('/users', users); app.use('/apps', apps); // 404 handler -app.use(function (req, res, next) { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +app.use((req, res, next) => { throw new NotFound(`${req.method} ${req.url} not found`); }); // error handler -app.use(function (err, req, res, next) { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +app.use((err, req, res, next) => { if (err instanceof AppError) { res.status(err.status).send(err.message); logger.debug(err); diff --git a/src/core/app-error.ts b/src/core/app-error.ts index 44734760..fb0cea2b 100644 --- a/src/core/app-error.ts +++ b/src/core/app-error.ts @@ -1,8 +1,10 @@ +/* eslint-disable max-classes-per-file */ export class AppError extends Error { constructor(message) { super(message); this.name = 'AppError'; } + public status = 200; } @@ -11,6 +13,7 @@ export class NotFound extends AppError { super(message || 'Not Found'); this.name = 'NotFoundError'; } + public status = 404; } @@ -19,5 +22,6 @@ export class Unauthorized extends AppError { super(message || 'Unauthorized'); this.name = 'UnauthorizedError'; } + public status = 401; } diff --git a/src/core/config.ts b/src/core/config.ts index 42b9cb0f..d123124c 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -12,7 +12,7 @@ function toBool(str: string): boolean { } function toNumber(str: string, defaultValue: number): number { - var num = Number(str); + const num = Number(str); if (Number.isNaN(num)) { return defaultValue; } @@ -48,7 +48,7 @@ export const config = { s3: { accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, - sessionToken: process.env.AWS_SESSION_TOKEN, //(optional) + sessionToken: process.env.AWS_SESSION_TOKEN, // (optional) bucketName: process.env.AWS_BUCKET_NAME, region: process.env.AWS_REGION, // binary files download host address. @@ -139,6 +139,6 @@ setLogTransports( const env = process.env.NODE_ENV || 'development'; logger.info(`use config`, { - env: env, + env, storageType: config.common.storageType, }); diff --git a/src/core/const.ts b/src/core/const.ts index a7eff5bb..8f4373e5 100644 --- a/src/core/const.ts +++ b/src/core/const.ts @@ -1,4 +1,6 @@ -//定义支持的平台 +/* eslint-disable @typescript-eslint/naming-convention */ + +// supported platforms export const IOS = 1; export const IOS_NAME = 'iOS'; export const ANDROID = 2; @@ -6,27 +8,29 @@ export const ANDROID_NAME = 'Android'; export const WINDOWS = 3; export const WINDOWS_NAME = 'Windows'; -//定义支持的应用类型 +// supported apps export const REACT_NATIVE = 1; export const REACT_NATIVE_NAME = 'React-Native'; export const CORDOVA = 2; export const CORDOVA_NAME = 'Cordova'; +// suupported env export const PRODUCTION = 'Production'; export const STAGING = 'Staging'; +// flags export const IS_MANDATORY_YES = 1; export const IS_MANDATORY_NO = 0; export const IS_DISABLED_YES = 1; export const IS_DISABLED_NO = 0; -export const RELEAS_EMETHOD_PROMOTE = 'Promote'; -export const RELEAS_EMETHOD_UPLOAD = 'Upload'; - export const DEPLOYMENT_SUCCEEDED = 1; export const DEPLOYMENT_FAILED = 2; +export const RELEASE_METHOD_PROMOTE = 'Promote'; +export const RELEASE_METHOD_UPLOAD = 'Upload'; + export const DIFF_MANIFEST_FILE_NAME = 'hotcodepush.json'; export const CURRENT_DB_VERSION = '0.5.0'; diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts index 90695b80..b68bee69 100644 --- a/src/core/services/account-manager.ts +++ b/src/core/services/account-manager.ts @@ -1,22 +1,22 @@ -import _ from 'lodash'; -import validator from 'validator'; import { logger } from 'kv-logger'; +import _ from 'lodash'; import moment from 'moment'; +import validator from 'validator'; -import { Users } from '../../models/users'; -import { UserTokens } from '../../models/user_tokens'; import { findCollaboratorsByAppNameAndUid } from '../../models/collaborators'; -import { config } from '../config'; +import { UserTokens } from '../../models/user_tokens'; +import { Users } from '../../models/users'; import { AppError } from '../app-error'; +import { config } from '../config'; import { redisClient } from '../utils/connections'; -var security = require('../utils/security'); -var EmailManager = require('./email-manager'); +const security = require('../utils/security'); +const EmailManager = require('./email-manager'); -const LOGIN_LIMIT_PRE = 'LOGIN_LIMIT_PRE_'; -const REGISTER_CODE = 'REGISTER_CODE_'; -const EXPIRED = 1200; -const EXPIRED_SPEED = 10; +const loginLimitPre = 'LOGIN_LIMIT_PRE_'; +const registerCode = 'REGISTER_CODE_'; +const expired = 1200; +const expiredSpeed = 10; class AccountManager { collaboratorCan(uid: number, appName: string) { @@ -44,9 +44,9 @@ class AccountManager { } findUserByEmail(email: string) { - return Users.findOne({ where: { email: email } }).then((data) => { + return Users.findOne({ where: { email } }).then((data) => { if (_.isEmpty(data)) { - throw new AppError(email + ' does not exist.'); + throw new AppError(`${email} does not exist.`); } else { return data; } @@ -55,26 +55,28 @@ class AccountManager { getAllAccessKeyByUid(uid: number) { return UserTokens.findAll({ - where: { uid: uid }, + where: { uid }, order: [['id', 'DESC']], }).then((tokens) => { - return _.map(tokens, function (v) { + return _.map(tokens, (v) => { return { name: '(hidden)', - createdTime: parseInt(moment(v.created_at).format('x')), + createdTime: moment(v.created_at).unix(), createdBy: v.created_by, - expires: parseInt(moment(v.expires_at).format('x')), + expires: moment(v.expires_at).unix(), friendlyName: v.name, description: v.description, }; }); }); } + isExsitAccessKeyName(uid: number, friendlyName: string) { return UserTokens.findOne({ - where: { uid: uid, name: friendlyName }, + where: { uid, name: friendlyName }, }); } + createAccessKey( uid: number, newAccessKey: string, @@ -84,10 +86,10 @@ class AccountManager { description: string, ) { return UserTokens.create({ - uid: uid, + uid, name: friendlyName, tokens: newAccessKey, - description: description, + description, created_by: createdBy, expires_at: moment() .add(ttl / 1000, 'seconds') @@ -103,14 +105,14 @@ class AccountManager { if (_.isEmpty(password)) { return Promise.reject(new AppError('请您输入密码')); } - var where = {}; + let where = {}; if (validator.isEmail(account)) { where = { email: account }; } else { where = { username: account }; } const { tryLoginTimes } = config.common; - return Users.findOne({ where: where }) + return Users.findOne({ where }) .then((users) => { if (_.isEmpty(users)) { throw new AppError('您输入的邮箱或密码有误'); @@ -119,24 +121,23 @@ class AccountManager { }) .then((users) => { if (tryLoginTimes > 0) { - const loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; + const loginKey = `${loginLimitPre}${users.id}`; return redisClient.get(loginKey).then((loginErrorTimes) => { if (Number(loginErrorTimes) > tryLoginTimes) { throw new AppError(`您输入密码错误次数超过限制,帐户已经锁定`); } return users; }); - } else { - return users; } + return users; }) .then((users) => { if (!security.passwordVerifySync(password, users.password)) { if (tryLoginTimes > 0) { - const loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; + const loginKey = `${loginLimitPre}${users.id}`; redisClient.exists(loginKey).then((isExists) => { if (!isExists) { - var expires = moment().endOf('day').unix() - moment().unix(); + const expires = moment().endOf('day').unix() - moment().unix(); redisClient.setEx(loginKey, expires, '1'); return; } @@ -154,37 +155,37 @@ class AccountManager { if (_.isEmpty(email)) { return Promise.reject(new AppError('请您输入邮箱地址')); } - return Users.findOne({ where: { email: email } }) + return Users.findOne({ where: { email } }) .then((u) => { if (u) { throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); } }) .then(() => { - //将token临时存储到redis - var token = security.randToken(40); + // 将token临时存储到redis + const token = security.randToken(40); return redisClient - .setEx(`${REGISTER_CODE}${security.md5(email)}`, EXPIRED, token) + .setEx(`${registerCode}${security.md5(email)}`, expired, token) .then(() => { return token; }); }) .then((token) => { - //将token发送到用户邮箱 - var emailManager = new EmailManager(); + // 将token发送到用户邮箱 + const emailManager = new EmailManager(); return emailManager.sendRegisterCode(email, token); }); } checkRegisterCode(email: string, token: string) { - return Users.findOne({ where: { email: email } }) + return Users.findOne({ where: { email } }) .then((u) => { if (u) { throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); } }) .then(() => { - var registerKey = `${REGISTER_CODE}${security.md5(email)}`; + const registerKey = `${registerCode}${security.md5(email)}`; return redisClient.get(registerKey).then((storageToken) => { if (_.isEmpty(storageToken)) { throw new AppError(`验证码已经失效,请您重新获取`); @@ -192,7 +193,7 @@ class AccountManager { if (!_.eq(token, storageToken)) { redisClient.ttl(registerKey).then((ttl) => { if (ttl > 0) { - redisClient.expire(registerKey, ttl - EXPIRED_SPEED); + redisClient.expire(registerKey, ttl - expiredSpeed); } }); throw new AppError(`您输入的验证码不正确,请重新输入`); @@ -203,18 +204,18 @@ class AccountManager { } register(email: string, password: string) { - return Users.findOne({ where: { email: email } }) + return Users.findOne({ where: { email } }) .then((u) => { if (u) { throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); } }) .then(() => { - var identical = security.randToken(9); + const identical = security.randToken(9); return Users.create({ - email: email, + email, password: security.passwordHashSync(password), - identical: identical, + identical, }); }); } @@ -231,7 +232,7 @@ class AccountManager { return u; }) .then((u) => { - var isEq = security.passwordVerifySync(oldPassword, u.get('password')); + const isEq = security.passwordVerifySync(oldPassword, u.get('password')); if (!isEq) { throw new AppError(`您输入的旧密码不正确,请重新输入`); } diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index 41912b1c..2b9d4357 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -1,36 +1,35 @@ -import _ from 'lodash'; import { logger } from 'kv-logger'; +import _ from 'lodash'; import { Op } from 'sequelize'; import { Deployments } from '../../models/deployments'; import { DeploymentsVersions } from '../../models/deployments_versions'; +import { LogReportDeploy } from '../../models/log_report_deploy'; +import { LogReportDownload } from '../../models/log_report_download'; import { Packages } from '../../models/packages'; import { PackagesDiff } from '../../models/packages_diff'; import { PackagesMetrics } from '../../models/packages_metrics'; -import { LogReportDeploy } from '../../models/log_report_deploy'; -import { LogReportDownload } from '../../models/log_report_download'; -import { config } from '../config'; import { AppError } from '../app-error'; -import { redisClient } from '../utils/connections'; - +import { config } from '../config'; import { DEPLOYMENT_FAILED, DEPLOYMENT_SUCCEEDED } from '../const'; +import { redisClient } from '../utils/connections'; -var common = require('../utils/common'); +const common = require('../utils/common'); -const UPDATE_CHECK = 'UPDATE_CHECK'; -const CHOSEN_MAN = 'CHOSEN_MAN'; +const updateCheck = 'UPDATE_CHECK'; +const chosenMan = 'CHOSEN_MAN'; const EXPIRED = 600; class ClientManager { getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash) { - return [UPDATE_CHECK, deploymentKey, appVersion, label, packageHash].join(':'); + return [updateCheck, deploymentKey, appVersion, label, packageHash].join(':'); } clearUpdateCheckCache(deploymentKey, appVersion, label, packageHash) { logger.debug('clear cache Deployments key:', { key: deploymentKey, }); - let redisCacheKey = this.getUpdateCheckCacheKey( + const redisCacheKey = this.getUpdateCheckCacheKey( deploymentKey, appVersion, label, @@ -49,12 +48,11 @@ class ClientManager { } updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) { - const self = this; - var updateCheckCache = _.get(config, 'common.updateCheckCache', false); + const updateCheckCache = _.get(config, 'common.updateCheckCache', false); if (updateCheckCache === false) { - return self.updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId); + return this.updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId); } - let redisCacheKey = self.getUpdateCheckCacheKey( + const redisCacheKey = this.getUpdateCheckCacheKey( deploymentKey, appVersion, label, @@ -64,66 +62,76 @@ class ClientManager { if (data) { try { logger.debug('updateCheckFromCache read from catch'); - var obj = JSON.parse(data); + const obj = JSON.parse(data); return obj; - } catch (e) {} + } catch (e) { + // do nothing + } } - return self - .updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId) - .then((rs) => { - try { - logger.debug('updateCheckFromCache read from db'); - var strRs = JSON.stringify(rs); - redisClient.setEx(redisCacheKey, EXPIRED, strRs); - } catch (e) {} - return rs; - }); + return this.updateCheck( + deploymentKey, + appVersion, + label, + packageHash, + clientUniqueId, + ).then((rs) => { + try { + logger.debug('updateCheckFromCache read from db'); + const strRs = JSON.stringify(rs); + redisClient.setEx(redisCacheKey, EXPIRED, strRs); + } catch (e) { + // do nothing + } + return rs; + }); }); } getChosenManCacheKey(packageId, rollout, clientUniqueId) { - return [CHOSEN_MAN, packageId, rollout, clientUniqueId].join(':'); + return [chosenMan, packageId, rollout, clientUniqueId].join(':'); } random(rollout) { - var r = Math.ceil(Math.random() * 10000); + const r = Math.ceil(Math.random() * 10000); if (r < rollout * 100) { return Promise.resolve(true); - } else { - return Promise.resolve(false); } + return Promise.resolve(false); } chosenMan(packageId, rollout, clientUniqueId: string) { - var self = this; if (rollout >= 100) { return Promise.resolve(true); } - var rolloutClientUniqueIdCache = _.get(config, 'common.rolloutClientUniqueIdCache', false); + const rolloutClientUniqueIdCache = _.get( + config, + 'common.rolloutClientUniqueIdCache', + false, + ); if (rolloutClientUniqueIdCache === false) { - return self.random(rollout); - } else { - var redisCacheKey = self.getChosenManCacheKey(packageId, rollout, clientUniqueId); - return redisClient.get(redisCacheKey).then((data) => { - if (data == '1') { - return true; - } else if (data == '2') { - return false; - } else { - return self.random(rollout).then((r) => { - return redisClient - .setEx(redisCacheKey, 60 * 60 * 24 * 7, r ? '1' : '2') - .then(() => { - return r; - }); + return this.random(rollout); + } + const redisCacheKey = this.getChosenManCacheKey(packageId, rollout, clientUniqueId); + return redisClient.get(redisCacheKey).then((data) => { + if (data === '1') { + return true; + } + if (data === '2') { + return false; + } + return this.random(rollout).then((r) => { + return redisClient + .setEx(redisCacheKey, 60 * 60 * 24 * 7, r ? '1' : '2') + .then(() => { + return r; }); - } }); - } + }); } + // eslint-disable-next-line max-lines-per-function, @typescript-eslint/no-unused-vars updateCheck(deploymentKey: string, appVersion, label, packageHash, clientUniqueId: string) { - var rs = { + const rs = { packageId: 0, downloadURL: '', downloadUrl: '', @@ -131,7 +139,7 @@ class ClientManager { isAvailable: false, isDisabled: true, isMandatory: false, - appVersion: appVersion, + appVersion, targetBinaryRange: '', packageHash: '', label: '', @@ -140,7 +148,6 @@ class ClientManager { shouldRunBinaryVersion: false, rollout: 100, }; - var self = this; if (_.isEmpty(deploymentKey) || _.isEmpty(appVersion)) { return Promise.reject(new AppError('please input deploymentKey and appVersion')); } @@ -149,7 +156,7 @@ class ClientManager { if (_.isEmpty(dep)) { throw new AppError('Not found deployment, check deployment key is right.'); } - var version = common.parseVersion(appVersion); + const version = common.parseVersion(appVersion); return DeploymentsVersions.findAll({ where: { deployment_id: dep.id, @@ -157,17 +164,15 @@ class ClientManager { max_version: { [Op.gt]: version }, }, }).then((deploymentsVersionsMore) => { - var distance = 0; - var item = null; - _.map(deploymentsVersionsMore, function (value, index) { - if (index == 0) { + let distance = 0; + let item = null; + _.map(deploymentsVersionsMore, (value, index) => { + if (index === 0) { item = value; distance = value.max_version - value.min_version; - } else { - if (distance > value.max_version - value.min_version) { - distance = value.max_version - value.min_version; - item = value; - } + } else if (distance > value.max_version - value.min_version) { + distance = value.max_version - value.min_version; + item = value; } }); logger.debug({ @@ -177,9 +182,9 @@ class ClientManager { }); }) .then((deploymentsVersions) => { - var packageId = _.get(deploymentsVersions, 'current_package_id', 0); + const packageId = _.get(deploymentsVersions, 'current_package_id', 0); if (_.eq(packageId, 0)) { - return; + return undefined; } return Packages.findByPk(packageId) .then((packages) => { @@ -190,13 +195,12 @@ class ClientManager { ) { rs.packageId = packageId; rs.targetBinaryRange = deploymentsVersions.app_version; - rs.downloadUrl = rs.downloadURL = common.getBlobDownloadUrl( - _.get(packages, 'blob_url'), - ); + rs.downloadURL = common.getBlobDownloadUrl(_.get(packages, 'blob_url')); + rs.downloadUrl = rs.downloadURL; rs.description = _.get(packages, 'description', ''); - rs.isAvailable = _.eq(packages.is_disabled, 1) ? false : true; - rs.isDisabled = _.eq(packages.is_disabled, 1) ? true : false; - rs.isMandatory = _.eq(packages.is_mandatory, 1) ? true : false; + rs.isAvailable = !_.eq(packages.is_disabled, 1); + rs.isDisabled = !!_.eq(packages.is_disabled, 1); + rs.isMandatory = !!_.eq(packages.is_mandatory, 1); rs.appVersion = appVersion; rs.packageHash = _.get(packages, 'package_hash', ''); rs.label = _.get(packages, 'label', ''); @@ -227,11 +231,9 @@ class ClientManager { ); rs.packageSize = _.get(diffPackage, 'diff_size', 0); } - return; }); - } else { - return; } + return undefined; }); }) .then(() => { @@ -248,7 +250,7 @@ class ClientManager { if (_.isEmpty(dep)) { throw new AppError('does not found deployment'); } - return Packages.findOne({ where: { deployment_id: dep.id, label: label } }); + return Packages.findOne({ where: { deployment_id: dep.id, label } }); }) .then((packages) => { if (_.isEmpty(packages)) { @@ -265,7 +267,7 @@ class ClientManager { if (metrics) { return metrics.increment('downloaded'); } - return; + return undefined; }), LogReportDownload.create({ package_id: packages.id, @@ -277,51 +279,50 @@ class ClientManager { reportStatusDeploy(deploymentKey: string, label, clientUniqueId: string, others) { return this.getPackagesInfo(deploymentKey, label).then((packages) => { - var statusText = _.get(others, 'status'); - var status = 0; + const statusText = _.get(others, 'status'); + let status = 0; if (_.eq(statusText, 'DeploymentSucceeded')) { status = DEPLOYMENT_SUCCEEDED; } else if (_.eq(statusText, 'DeploymentFailed')) { status = DEPLOYMENT_FAILED; } - var packageId = packages.id; - var previous_deployment_key = _.get(others, 'previousDeploymentKey'); - var previous_label = _.get(others, 'previousLabelOrAppVersion'); + const packageId = packages.id; + const previousDeploymentKey = _.get(others, 'previousDeploymentKey'); + const previousLabel = _.get(others, 'previousLabelOrAppVersion'); if (status > 0) { return Promise.all([ LogReportDeploy.create({ package_id: packageId, client_unique_id: clientUniqueId, - previous_label: previous_label, - previous_deployment_key: previous_deployment_key, - status: status, + previous_label: previousLabel, + previous_deployment_key: previousDeploymentKey, + status, }), PackagesMetrics.findOne({ where: { package_id: packageId } }).then( (metrics) => { if (_.isEmpty(metrics)) { - return; + return undefined; } if (_.eq(status, DEPLOYMENT_SUCCEEDED)) { return metrics.increment(['installed', 'active'], { by: 1 }); - } else { - return metrics.increment(['installed', 'failed'], { by: 1 }); } + return metrics.increment(['installed', 'failed'], { by: 1 }); }, ), ]).then(() => { - if (previous_deployment_key && previous_label) { + if (previousDeploymentKey && previousLabel) { return Deployments.findOne({ - where: { deployment_key: previous_deployment_key }, + where: { deployment_key: previousDeploymentKey }, }) .then((dep) => { if (_.isEmpty(dep)) { - return; + return undefined; } return Packages.findOne({ - where: { deployment_id: dep.id, label: previous_label }, + where: { deployment_id: dep.id, label: previousLabel }, }).then((p) => { if (_.isEmpty(p)) { - return; + return undefined; } return PackagesMetrics.findOne({ where: { package_id: p.id }, @@ -332,14 +333,13 @@ class ClientManager { if (metrics) { return metrics.decrement('active'); } - return; + return undefined; }); } - return; + return undefined; }); - } else { - return; } + return undefined; }); } } diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index 04f0a432..2dc50e35 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -1,21 +1,21 @@ -import { Op } from 'sequelize'; -import _ from 'lodash'; -import formidable from 'formidable'; +/* eslint-disable max-lines */ import fs from 'fs'; -import slash from 'slash'; import os from 'os'; import path from 'path'; +import formidable from 'formidable'; import { logger } from 'kv-logger'; +import _ from 'lodash'; +import { Op } from 'sequelize'; +import slash from 'slash'; import yazl from 'yazl'; import { Apps } from '../../models/apps'; import { Deployments, generateDeploymentsLabelId } from '../../models/deployments'; -import { DeploymentsVersions } from '../../models/deployments_versions'; import { DeploymentsHistory } from '../../models/deployments_history'; +import { DeploymentsVersions } from '../../models/deployments_versions'; import { Packages, PackagesInterface } from '../../models/packages'; import { PackagesDiff } from '../../models/packages_diff'; import { PackagesMetrics } from '../../models/packages_metrics'; -import { sequelize } from '../utils/connections'; import { AppError } from '../app-error'; import { DIFF_MANIFEST_FILE_NAME, @@ -23,38 +23,39 @@ import { IS_DISABLED_YES, IS_MANDATORY_NO, IS_MANDATORY_YES, - RELEAS_EMETHOD_PROMOTE, - RELEAS_EMETHOD_UPLOAD, + RELEASE_METHOD_PROMOTE, + RELEASE_METHOD_UPLOAD, } from '../const'; +import { sequelize } from '../utils/connections'; -var dataCenterManager = require('./datacenter-manager')(); -var security = require('../utils/security'); -var common = require('../utils/common'); +const common = require('../utils/common'); +const security = require('../utils/security'); +const dataCenterManager = require('./datacenter-manager')(); class PackageManager { - getMetricsbyPackageId = function (packageId) { + getMetricsbyPackageId(packageId) { return PackagesMetrics.findOne({ where: { package_id: packageId } }); - }; + } - findPackageInfoByDeploymentIdAndLabel = function (deploymentId, label) { - return Packages.findOne({ where: { deployment_id: deploymentId, label: label } }); - }; + findPackageInfoByDeploymentIdAndLabel(deploymentId, label) { + return Packages.findOne({ where: { deployment_id: deploymentId, label } }); + } - findLatestPackageInfoByDeployVersion = function (deploymentsVersionsId) { + findLatestPackageInfoByDeployVersion(deploymentsVersionsId) { return DeploymentsVersions.findByPk(deploymentsVersionsId).then((deploymentsVersions) => { if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { - var e = new AppError('not found last packages'); + const e = new AppError('not found last packages'); logger.debug(e); throw e; } return Packages.findByPk(deploymentsVersions.current_package_id); }); - }; + } parseReqFile(req) { logger.debug('parseReqFile'); return new Promise((resolve, reject) => { - var form = formidable(); + const form = formidable(); form.parse(req, (err, fields, files) => { if (err) { logger.debug('parseReqFile:', err); @@ -108,73 +109,66 @@ class PackageManager { logger.debug(`isMatchPackageHash data:`, data.get()); logger.debug(`isMatchPackageHash packageHash exist`); return true; - } else { - logger.debug(`isMatchPackageHash package is null`); - return false; } + logger.debug(`isMatchPackageHash package is null`); + return false; }); } createPackage(deploymentId, appVersion, packageHash, manifestHash, blobHash, params) { - var releaseMethod = params.releaseMethod || RELEAS_EMETHOD_UPLOAD; - var releaseUid = params.releaseUid || 0; - var isMandatory = params.isMandatory || 0; - var size = params.size || 0; - var rollout = params.rollout || 100; - var description = params.description || ''; - var originalLabel = params.originalLabel || ''; - var isDisabled = params.isDisabled || 0; - var originalDeployment = params.originalDeployment || ''; - var self = this; + const releaseMethod = params.releaseMethod || RELEASE_METHOD_UPLOAD; + const releaseUid = params.releaseUid || 0; + const isMandatory = params.isMandatory || 0; + const size = params.size || 0; + const rollout = params.rollout || 100; + const description = params.description || ''; + const originalLabel = params.originalLabel || ''; + const isDisabled = params.isDisabled || 0; + const originalDeployment = params.originalDeployment || ''; return generateDeploymentsLabelId(deploymentId).then((labelId) => { return sequelize.transaction((t) => { - return self - .createDeploymentsVersionIfNotExist( - deploymentId, - appVersion, - params.min_version, - params.max_version, - t, - ) - .then((deploymentsVersions) => { - return Packages.create( - { - deployment_version_id: deploymentsVersions.id, - deployment_id: deploymentId, - description: description, - package_hash: packageHash, - blob_url: blobHash, - size: size, - manifest_blob_url: manifestHash, - release_method: releaseMethod, - label: 'v' + labelId, - released_by: releaseUid, - is_mandatory: isMandatory, - is_disabled: isDisabled, - rollout: rollout, - original_label: originalLabel, - original_deployment: originalDeployment, - }, - { transaction: t }, - ).then((packages) => { - deploymentsVersions.set('current_package_id', packages.id); - return Promise.all([ - deploymentsVersions.save({ transaction: t }), - Deployments.update( - { last_deployment_version_id: deploymentsVersions.id }, - { where: { id: deploymentId }, transaction: t }, - ), - PackagesMetrics.create( - { package_id: packages.id }, - { transaction: t }, - ), - DeploymentsHistory.create( - { deployment_id: deploymentId, package_id: packages.id }, - { transaction: t }, - ), - ]).then(() => packages); - }); + return this.createDeploymentsVersionIfNotExist( + deploymentId, + appVersion, + params.min_version, + params.max_version, + t, + ).then((deploymentsVersions) => { + return Packages.create( + { + deployment_version_id: deploymentsVersions.id, + deployment_id: deploymentId, + description, + package_hash: packageHash, + blob_url: blobHash, + size, + manifest_blob_url: manifestHash, + release_method: releaseMethod, + label: `v${labelId}`, + released_by: releaseUid, + is_mandatory: isMandatory, + is_disabled: isDisabled, + rollout, + original_label: originalLabel, + original_deployment: originalDeployment, + }, + { transaction: t }, + ).then((packages) => { + deploymentsVersions.set('current_package_id', packages.id); + return Promise.all([ + deploymentsVersions.save({ transaction: t }), + Deployments.update( + { last_deployment_version_id: deploymentsVersions.id }, + { where: { id: deploymentId }, transaction: t }, + ), + PackagesMetrics.create({ package_id: packages.id }, { transaction: t }), + DeploymentsHistory.create( + { deployment_id: deploymentId, package_id: packages.id }, + { transaction: t }, + ), + ]).then(() => packages); }); + }); }); }); } @@ -183,28 +177,27 @@ class PackageManager { return dataCenterManager.validateStore(packageHash).then((isValidate) => { if (isValidate) { return dataCenterManager.getPackageInfo(packageHash); - } else { - var downloadURL = common.getBlobDownloadUrl(blobHash); - return common - .createFileFromRequest(downloadURL, path.join(workDirectoryPath, blobHash)) - .then((download) => { - return common - .unzipFile( - path.join(workDirectoryPath, blobHash), - path.join(workDirectoryPath, 'current'), - ) - .then((outputPath) => { - return dataCenterManager.storePackage(outputPath, true); - }); - }); } + const downloadURL = common.getBlobDownloadUrl(blobHash); + return common + .createFileFromRequest(downloadURL, path.join(workDirectoryPath, blobHash)) + .then(() => { + return common + .unzipFile( + path.join(workDirectoryPath, blobHash), + path.join(workDirectoryPath, 'current'), + ) + .then((outputPath) => { + return dataCenterManager.storePackage(outputPath, true); + }); + }); }); } zipDiffPackage(fileName, files, baseDirectoryPath, hotCodePushFile) { return new Promise<{ isTemporary: boolean; path: string }>((resolve, reject) => { - var zipFile = new yazl.ZipFile(); - var writeStream = fs.createWriteStream(fileName); + const zipFile = new yazl.ZipFile(); + const writeStream = fs.createWriteStream(fileName); writeStream.on('error', (error) => { reject(error); }); @@ -216,8 +209,8 @@ class PackageManager { .on('close', () => { resolve({ isTemporary: true, path: fileName }); }); - for (var i = 0; i < files.length; ++i) { - var file = files[i]; + for (let i = 0; i < files.length; i += 1) { + const file = files[i]; zipFile.addFile(path.join(baseDirectoryPath, file), slash(file)); } zipFile.addFile(hotCodePushFile, DIFF_MANIFEST_FILE_NAME); @@ -233,7 +226,6 @@ class PackageManager { diffPackageHash, diffManifestBlobHash, ) { - var self = this; return PackagesDiff.findOne({ where: { package_id: packageId, @@ -241,60 +233,62 @@ class PackageManager { }, }).then((diffPackage) => { if (!_.isEmpty(diffPackage)) { - return; + return undefined; } logger.debug('generateOneDiffPackage', { packageId, originDataCenter, oldPackageDataCenter, }); - var downloadURL = common.getBlobDownloadUrl(diffManifestBlobHash); + const downloadURL = common.getBlobDownloadUrl(diffManifestBlobHash); return common .createFileFromRequest( downloadURL, path.join(workDirectoryPath, diffManifestBlobHash), ) .then(() => { - var dataCenterContentPath = path.join(workDirectoryPath, 'dataCenter'); + const dataCenterContentPath = path.join(workDirectoryPath, 'dataCenter'); common.copySync(originDataCenter.contentPath, dataCenterContentPath); - var oldPackageDataCenterContentPath = oldPackageDataCenter.contentPath; - var originManifestJson = JSON.parse( + // const oldPackageDataCenterContentPath = oldPackageDataCenter.contentPath; + const originManifestJson = JSON.parse( fs.readFileSync(originDataCenter.manifestFilePath, 'utf8'), ); - var diffManifestJson = JSON.parse( + const diffManifestJson = JSON.parse( fs.readFileSync(path.join(workDirectoryPath, diffManifestBlobHash), 'utf8'), ); - var json = common.diffCollectionsSync(originManifestJson, diffManifestJson); - var files = _.concat(json.diff, json.collection1Only); - var hotcodepush = { deletedFiles: json.collection2Only, patchedFiles: [] }; - var hotCodePushFile = path.join( + const json = common.diffCollectionsSync(originManifestJson, diffManifestJson); + const files = _.concat(json.diff, json.collection1Only); + const hotcodepush = { deletedFiles: json.collection2Only, patchedFiles: [] }; + const hotCodePushFile = path.join( workDirectoryPath, `${diffManifestBlobHash}_hotcodepush`, ); fs.writeFileSync(hotCodePushFile, JSON.stringify(hotcodepush)); - var fileName = path.join(workDirectoryPath, `${diffManifestBlobHash}.zip`); - return self - .zipDiffPackage(fileName, files, dataCenterContentPath, hotCodePushFile) - .then((data) => { - return security.qetag(data.path).then((diffHash) => { - return common.uploadFileToStorage(diffHash, fileName).then(() => { - var stats = fs.statSync(fileName); - return PackagesDiff.create({ - package_id: packageId, - diff_against_package_hash: diffPackageHash, - diff_blob_url: diffHash, - diff_size: stats.size, - }); + const fileName = path.join(workDirectoryPath, `${diffManifestBlobHash}.zip`); + return this.zipDiffPackage( + fileName, + files, + dataCenterContentPath, + hotCodePushFile, + ).then((data) => { + return security.qetag(data.path).then((diffHash) => { + return common.uploadFileToStorage(diffHash, fileName).then(() => { + const stats = fs.statSync(fileName); + return PackagesDiff.create({ + package_id: packageId, + diff_against_package_hash: diffPackageHash, + diff_blob_url: diffHash, + diff_size: stats.size, }); }); }); + }); }); }); } createDiffPackagesByLastNums(appId, originalPackage, num) { - var self = this; - var packageId = originalPackage.id; + const packageId = originalPackage.id; return Promise.all([ Packages.findAll({ where: { @@ -312,16 +306,12 @@ class PackageManager { order: [['id', 'asc']], limit: 2, }), - Apps.findByPk(appId), ]) - .then(([lastNumsPackages, basePackages, appInfo]) => { - return [ - _.uniqBy(_.unionBy(lastNumsPackages, basePackages, 'id'), 'package_hash'), - appInfo, - ]; + .then(([lastNumsPackages, basePackages]) => { + return _.uniqBy(_.unionBy(lastNumsPackages, basePackages, 'id'), 'package_hash'); }) - .then(([lastNumsPackages, appInfo]) => { - return self.createDiffPackages(originalPackage, lastNumsPackages); + .then((lastNumsPackages) => { + return this.createDiffPackages(originalPackage, lastNumsPackages); }); } @@ -332,60 +322,57 @@ class PackageManager { if (destPackages.length <= 0) { return null; } - var self = this; - var package_hash = _.get(originalPackage, 'package_hash'); - var manifest_blob_url = _.get(originalPackage, 'manifest_blob_url'); - var blob_url = _.get(originalPackage, 'blob_url'); - var workDirectoryPath = path.join(os.tmpdir(), 'codepush_' + security.randToken(32)); + const packageHash = _.get(originalPackage, 'package_hash'); + // const manifest_blob_url = _.get(originalPackage, 'manifest_blob_url'); + const blobUrl = _.get(originalPackage, 'blob_url'); + const workDirectoryPath = path.join(os.tmpdir(), `codepush_${security.randToken(32)}`); logger.debug('createDiffPackages using dir', { workDirectoryPath }); return common .createEmptyFolder(workDirectoryPath) - .then(() => self.downloadPackageAndExtract(workDirectoryPath, package_hash, blob_url)) + .then(() => this.downloadPackageAndExtract(workDirectoryPath, packageHash, blobUrl)) .then((originDataCenter) => Promise.all( destPackages.map((v) => { - var diffWorkDirectoryPath = path.join( + const diffWorkDirectoryPath = path.join( workDirectoryPath, _.get(v, 'package_hash'), ); common.createEmptyFolderSync(diffWorkDirectoryPath); - return self - .downloadPackageAndExtract( + return this.downloadPackageAndExtract( + diffWorkDirectoryPath, + _.get(v, 'package_hash'), + _.get(v, 'blob_url'), + ).then((oldPackageDataCenter) => + this.generateOneDiffPackage( diffWorkDirectoryPath, - _.get(v, 'package_hash'), - _.get(v, 'blob_url'), - ) - .then((oldPackageDataCenter) => - self.generateOneDiffPackage( - diffWorkDirectoryPath, - originalPackage.id, - originDataCenter, - oldPackageDataCenter, - v.package_hash, - v.manifest_blob_url, - ), - ); + originalPackage.id, + originDataCenter, + oldPackageDataCenter, + v.package_hash, + v.manifest_blob_url, + ), + ); }), ), ) .finally(() => common.deleteFolderSync(workDirectoryPath)); } + // eslint-disable-next-line max-lines-per-function releasePackage(appId, deploymentId, packageInfo, filePath, releaseUid) { - var self = this; - var appVersion = packageInfo.appVersion; - var versionInfo = common.validatorVersion(appVersion); + const { appVersion } = packageInfo; + const versionInfo = common.validatorVersion(appVersion); if (!versionInfo[0]) { logger.debug(`releasePackage targetBinaryVersion ${appVersion} not support.`); return Promise.reject(new AppError(`targetBinaryVersion ${appVersion} not support.`)); } - var description = packageInfo.description; //描述 - var isDisabled = packageInfo.isDisabled; //是否立刻下载 - var rollout = packageInfo.rollout; //灰度百分比 - var isMandatory = packageInfo.isMandatory; //是否强制更新,无法跳过 - var tmpDir = os.tmpdir(); - var directoryPathParent = path.join(tmpDir, 'codepuh_' + security.randToken(32)); - var directoryPath = path.join(directoryPathParent, 'current'); + const { description } = packageInfo; // 描述 + const { isDisabled } = packageInfo; // 是否立刻下载 + const { rollout } = packageInfo; // 灰度百分比 + const { isMandatory } = packageInfo; // 是否强制更新,无法跳过 + const tmpDir = os.tmpdir(); + const directoryPathParent = path.join(tmpDir, `codepuh_${security.randToken(32)}`); + const directoryPath = path.join(directoryPathParent, 'current'); logger.debug(`releasePackage generate an random dir path: ${directoryPath}`); return Promise.all([ security.qetag(filePath), @@ -396,12 +383,12 @@ class PackageManager { .then(([blobHash]) => { return security.uploadPackageType(directoryPath).then((type) => { return Apps.findByPk(appId).then((appInfo) => { - if (type > 0 && appInfo.os > 0 && appInfo.os != type) { - var e = new AppError('it must be publish it by ios type'); + if (type > 0 && appInfo.os > 0 && appInfo.os !== type) { + const e = new AppError('it must be publish it by ios type'); logger.debug(e); throw e; } else { - //不验证 + // 不验证 logger.debug(`Unknown package type:`, { type, os: appInfo.os, @@ -412,10 +399,9 @@ class PackageManager { }); }) .then((blobHash) => { - var dataCenterManager = require('./datacenter-manager')(); return dataCenterManager.storePackage(directoryPath).then((dataCenter) => { - var packageHash = dataCenter.packageHash; - var manifestFile = dataCenter.manifestFilePath; + const { packageHash } = dataCenter; + const manifestFile = dataCenter.manifestFilePath; return DeploymentsVersions.findOne({ where: { deployment_id: deploymentId, app_version: appVersion }, }) @@ -423,14 +409,14 @@ class PackageManager { if (!deploymentsVersions) { return false; } - return self.isMatchPackageHash( + return this.isMatchPackageHash( deploymentsVersions.get('current_package_id'), packageHash, ); }) .then((isExist) => { if (isExist) { - var e = new AppError( + const e = new AppError( "The uploaded package is identical to the contents of the specified deployment's current release.", ); logger.debug(e.message); @@ -447,19 +433,19 @@ class PackageManager { }); }) .then(([packageHash, manifestHash, blobHash]) => { - var stats = fs.statSync(filePath); - var params = { - releaseMethod: RELEAS_EMETHOD_UPLOAD, - releaseUid: releaseUid, + const stats = fs.statSync(filePath); + const params = { + releaseMethod: RELEASE_METHOD_UPLOAD, + releaseUid, isMandatory: isMandatory ? IS_MANDATORY_YES : IS_MANDATORY_NO, isDisabled: isDisabled ? IS_DISABLED_YES : IS_DISABLED_NO, - rollout: rollout, + rollout, size: stats.size, - description: description, + description, min_version: versionInfo[1], max_version: versionInfo[2], }; - return self.createPackage( + return this.createPackage( deploymentId, appVersion, packageHash, @@ -472,18 +458,18 @@ class PackageManager { } modifyReleasePackage(packageId, params) { - var appVersion = _.get(params, 'appVersion'); - var description = _.get(params, 'description'); - var isMandatory = _.get(params, 'isMandatory'); - var isDisabled = _.get(params, 'isDisabled'); - var rollout = _.get(params, 'rollout'); + const appVersion = _.get(params, 'appVersion'); + const description = _.get(params, 'description'); + const isMandatory = _.get(params, 'isMandatory'); + const isDisabled = _.get(params, 'isDisabled'); + const rollout = _.get(params, 'rollout'); return Packages.findByPk(packageId) .then((packageInfo) => { if (!packageInfo) { throw new AppError(`packageInfo not found`); } if (!_.isNull(appVersion)) { - var versionInfo = common.validatorVersion(appVersion); + const versionInfo = common.validatorVersion(appVersion); if (!versionInfo[0]) { throw new AppError(`--targetBinaryVersion ${appVersion} not support.`); } @@ -519,30 +505,30 @@ class PackageManager { return packageInfo; }) .then((packageInfo) => { - var new_params = { + const newParams = { description: description || packageInfo.description, } as PackagesInterface; if (_.isInteger(rollout)) { - new_params.rollout = rollout; + newParams.rollout = rollout; } if (_.isBoolean(isMandatory)) { - new_params.is_mandatory = isMandatory ? IS_MANDATORY_YES : IS_MANDATORY_NO; + newParams.is_mandatory = isMandatory ? IS_MANDATORY_YES : IS_MANDATORY_NO; } if (_.isBoolean(isDisabled)) { - new_params.is_disabled = isDisabled ? IS_DISABLED_YES : IS_DISABLED_NO; + newParams.is_disabled = isDisabled ? IS_DISABLED_YES : IS_DISABLED_NO; } - return Packages.update(new_params, { where: { id: packageId } }); + return Packages.update(newParams, { where: { id: packageId } }); }); } + // eslint-disable-next-line max-lines-per-function promotePackage(sourceDeploymentInfo, destDeploymentInfo, params) { - var self = this; - var appVersion = _.get(params, 'appVersion', null); - var label = _.get(params, 'label', null); + const appVersion = _.get(params, 'appVersion', null); + const label = _.get(params, 'label', null); return new Promise((resolve, reject) => { if (label) { - return Packages.findOne({ - where: { deployment_id: sourceDeploymentInfo.id, label: label }, + Packages.findOne({ + where: { deployment_id: sourceDeploymentInfo.id, label }, }) .then((sourcePack) => { if (!sourcePack) { @@ -560,35 +546,36 @@ class PackageManager { .catch((e) => { reject(e); }); - } else { - var lastDeploymentVersionId = _.get( - sourceDeploymentInfo, - 'last_deployment_version_id', - 0, - ); - if (_.lte(lastDeploymentVersionId, 0)) { - throw new AppError(`does not exist last_deployment_version_id.`); - } - return DeploymentsVersions.findByPk(lastDeploymentVersionId) - .then((deploymentsVersions) => { - var sourcePackId = _.get(deploymentsVersions, 'current_package_id', 0); - if (_.lte(sourcePackId, 0)) { + return; + } + const lastDeploymentVersionId = _.get( + sourceDeploymentInfo, + 'last_deployment_version_id', + 0, + ); + if (_.lte(lastDeploymentVersionId, 0)) { + throw new AppError(`does not exist last_deployment_version_id.`); + } + + DeploymentsVersions.findByPk(lastDeploymentVersionId) + .then((deploymentsVersions) => { + const sourcePackId = _.get(deploymentsVersions, 'current_package_id', 0); + if (_.lte(sourcePackId, 0)) { + throw new AppError(`packageInfo not found.`); + } + return Packages.findByPk(sourcePackId).then((sourcePack) => { + if (!sourcePack) { throw new AppError(`packageInfo not found.`); } - return Packages.findByPk(sourcePackId).then((sourcePack) => { - if (!sourcePack) { - throw new AppError(`packageInfo not found.`); - } - resolve([sourcePack, deploymentsVersions]); - }); - }) - .catch((e) => { - reject(e); + resolve([sourcePack, deploymentsVersions]); }); - } + }) + .catch((e) => { + reject(e); + }); }) .then(([sourcePack, deploymentsVersions]) => { - var appFinalVersion = appVersion || deploymentsVersions.app_version; + const appFinalVersion = appVersion || deploymentsVersions.app_version; logger.debug('sourcePack', sourcePack); logger.debug('deploymentsVersions', deploymentsVersions); logger.debug('appFinalVersion', appFinalVersion); @@ -602,7 +589,7 @@ class PackageManager { if (!destDeploymentsVersions) { return false; } - return self.isMatchPackageHash( + return this.isMatchPackageHash( destDeploymentsVersions.get('current_package_id'), sourcePack.package_hash, ); @@ -613,17 +600,17 @@ class PackageManager { "The uploaded package is identical to the contents of the specified deployment's current release.", ); } - return [sourcePack, deploymentsVersions, appFinalVersion]; + return [sourcePack, appFinalVersion]; }); }) - .then(([sourcePack, deploymentsVersions, appFinalVersion]) => { - var versionInfo = common.validatorVersion(appFinalVersion); + .then(([sourcePack, appFinalVersion]) => { + const versionInfo = common.validatorVersion(appFinalVersion); if (!versionInfo[0]) { logger.debug(`targetBinaryVersion ${appVersion} not support.`); throw new AppError(`targetBinaryVersion ${appVersion} not support.`); } - var create_params = { - releaseMethod: RELEAS_EMETHOD_PROMOTE, + const createParams = { + releaseMethod: RELEASE_METHOD_PROMOTE, releaseUid: params.promoteUid || 0, rollout: params.rollout || 100, size: sourcePack.size, @@ -636,30 +623,29 @@ class PackageManager { isDisabled: 0, }; if (_.isBoolean(params.isMandatory)) { - create_params.isMandatory = params.isMandatory + createParams.isMandatory = params.isMandatory ? IS_MANDATORY_YES : IS_MANDATORY_NO; } else { - create_params.isMandatory = sourcePack.is_mandatory; + createParams.isMandatory = sourcePack.is_mandatory; } if (_.isBoolean(params.isDisabled)) { - create_params.isDisabled = params.isDisabled ? IS_DISABLED_YES : IS_DISABLED_NO; + createParams.isDisabled = params.isDisabled ? IS_DISABLED_YES : IS_DISABLED_NO; } else { - create_params.isDisabled = sourcePack.is_disabled; + createParams.isDisabled = sourcePack.is_disabled; } - return self.createPackage( + return this.createPackage( destDeploymentInfo.id, appFinalVersion, sourcePack.package_hash, sourcePack.manifest_blob_url, sourcePack.blob_url, - create_params, + createParams, ); }); } rollbackPackage(deploymentVersionId, targetLabel, rollbackUid) { - var self = this; return DeploymentsVersions.findByPk(deploymentVersionId).then((deploymentsVersions) => { if (!deploymentsVersions) { throw new AppError('您之前还没有发布过版本'); @@ -676,19 +662,18 @@ class PackageManager { }).then((rollbackPackageInfos) => { return [currentPackageInfo, rollbackPackageInfos]; }); - } else { - return self - .getCanRollbackPackages(deploymentVersionId) - .then((rollbackPackageInfos) => { - return [currentPackageInfo, rollbackPackageInfos]; - }); } + return this.getCanRollbackPackages(deploymentVersionId).then( + (rollbackPackageInfos) => { + return [currentPackageInfo, rollbackPackageInfos]; + }, + ); }) .then(([currentPackageInfo, rollbackPackageInfos]) => { if (currentPackageInfo && rollbackPackageInfos.length > 0) { - for (var i = rollbackPackageInfos.length - 1; i >= 0; i--) { + for (let i = rollbackPackageInfos.length - 1; i >= 0; i -= 1) { if ( - rollbackPackageInfos[i].package_hash != + rollbackPackageInfos[i].package_hash !== currentPackageInfo.package_hash ) { return rollbackPackageInfos[i]; @@ -698,7 +683,7 @@ class PackageManager { throw new AppError('没有可供回滚的版本'); }) .then((rollbackPackage) => { - var params = { + const params = { releaseMethod: 'Rollback', releaseUid: rollbackUid, isMandatory: rollbackPackage.is_mandatory, @@ -711,7 +696,7 @@ class PackageManager { min_version: deploymentsVersions.min_version, max_version: deploymentsVersions.max_version, }; - return self.createPackage( + return this.createPackage( deploymentsVersions.deployment_id, deploymentsVersions.app_version, rollbackPackage.package_hash, @@ -728,7 +713,7 @@ class PackageManager { where: { deployment_version_id: deploymentVersionId, release_method: { - [Op.in]: [RELEAS_EMETHOD_UPLOAD, RELEAS_EMETHOD_PROMOTE], + [Op.in]: [RELEASE_METHOD_UPLOAD, RELEASE_METHOD_PROMOTE], }, }, order: [['id', 'desc']], diff --git a/src/core/utils/connections.ts b/src/core/utils/connections.ts index 14d5bce6..804f1f73 100644 --- a/src/core/utils/connections.ts +++ b/src/core/utils/connections.ts @@ -1,5 +1,5 @@ -import { Sequelize } from 'sequelize'; import { createClient } from 'redis'; +import { Sequelize } from 'sequelize'; import { config } from '../config'; export const sequelize = new Sequelize( diff --git a/src/db.ts b/src/db.ts index b49ee612..6c7aac9a 100755 --- a/src/db.ts +++ b/src/db.ts @@ -1,4 +1,5 @@ #!/usr/bin/env node +/* eslint-disable no-console */ /** * Module dependencies. @@ -10,7 +11,7 @@ import mysql from 'mysql2'; import yargs from 'yargs'; import { CURRENT_DB_VERSION } from './core/const'; -var argv = yargs +const argv = yargs .usage('Usage: $0 [options]') .command('init', '初始化数据库', { dbpassword: { @@ -42,16 +43,16 @@ var argv = yargs .alias('h', 'help') .parseSync(); -var command = argv._[0]; -var dbname = argv.dbname ? argv.dbname : 'codepush'; -var dbhost = argv.dbhost ? argv.dbhost : 'localhost'; -var dbuser = argv.dbuser ? argv.dbuser : 'root'; -var dbport = argv.dbport ? argv.dbport : 3306; -var dbpassword = argv.dbpassword; +const command = argv._[0]; +const dbname = argv.dbname ? argv.dbname : 'codepush'; +const dbhost = argv.dbhost ? argv.dbhost : 'localhost'; +const dbuser = argv.dbuser ? argv.dbuser : 'root'; +const dbport = argv.dbport ? argv.dbport : 3306; +const { dbpassword } = argv; if (command === 'init') { - var connection2; - var connection = mysql + let connection2; + const connection = mysql .createConnection({ host: dbhost, user: dbuser, @@ -59,13 +60,13 @@ if (command === 'init') { port: dbport, }) .promise(); - var createDatabaseSql = argv.force + const createDatabaseSql = argv.force ? `CREATE DATABASE IF NOT EXISTS ${dbname}` : `CREATE DATABASE ${dbname}`; connection.connect(); connection .query(createDatabaseSql) - .then(function () { + .then(() => { connection2 = mysql .createConnection({ host: dbhost, @@ -79,23 +80,27 @@ if (command === 'init') { connection2.connect(); return connection2; }) - .then(function (connection2) { - var sql = fs.readFileSync(path.resolve(__dirname, '../sql/codepush-all.sql'), 'utf-8'); + .then(() => { + const sql = fs.readFileSync( + path.resolve(__dirname, '../sql/codepush-all.sql'), + 'utf-8', + ); return connection2.query(sql); }) - .then(function () { + .then(() => { console.log('success.'); }) - .catch(function (e) { + .catch((e) => { console.log(e); }) - .finally(function () { + .finally(() => { if (connection) connection.end(); if (connection2) connection2.end(); }); -} else if (command == 'upgrade') { +} else if (command === 'upgrade') { + let connection; try { - var connection = mysql + connection = mysql .createConnection({ host: dbhost, user: dbuser, @@ -111,16 +116,16 @@ if (command === 'init') { process.exit(1); } - var version_no = '0.0.1'; + let versionNo = '0.0.1'; connection .query('select `version` from `versions` where `type`=1 limit 1') .then((rs) => { - version_no = _.get(rs, '0.version', '0.0.1'); - if (version_no == CURRENT_DB_VERSION) { + versionNo = _.get(rs, '0.version', '0.0.1'); + if (versionNo === CURRENT_DB_VERSION) { console.log('Everything up-to-date.'); process.exit(0); } - var allSqlFile = [ + const allSqlFile = [ { version: '0.2.14', path: path.resolve(__dirname, '../sql/codepush-v0.2.14-patch.sql'), @@ -143,23 +148,23 @@ if (command === 'init') { }, ]; return allSqlFile.reduce((prev, sqlFile) => { - if (!_.gt(sqlFile['version'], version_no)) { + if (!_.gt(sqlFile.version, versionNo)) { return prev; } - var sql = fs.readFileSync(sqlFile['path'], 'utf-8'); - console.log('exec sql file:' + sqlFile['path']); + const sql = fs.readFileSync(sqlFile.path, 'utf-8'); + console.log(`exec sql file:${sqlFile.path}`); return connection.query(sql).then(() => { - console.log('success exec sql file:' + sqlFile['path']); + console.log(`success exec sql file:${sqlFile.path}`); }); }, Promise.resolve()); }) - .then(function () { + .then(() => { console.log('Upgrade success.'); }) - .catch(function (e) { + .catch((e) => { console.error(e); }) - .finally(function () { + .finally(() => { if (connection) connection.end(); }); } else { diff --git a/src/models/collaborators.ts b/src/models/collaborators.ts index 82b7f7eb..2ef7938e 100644 --- a/src/models/collaborators.ts +++ b/src/models/collaborators.ts @@ -35,7 +35,7 @@ export async function findCollaboratorsByAppNameAndUid(uid: number, appName: str const sql = 'SELECT b.* FROM `apps` as a left join `collaborators` as b on (a.id = b.appid) where a.name= :appName and b.uid = :uid and a.`deleted_at` IS NULL and b.`deleted_at` IS NULL limit 0,1'; const data = await sequelize.query(sql, { - replacements: { appName: appName, uid: uid }, + replacements: { appName, uid }, model: Collaborators, }); return data.pop(); diff --git a/src/models/deployments.ts b/src/models/deployments.ts index b5ba4adf..75812ce4 100644 --- a/src/models/deployments.ts +++ b/src/models/deployments.ts @@ -1,5 +1,5 @@ -import { DataTypes, Model } from 'sequelize'; import _ from 'lodash'; +import { DataTypes, Model } from 'sequelize'; import { sequelize } from '../core/utils/connections'; const { AppError } = require('../core/app-error'); @@ -42,17 +42,18 @@ export const Deployments = sequelize.define( ); export function generateDeploymentsLabelId(deploymentId: number) { - return sequelize.transaction(function (t) { + return sequelize.transaction((t) => { return Deployments.findByPk(deploymentId, { transaction: t, lock: t.LOCK.UPDATE, - }).then(function (data) { + }).then((data) => { if (_.isEmpty(data)) { throw new AppError('does not find deployment'); } - data.label_id = data.label_id + 1; - return data.save({ transaction: t }).then(function (data) { - return data.label_id; + // eslint-disable-next-line no-param-reassign + data.label_id += 1; + return data.save({ transaction: t }).then((d) => { + return d.label_id; }); }); }); diff --git a/src/www.ts b/src/www.ts index 8a279f16..e9828a63 100755 --- a/src/www.ts +++ b/src/www.ts @@ -1,59 +1,86 @@ #!/usr/bin/env node -/** - * Module dependencies. - */ - -import { logger } from 'kv-logger'; import http from 'http'; -import validator from 'validator'; +import { logger } from 'kv-logger'; import _ from 'lodash'; - +import validator from 'validator'; import { app } from './app'; -import { Versions } from './models/versions'; - import { CURRENT_DB_VERSION } from './core/const'; +import { Versions } from './models/versions'; /** - * Get port from environment and store in Express. + * Normalize a port into a number, string, or false. */ +function normalizePort(val): number | string | false { + const port = parseInt(val, 10); -var port = normalizePort(process.env.PORT || '3000'); - -var host = null; -if (process.env.HOST) { - logger.debug('process.env.HOST ' + process.env.HOST); - if (validator.isIP(process.env.HOST)) { - logger.debug(process.env.HOST + ' valid'); - host = process.env.HOST; - } else { - logger.warn('process.env.HOST ' + process.env.HOST + ' is invalid, use 0.0.0.0 instead'); + if (Number.isNaN(port)) { + // named pipe + return val; } -} -app.set('port', port); -/** - * Create HTTP server. - */ + if (port >= 0) { + // port number + return port; + } -const server = http.createServer(app); + return false; +} -/** - * Listen on provided port, on all network interfaces. - */ +// check if the db is initialized Versions.findOne({ where: { type: 1 } }) - .then(function (v) { - if (!v || v.version != CURRENT_DB_VERSION) { + .then((v) => { + if (!v || v.version !== CURRENT_DB_VERSION) { throw new Error( 'Please upgrade your database. use `npm run upgrade` or `code-push-server-db upgrade`', ); } + // create server and listen + const server = http.createServer(app); + + const port = normalizePort(process.env.PORT || '3000'); + + let host = null; + if (process.env.HOST) { + logger.debug(`process.env.HOST ${process.env.HOST}`); + if (validator.isIP(process.env.HOST)) { + logger.debug(`${process.env.HOST} valid`); + host = process.env.HOST; + } else { + logger.warn(`process.env.HOST ${process.env.HOST} is invalid, use 0.0.0.0 instead`); + } + } + server.listen(port, host); - server.on('error', onError); - server.on('listening', onListening); - return; + + server.on('error', (error: Error & { syscall: string; code: string }) => { + if (error.syscall === 'listen') { + const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + logger.error(`${bind} requires elevated privileges`); + process.exit(1); + break; + case 'EADDRINUSE': + logger.error(`${bind} is already in use`); + process.exit(1); + break; + default: + break; + } + } + logger.error(error); + throw error; + }); + + server.on('listening', () => { + const addr = server.address(); + logger.info('server is listening on ', addr); + }); }) - .catch(function (e) { + .catch((e) => { if (_.startsWith(e.message, 'ER_NO_SUCH_TABLE')) { logger.error( new Error( @@ -65,58 +92,3 @@ Versions.findOne({ where: { type: 1 } }) } process.exit(1); }); - -/** - * Normalize a port into a number, string, or false. - */ - -function normalizePort(val): number | string | boolean { - var port = parseInt(val, 10); - - if (isNaN(port)) { - // named pipe - return val; - } - - if (port >= 0) { - // port number - return port; - } - - return false; -} - -/** - * Event listener for HTTP server "error" event. - */ - -function onError(error) { - if (error.syscall !== 'listen') { - throw error; - } - - var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port; - - // handle specific listen errors with friendly messages - switch (error.code) { - case 'EACCES': - logger.error(bind + ' requires elevated privileges'); - process.exit(1); - break; - case 'EADDRINUSE': - logger.error(bind + ' is already in use'); - process.exit(1); - break; - default: - throw error; - } -} - -/** - * Event listener for HTTP server "listening" event. - */ - -function onListening() { - var addr = server.address(); - logger.info('server is listening on ', addr); -} From 82419eca0c4724b5c98029eb3af103f5d88e4d99 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 16 Feb 2022 15:41:35 +0800 Subject: [PATCH 178/347] refactor: turn core/utils/qetag to ts --- src/core/services/package-manager.ts | 9 ++- src/core/utils/qetag.js | 72 ----------------- src/core/utils/qetag.ts | 114 +++++++++++++++++++++++++++ src/core/utils/security.js | 21 ----- 4 files changed, 119 insertions(+), 97 deletions(-) delete mode 100644 src/core/utils/qetag.js create mode 100644 src/core/utils/qetag.ts diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index 2dc50e35..66f92460 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -27,6 +27,7 @@ import { RELEASE_METHOD_UPLOAD, } from '../const'; import { sequelize } from '../utils/connections'; +import { qetag } from '../utils/qetag'; const common = require('../utils/common'); const security = require('../utils/security'); @@ -271,7 +272,7 @@ class PackageManager { dataCenterContentPath, hotCodePushFile, ).then((data) => { - return security.qetag(data.path).then((diffHash) => { + return qetag(data.path).then((diffHash) => { return common.uploadFileToStorage(diffHash, fileName).then(() => { const stats = fs.statSync(fileName); return PackagesDiff.create({ @@ -359,7 +360,7 @@ class PackageManager { } // eslint-disable-next-line max-lines-per-function - releasePackage(appId, deploymentId, packageInfo, filePath, releaseUid) { + releasePackage(appId, deploymentId, packageInfo, filePath: string, releaseUid) { const { appVersion } = packageInfo; const versionInfo = common.validatorVersion(appVersion); if (!versionInfo[0]) { @@ -375,7 +376,7 @@ class PackageManager { const directoryPath = path.join(directoryPathParent, 'current'); logger.debug(`releasePackage generate an random dir path: ${directoryPath}`); return Promise.all([ - security.qetag(filePath), + qetag(filePath), common.createEmptyFolder(directoryPath).then(() => { return common.unzipFile(filePath, directoryPath); }), @@ -422,7 +423,7 @@ class PackageManager { logger.debug(e.message); throw e; } - return security.qetag(manifestFile); + return qetag(manifestFile); }) .then((manifestHash) => { return Promise.all([ diff --git a/src/core/utils/qetag.js b/src/core/utils/qetag.js deleted file mode 100644 index eb6eaedf..00000000 --- a/src/core/utils/qetag.js +++ /dev/null @@ -1,72 +0,0 @@ -// 计算文件的eTag,参数为buffer或者readableStream或者文件路径 -function getEtag(buffer, callback) { - // 判断传入的参数是buffer还是stream还是filepath - var mode = 'buffer'; - - if (typeof buffer === 'string') { - buffer = require('fs').createReadStream(buffer); - mode = 'stream'; - } else if (buffer instanceof require('stream')) { - mode = 'stream'; - } - - // sha1算法 - var sha1 = function (content) { - var crypto = require('crypto'); - var sha1 = crypto.createHash('sha1'); - sha1.update(content); - return sha1.digest(); - }; - - // 以4M为单位分割 - var blockSize = 4 * 1024 * 1024; - var sha1String = []; - var prefix = 0x16; - var blockCount = 0; - - switch (mode) { - case 'buffer': - var bufferSize = buffer.length; - blockCount = Math.ceil(bufferSize / blockSize); - - for (var i = 0; i < blockCount; i++) { - sha1String.push(sha1(buffer.slice(i * blockSize, (i + 1) * blockSize))); - } - process.nextTick(function () { - callback(calcEtag()); - }); - break; - case 'stream': - var stream = buffer; - stream.on('readable', function () { - var chunk; - while ((chunk = stream.read(blockSize))) { - sha1String.push(sha1(chunk)); - blockCount++; - } - }); - stream.on('end', function () { - callback(calcEtag()); - }); - break; - } - - function calcEtag() { - if (!sha1String.length) { - return 'Fto5o-5ea0sNMlW_75VgGJCv2AcJ'; - } - var sha1Buffer = Buffer.concat(sha1String, blockCount * 20); - - // 如果大于4M,则对各个块的sha1结果再次sha1 - if (blockCount > 1) { - prefix = 0x96; - sha1Buffer = sha1(sha1Buffer); - } - - sha1Buffer = Buffer.concat([Buffer.from([prefix]), sha1Buffer], sha1Buffer.length + 1); - - return sha1Buffer.toString('base64').replace(/\//g, '_').replace(/\+/g, '-'); - } -} - -module.exports = getEtag; diff --git a/src/core/utils/qetag.ts b/src/core/utils/qetag.ts new file mode 100644 index 00000000..dc25ecbc --- /dev/null +++ b/src/core/utils/qetag.ts @@ -0,0 +1,114 @@ +import { Buffer } from 'buffer'; +import crypto from 'crypto'; +import fs from 'fs'; +import { Stream, Readable } from 'stream'; +import { logger } from 'kv-logger'; +import { AppError } from '../app-error'; + +// 计算文件的eTag,参数为buffer或者readableStream或者文件路径 +function getEtag(buffer: string | Stream | Buffer, callback: (etag: string) => void) { + // 判断传入的参数是buffer还是stream还是filepath + let mode = 'buffer'; + + if (typeof buffer === 'string') { + // eslint-disable-next-line no-param-reassign + buffer = fs.createReadStream(buffer); + mode = 'stream'; + } else if (buffer instanceof Stream) { + mode = 'stream'; + } + + // sha1算法 + const sha1 = (content) => { + const sha1Hash = crypto.createHash('sha1'); + sha1Hash.update(content); + return sha1Hash.digest(); + }; + + // 以4M为单位分割 + const blockSize = 4 * 1024 * 1024; + const sha1String = []; + let prefix = 0x16; + let blockCount = 0; + + const calcEtag = () => { + if (!sha1String.length) { + return 'Fto5o-5ea0sNMlW_75VgGJCv2AcJ'; + } + let sha1Buffer = Buffer.concat(sha1String, blockCount * 20); + + // 如果大于4M,则对各个块的sha1结果再次sha1 + if (blockCount > 1) { + prefix = 0x96; + sha1Buffer = sha1(sha1Buffer); + } + + sha1Buffer = Buffer.concat([Buffer.from([prefix]), sha1Buffer], sha1Buffer.length + 1); + + return sha1Buffer.toString('base64').replace(/\//g, '_').replace(/\+/g, '-'); + }; + + switch (mode) { + case 'buffer': { + const buf = buffer as Buffer; + const bufferSize = buf.length; + blockCount = Math.ceil(bufferSize / blockSize); + + for (let i = 0; i < blockCount; i += 1) { + sha1String.push(sha1(buf.slice(i * blockSize, (i + 1) * blockSize))); + } + process.nextTick(() => { + callback(calcEtag()); + }); + break; + } + case 'stream': { + const stream = buffer as Readable; + stream.on('readable', () => { + for (;;) { + const chunk = stream.read(blockSize); + if (!chunk) { + break; + } + sha1String.push(sha1(chunk)); + blockCount += 1; + } + }); + stream.on('end', () => { + callback(calcEtag()); + }); + + break; + } + default: + // cannot be here + break; + } +} + +// TODO: support only files (string)? +export function qetag(buffer: string | Stream | Buffer): Promise { + if (typeof buffer === 'string') { + // it's a file + try { + logger.debug(`Check upload file ${buffer} fs.R_OK`); + fs.accessSync(buffer, fs.constants.R_OK); + logger.debug(`Check upload file ${buffer} fs.R_OK pass`); + } catch (e) { + logger.error(e); + return Promise.reject(new AppError(e.message)); + } + } + logger.debug(`generate file identical`); + return new Promise((resolve) => { + getEtag(buffer, (data) => { + if (typeof buffer === 'string') { + logger.debug('identical:', { + file: buffer, + etag: data, + }); + } + resolve(data); + }); + }); +} diff --git a/src/core/utils/security.js b/src/core/utils/security.js index ef88bf49..8ac92193 100644 --- a/src/core/utils/security.js +++ b/src/core/utils/security.js @@ -74,27 +74,6 @@ security.packageHashSync = function (jsonData) { return security.stringSha256Sync(manifestString); }; -//参数为buffer或者readableStream或者文件路径 -security.qetag = function (buffer) { - if (typeof buffer === 'string') { - try { - logger.debug(`Check upload file ${buffer} fs.R_OK`); - fs.accessSync(buffer, fs.R_OK); - logger.debug(`Pass upload file ${buffer}`); - } catch (e) { - logger.error(e); - return Promise.reject(new AppError(e.message)); - } - } - logger.debug(`generate file identical`); - return new Promise((resolve, reject) => { - qetag(buffer, (data) => { - logger.debug('identical:', data); - resolve(data); - }); - }); -}; - security.sha256AllFiles = function (files) { return new Promise((resolve, reject) => { var results = {}; From f00db27f5fd60537057486ee4e29f2fe1e358c16 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 16 Feb 2022 16:52:55 +0800 Subject: [PATCH 179/347] refactor: turn core/utils/security to ts --- package-lock.json | 17 +- package.json | 2 + src/core/middleware.js | 7 +- src/core/services/account-manager.ts | 20 +-- src/core/services/app-manager.js | 7 +- src/core/services/datacenter-manager.js | 12 +- src/core/services/deployments.js | 4 +- src/core/services/package-manager.ts | 8 +- src/core/utils/security.js | 205 ------------------------ src/core/utils/security.ts | 200 +++++++++++++++++++++++ src/routes/accessKeys.js | 4 +- src/routes/auth.js | 6 +- tests/api/users/users.test.js | 4 +- 13 files changed, 252 insertions(+), 244 deletions(-) delete mode 100644 src/core/utils/security.js create mode 100644 src/core/utils/security.ts diff --git a/package-lock.json b/package-lock.json index 5bf502b3..03451eed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -553,6 +553,12 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, + "@types/bcryptjs": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz", + "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==", + "dev": true + }, "@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -725,6 +731,15 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, + "@types/recursive-readdir": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.0.tgz", + "integrity": "sha512-HGk753KRu2N4mWduovY4BLjYq4jTOL29gV2OfGdGxHcPSWGFkC5RRIdk+VTs5XmYd7MVAD+JwKrcb5+5Y7FOCg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/serve-static": { "version": "1.13.10", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", @@ -1334,7 +1349,7 @@ }, "bcryptjs": { "version": "2.4.3", - "resolved": "http://registry.npm.taobao.org/bcryptjs/download/bcryptjs-2.4.3.tgz", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" }, "before": { diff --git a/package.json b/package.json index 114190ad..5db3f695 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ }, "devDependencies": { "@shm-open/eslint-config-bundle": "1.8.2", + "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", "@types/fs-extra": "9.0.13", @@ -77,6 +78,7 @@ "@types/lodash": "4.14.178", "@types/node-fetch": "2.6.1", "@types/nodemailer": "6.4.4", + "@types/recursive-readdir": "2.2.0", "@types/validator": "13.7.1", "@types/yazl": "2.4.2", "concurrently": "7.0.0", diff --git a/src/core/middleware.js b/src/core/middleware.js index d9ff5a8a..bad1afb9 100644 --- a/src/core/middleware.js +++ b/src/core/middleware.js @@ -5,13 +5,12 @@ import { UserTokens } from '../models/user_tokens'; import { Users } from '../models/users'; import { config } from '../core/config'; import { AppError, Unauthorized } from './app-error'; - -var security = require('../core/utils/security'); +import { parseToken, md5 } from '../core/utils/security'; var middleware = module.exports; var checkAuthToken = function (authToken) { - var objToken = security.parseToken(authToken); + var objToken = parseToken(authToken); return Users.findOne({ where: { identical: objToken.identical }, }) @@ -61,7 +60,7 @@ var checkAccessToken = function (accessToken) { if (_.isEmpty(users)) { throw new Unauthorized(); } - if (!_.eq(hash, security.md5(users.get('ack_code')))) { + if (!_.eq(hash, md5(users.get('ack_code')))) { throw new Unauthorized(); } resolve(users); diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts index b68bee69..81266476 100644 --- a/src/core/services/account-manager.ts +++ b/src/core/services/account-manager.ts @@ -9,8 +9,8 @@ import { Users } from '../../models/users'; import { AppError } from '../app-error'; import { config } from '../config'; import { redisClient } from '../utils/connections'; +import { passwordVerifySync, randToken, md5, passwordHashSync } from '../utils/security'; -const security = require('../utils/security'); const EmailManager = require('./email-manager'); const loginLimitPre = 'LOGIN_LIMIT_PRE_'; @@ -132,7 +132,7 @@ class AccountManager { return users; }) .then((users) => { - if (!security.passwordVerifySync(password, users.password)) { + if (!passwordVerifySync(password, users.password)) { if (tryLoginTimes > 0) { const loginKey = `${loginLimitPre}${users.id}`; redisClient.exists(loginKey).then((isExists) => { @@ -163,9 +163,9 @@ class AccountManager { }) .then(() => { // 将token临时存储到redis - const token = security.randToken(40); + const token = randToken(40); return redisClient - .setEx(`${registerCode}${security.md5(email)}`, expired, token) + .setEx(`${registerCode}${md5(email)}`, expired, token) .then(() => { return token; }); @@ -185,7 +185,7 @@ class AccountManager { } }) .then(() => { - const registerKey = `${registerCode}${security.md5(email)}`; + const registerKey = `${registerCode}${md5(email)}`; return redisClient.get(registerKey).then((storageToken) => { if (_.isEmpty(storageToken)) { throw new AppError(`验证码已经失效,请您重新获取`); @@ -211,10 +211,10 @@ class AccountManager { } }) .then(() => { - const identical = security.randToken(9); + const identical = randToken(9); return Users.create({ email, - password: security.passwordHashSync(password), + password: passwordHashSync(password), identical, }); }); @@ -232,12 +232,12 @@ class AccountManager { return u; }) .then((u) => { - const isEq = security.passwordVerifySync(oldPassword, u.get('password')); + const isEq = passwordVerifySync(oldPassword, u.get('password')); if (!isEq) { throw new AppError(`您输入的旧密码不正确,请重新输入`); } - u.set('password', security.passwordHashSync(newPassword)); - u.set('ack_code', security.randToken(5)); + u.set('password', passwordHashSync(newPassword)); + u.set('ack_code', randToken(5)); return u.save(); }); } diff --git a/src/core/services/app-manager.js b/src/core/services/app-manager.js index 80c7b130..fbd07170 100644 --- a/src/core/services/app-manager.js +++ b/src/core/services/app-manager.js @@ -20,8 +20,7 @@ import { STAGING, PRODUCTION, } from '../const'; - -var security = require('../../core/utils/security'); +import { randToken } from '../../core/utils/security'; var proto = (module.exports = function () { function AppManager() {} @@ -48,7 +47,7 @@ proto.addApp = function (uid, appName, os, platform, identical) { ).then((apps) => { var appId = apps.id; var deployments = []; - var deploymentKey = security.randToken(28) + identical; + var deploymentKey = randToken(28) + identical; deployments.push({ appid: appId, name: PRODUCTION, @@ -56,7 +55,7 @@ proto.addApp = function (uid, appName, os, platform, identical) { label_id: 0, deployment_key: deploymentKey, }); - deploymentKey = security.randToken(28) + identical; + deploymentKey = randToken(28) + identical; deployments.push({ appid: appId, name: STAGING, diff --git a/src/core/services/datacenter-manager.js b/src/core/services/datacenter-manager.js index 7433c91e..94b7f0c5 100644 --- a/src/core/services/datacenter-manager.js +++ b/src/core/services/datacenter-manager.js @@ -4,8 +4,8 @@ import path from 'path'; import { logger } from 'kv-logger'; import { config } from '../config'; import { AppError } from '../app-error'; +import { calcAllFileSha256, packageHashSync } from '../utils/security'; -var security = require('../utils/security'); var common = require('../utils/common'); const MANIFEST_FILE_NAME = 'manifest.json'; @@ -60,8 +60,8 @@ proto.validateStore = function (providePackageHash) { logger.debug(`validateStore providePackageHash not exist`); return Promise.resolve(false); } - return security.calcAllFileSha256(contentPath).then((manifestJson) => { - var packageHash = security.packageHashSync(manifestJson); + return calcAllFileSha256(contentPath).then((manifestJson) => { + var packageHash = packageHashSync(manifestJson); logger.debug(`validateStore packageHash:`, packageHash); try { var manifestJsonLocal = JSON.parse(fs.readFileSync(manifestFile)); @@ -69,7 +69,7 @@ proto.validateStore = function (providePackageHash) { logger.debug(`validateStore manifestFile contents invilad`); return false; } - var packageHashLocal = security.packageHashSync(manifestJsonLocal); + var packageHashLocal = packageHashSync(manifestJsonLocal); logger.debug(`validateStore packageHashLocal:`, packageHashLocal); if (_.eq(providePackageHash, packageHash) && _.eq(providePackageHash, packageHashLocal)) { logger.debug(`validateStore store files is ok`); @@ -86,8 +86,8 @@ proto.storePackage = function (sourceDst, force) { force = false; } var self = this; - return security.calcAllFileSha256(sourceDst).then((manifestJson) => { - var packageHash = security.packageHashSync(manifestJson); + return calcAllFileSha256(sourceDst).then((manifestJson) => { + var packageHash = packageHashSync(manifestJson); logger.debug('storePackage manifestJson packageHash:', packageHash); var dataDir = self.getDataDir(); var packageHashPath = path.join(dataDir, packageHash); diff --git a/src/core/services/deployments.js b/src/core/services/deployments.js index a934ae3f..d5e15c62 100644 --- a/src/core/services/deployments.js +++ b/src/core/services/deployments.js @@ -11,8 +11,8 @@ import { PackagesMetrics } from '../../models/packages_metrics'; import { Users } from '../../models/users'; import { sequelize } from '../utils/connections'; import { AppError } from '../app-error'; +import { randToken } from '../../core/utils/security'; -var security = require('../../core/utils/security'); var common = require('../../core/utils/common'); var proto = (module.exports = function () { @@ -45,7 +45,7 @@ proto.addDeloyment = function (name, appId, uid) { } return self.existDeloymentName(appId, name).then(() => { var identical = user.identical; - var deploymentKey = security.randToken(28) + identical; + var deploymentKey = randToken(28) + identical; return Deployments.create({ appid: appId, name: name, diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index 66f92460..bbc961b2 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -28,9 +28,9 @@ import { } from '../const'; import { sequelize } from '../utils/connections'; import { qetag } from '../utils/qetag'; +import { randToken, uploadPackageType } from '../utils/security'; const common = require('../utils/common'); -const security = require('../utils/security'); const dataCenterManager = require('./datacenter-manager')(); class PackageManager { @@ -326,7 +326,7 @@ class PackageManager { const packageHash = _.get(originalPackage, 'package_hash'); // const manifest_blob_url = _.get(originalPackage, 'manifest_blob_url'); const blobUrl = _.get(originalPackage, 'blob_url'); - const workDirectoryPath = path.join(os.tmpdir(), `codepush_${security.randToken(32)}`); + const workDirectoryPath = path.join(os.tmpdir(), `codepush_${randToken(32)}`); logger.debug('createDiffPackages using dir', { workDirectoryPath }); return common .createEmptyFolder(workDirectoryPath) @@ -372,7 +372,7 @@ class PackageManager { const { rollout } = packageInfo; // 灰度百分比 const { isMandatory } = packageInfo; // 是否强制更新,无法跳过 const tmpDir = os.tmpdir(); - const directoryPathParent = path.join(tmpDir, `codepuh_${security.randToken(32)}`); + const directoryPathParent = path.join(tmpDir, `codepuh_${randToken(32)}`); const directoryPath = path.join(directoryPathParent, 'current'); logger.debug(`releasePackage generate an random dir path: ${directoryPath}`); return Promise.all([ @@ -382,7 +382,7 @@ class PackageManager { }), ]) .then(([blobHash]) => { - return security.uploadPackageType(directoryPath).then((type) => { + return uploadPackageType(directoryPath).then((type) => { return Apps.findByPk(appId).then((appInfo) => { if (type > 0 && appInfo.os > 0 && appInfo.os !== type) { const e = new AppError('it must be publish it by ios type'); diff --git a/src/core/utils/security.js b/src/core/utils/security.js deleted file mode 100644 index 8ac92193..00000000 --- a/src/core/utils/security.js +++ /dev/null @@ -1,205 +0,0 @@ -import { logger } from 'kv-logger'; -import fs from 'fs'; -import _ from 'lodash'; -import crypto from 'crypto'; - -import { AppError } from '../app-error'; -import { ANDROID, IOS } from '../const'; - -var bcrypt = require('bcryptjs'); -var qetag = require('../utils/qetag'); - -const randToken = require('rand-token').generator({ - chars: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', - source: 'crypto', -}); - -var security = {}; -module.exports = security; - -security.md5 = function (str) { - var md5sum = crypto.createHash('md5'); - md5sum.update(str); - str = md5sum.digest('hex'); - return str; -}; - -security.passwordHashSync = function (password) { - return bcrypt.hashSync(password, bcrypt.genSaltSync(12)); -}; - -security.passwordVerifySync = function (password, hash) { - return bcrypt.compareSync(password, hash); -}; - -security.randToken = function (num) { - return randToken.generate(num); -}; - -security.parseToken = function (token) { - return { identical: token.substr(-9, 9), token: token.substr(0, 28) }; -}; - -security.fileSha256 = function (file) { - return new Promise((resolve, reject) => { - var rs = fs.createReadStream(file); - var hash = crypto.createHash('sha256'); - rs.on('data', hash.update.bind(hash)); - rs.on('error', (e) => { - reject(e); - }); - rs.on('end', () => { - resolve(hash.digest('hex')); - }); - }); -}; - -security.stringSha256Sync = function (contents) { - var sha256 = crypto.createHash('sha256'); - sha256.update(contents); - return sha256.digest('hex'); -}; - -security.packageHashSync = function (jsonData) { - var sortedArr = security.sortJsonToArr(jsonData); - var manifestData = _.filter(sortedArr, (v) => { - return !security.isPackageHashIgnored(v.path); - }).map((v) => { - return v.path + ':' + v.hash; - }); - logger.debug('packageHashSync manifestData:', manifestData); - var manifestString = JSON.stringify(manifestData.sort()); - manifestString = _.replace(manifestString, /\\\//g, '/'); - logger.debug('packageHashSync manifestString:', manifestString); - return security.stringSha256Sync(manifestString); -}; - -security.sha256AllFiles = function (files) { - return new Promise((resolve, reject) => { - var results = {}; - var length = files.length; - var count = 0; - files.forEach((file) => { - security.fileSha256(file).then((hash) => { - results[file] = hash; - count++; - if (count == length) { - resolve(results); - } - }); - }); - }); -}; - -security.uploadPackageType = function (directoryPath) { - return new Promise((resolve, reject) => { - var recursive = require('recursive-readdir'); - recursive(directoryPath, (err, files) => { - if (err) { - logger.error(new AppError(err.message)); - reject(new AppError(err.message)); - } else { - if (files.length == 0) { - logger.debug(`uploadPackageType empty files`); - reject(new AppError('empty files')); - } else { - const AREGEX = /android\.bundle/; - const AREGEX_IOS = /main\.jsbundle/; - var packageType = 0; - _.forIn(files, function (value) { - if (AREGEX.test(value)) { - packageType = ANDROID; - return false; - } - if (AREGEX_IOS.test(value)) { - packageType = IOS; - return false; - } - }); - logger.debug(`uploadPackageType packageType: ${packageType}`); - resolve(packageType); - } - } - }); - }); -}; - -// some files are ignored in calc hash in client sdk -// https://github.com/Microsoft/react-native-code-push/pull/974/files#diff-21b650f88429c071b217d46243875987R15 -security.isHashIgnored = function (relativePath) { - if (!relativePath) { - return true; - } - - const IgnoreMacOSX = '__MACOSX/'; - const IgnoreDSStore = '.DS_Store'; - - return ( - relativePath.startsWith(IgnoreMacOSX) || - relativePath === IgnoreDSStore || - relativePath.endsWith(IgnoreDSStore) - ); -}; - -security.isPackageHashIgnored = function (relativePath) { - if (!relativePath) { - return true; - } - - // .codepushrelease contains code sign JWT - // it should be ignored in package hash but need to be included in package manifest - const IgnoreCodePushMetadata = '.codepushrelease'; - return ( - relativePath === IgnoreCodePushMetadata || - relativePath.endsWith(IgnoreCodePushMetadata) || - security.isHashIgnored(relativePath) - ); -}; - -security.calcAllFileSha256 = function (directoryPath) { - return new Promise((resolve, reject) => { - var recursive = require('recursive-readdir'); - var path = require('path'); - var slash = require('slash'); - recursive(directoryPath, (error, files) => { - if (error) { - logger.error(error); - reject(new AppError(error.message)); - } else { - // filter files that should be ignored - files = files.filter((file) => { - var relative = path.relative(directoryPath, file); - return !security.isHashIgnored(relative); - }); - - if (files.length == 0) { - logger.debug(`calcAllFileSha256 empty files in directoryPath:`, directoryPath); - reject(new AppError('empty files')); - } else { - security.sha256AllFiles(files).then((results) => { - var data = {}; - _.forIn(results, (value, key) => { - var relativePath = path.relative(directoryPath, key); - var matchresult = relativePath.match(/(\/|\\).*/); - if (matchresult) { - relativePath = path.join('CodePush', matchresult[0]); - } - relativePath = slash(relativePath); - data[relativePath] = value; - }); - logger.debug(`calcAllFileSha256 files:`, data); - resolve(data); - }); - } - } - }); - }); -}; - -security.sortJsonToArr = function (json) { - var rs = []; - _.forIn(json, (value, key) => { - rs.push({ path: key, hash: value }); - }); - return _.sortBy(rs, (o) => o.path); -}; diff --git a/src/core/utils/security.ts b/src/core/utils/security.ts new file mode 100644 index 00000000..6e799c91 --- /dev/null +++ b/src/core/utils/security.ts @@ -0,0 +1,200 @@ +import crypto from 'crypto'; +import fs from 'fs'; +import path from 'path'; +import bcrypt from 'bcryptjs'; +import { logger } from 'kv-logger'; +import _ from 'lodash'; +import { generator } from 'rand-token'; +import recursive from 'recursive-readdir'; +import slash from 'slash'; +import { AppError } from '../app-error'; +import { ANDROID, IOS } from '../const'; + +export function md5(str: string) { + const md5sum = crypto.createHash('md5'); + md5sum.update(str); + return md5sum.digest('hex'); +} + +export function passwordHashSync(password: string) { + return bcrypt.hashSync(password, bcrypt.genSaltSync(12)); +} + +export function passwordVerifySync(password: string, hash: string) { + return bcrypt.compareSync(password, hash); +} + +const randTokenGen = generator({ + chars: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + source: 'crypto', +}); + +export function randToken(num: number) { + return randTokenGen.generate(num); +} + +export function parseToken(token: string) { + return { identical: token.substring(token.length - 9), token: token.substring(0, 28) }; +} + +function fileSha256(file: string): Promise { + return new Promise((resolve, reject) => { + const rs = fs.createReadStream(file); + const hash = crypto.createHash('sha256'); + rs.on('data', hash.update.bind(hash)); + rs.on('error', (e) => { + reject(e); + }); + rs.on('end', () => { + resolve(hash.digest('hex')); + }); + }); +} + +function stringSha256Sync(contents: string) { + const sha256 = crypto.createHash('sha256'); + sha256.update(contents); + return sha256.digest('hex'); +} + +function sortJsonToArr(json) { + const rs = []; + _.forIn(json, (value, key) => { + rs.push({ path: key, hash: value }); + }); + return _.sortBy(rs, (o) => o.path); +} + +// some files are ignored in calc hash in client sdk +// https://github.com/Microsoft/react-native-code-push/pull/974/files#diff-21b650f88429c071b217d46243875987R15 +function isHashIgnored(relativePath) { + if (!relativePath) { + return true; + } + + const IgnoreMacOSX = '__MACOSX/'; + const IgnoreDSStore = '.DS_Store'; + + return ( + relativePath.startsWith(IgnoreMacOSX) || + relativePath === IgnoreDSStore || + relativePath.endsWith(IgnoreDSStore) + ); +} + +function isPackageHashIgnored(relativePath: string) { + if (!relativePath) { + return true; + } + + // .codepushrelease contains code sign JWT + // it should be ignored in package hash but need to be included in package manifest + const IgnoreCodePushMetadata = '.codepushrelease'; + return ( + relativePath === IgnoreCodePushMetadata || + relativePath.endsWith(IgnoreCodePushMetadata) || + isHashIgnored(relativePath) + ); +} + +export function packageHashSync(jsonData) { + const sortedArr = sortJsonToArr(jsonData); + const manifestData = _.filter(sortedArr, (v) => { + return !isPackageHashIgnored(v.path); + }).map((v) => { + return `${v.path}:${v.hash}`; + }); + let manifestString = JSON.stringify(manifestData.sort()); + manifestString = _.replace(manifestString, /\\\//g, '/'); + logger.debug('packageHashSync manifestString', { + manifestString, + }); + return stringSha256Sync(manifestString); +} + +function sha256AllFiles(files: string[]): Promise> { + return new Promise((resolve) => { + const results: Record = {}; + const { length } = files; + let count = 0; + files.forEach((file) => { + fileSha256(file).then((hash) => { + results[file] = hash; + count += 1; + if (count === length) { + resolve(results); + } + }); + }); + }); +} + +export function uploadPackageType(directoryPath: string) { + return new Promise((resolve, reject) => { + recursive(directoryPath, (err, files) => { + if (err) { + logger.error(new AppError(err.message)); + reject(new AppError(err.message)); + } else if (files.length === 0) { + logger.debug(`uploadPackageType empty files`); + reject(new AppError('empty files')); + } else { + const aregex = /android\.bundle/; + const aregexIOS = /main\.jsbundle/; + let packageType = 0; + _.forIn(files, (value: string) => { + if (aregex.test(value)) { + packageType = ANDROID; + return false; + } + if (aregexIOS.test(value)) { + packageType = IOS; + return false; + } + + return undefined; + }); + logger.debug(`uploadPackageType packageType: ${packageType}`); + resolve(packageType); + } + }); + }); +} + +export function calcAllFileSha256(directoryPath: string): Promise> { + return new Promise((resolve, reject) => { + recursive(directoryPath, (error, files) => { + if (error) { + logger.error(error); + reject(new AppError(error.message)); + } else { + // filter files that should be ignored + // eslint-disable-next-line no-param-reassign + files = files.filter((file) => { + const relative = path.relative(directoryPath, file); + return !isHashIgnored(relative); + }); + + if (files.length === 0) { + logger.debug(`calcAllFileSha256 empty files in directory`, { directoryPath }); + reject(new AppError('empty files')); + } else { + sha256AllFiles(files).then((results) => { + const data: Record = {}; + _.forIn(results, (value, key) => { + let relativePath = path.relative(directoryPath, key); + const matchresult = relativePath.match(/(\/|\\).*/); + if (matchresult) { + relativePath = path.join('CodePush', matchresult[0]); + } + relativePath = slash(relativePath); + data[relativePath] = value; + }); + logger.debug(`calcAllFileSha256 files:`, data); + resolve(data); + }); + } + } + }); + }); +} diff --git a/src/routes/accessKeys.js b/src/routes/accessKeys.js index c290bb0f..76af58e0 100644 --- a/src/routes/accessKeys.js +++ b/src/routes/accessKeys.js @@ -4,8 +4,8 @@ import { logger } from 'kv-logger'; import { UserTokens } from '../models/user_tokens'; import { AppError } from '../core/app-error'; import { accountManager } from '../core/services/account-manager'; +import { randToken } from '../core/utils/security'; -var security = require('../core/utils/security'); var middleware = require('../core/middleware'); const router = express.Router(); @@ -35,7 +35,7 @@ router.post('/', middleware.checkToken, (req, res, next) => { uid, ...req.body, }); - var newAccessKey = security.randToken(28).concat(identical); + var newAccessKey = randToken(28).concat(identical); return accountManager .isExsitAccessKeyName(uid, friendlyName) .then((data) => { diff --git a/src/routes/auth.js b/src/routes/auth.js index c82a8483..8cebd0ca 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -1,14 +1,12 @@ import express from 'express'; import _ from 'lodash'; -import validator from 'validator'; import { logger } from 'kv-logger'; import jwt from 'jsonwebtoken'; import { config } from '../core/config'; import { AppError } from '../core/app-error'; import { accountManager } from '../core/services/account-manager'; - -var security = require('../core/utils/security'); +import { md5 } from '../core/utils/security'; const router = express.Router(); @@ -56,7 +54,7 @@ router.post('/login', (req, res, next) => { uid: users.id, }); return jwt.sign( - { uid: users.id, hash: security.md5(users.ack_code), expiredIn: 7200 }, + { uid: users.id, hash: md5(users.ack_code), expiredIn: 7200 }, tokenSecret, ); }) diff --git a/tests/api/users/users.test.js b/tests/api/users/users.test.js index 53d47bb2..22ce484d 100644 --- a/tests/api/users/users.test.js +++ b/tests/api/users/users.test.js @@ -3,13 +3,13 @@ const request = require('supertest')(app); const should = require('should'); const _ = require('lodash'); -const security = require('../../../bin/core/utils/security'); +const { md5 } = require('../../../bin/core/utils/security'); const { redisClient } = require('../../../bin/core/utils/connections'); describe('api/users/users.test.js', function () { var accountExist = 'lisong2010@gmail.com'; var account = '522539441@qq.com'; - var registerKey = `REGISTER_CODE_${security.md5(account)}`; + var registerKey = `REGISTER_CODE_${md5(account)}`; var password = '654321'; var newPassword = '123456'; From 62893158e62e56c232a24ef833f52657756f7d41 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 16 Feb 2022 18:14:50 +0800 Subject: [PATCH 180/347] refactor: move storage methods out of core/utils/common --- .eslintrc.js | 5 +- src/core/app-error.ts | 8 +- src/core/services/client-manager.ts | 2 +- src/core/services/package-manager.ts | 16 +- src/core/utils/common.js | 224 ------------------------ src/core/utils/storage.ts | 247 +++++++++++++++++++++++++++ 6 files changed, 268 insertions(+), 234 deletions(-) create mode 100644 src/core/utils/storage.ts diff --git a/.eslintrc.js b/.eslintrc.js index 15982061..17f297ae 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,7 +1,10 @@ module.exports = { extends: ['@shm-open/eslint-config-bundle'], rules: { + // temp disables - will be removed once we have all js files converted to ts '@typescript-eslint/no-var-requires': 'off', + 'import/no-unused-modules': 'off', + '@typescript-eslint/naming-convention': [ 'error', { @@ -28,7 +31,7 @@ module.exports = { }, { selector: 'objectLiteralProperty', - format: ['camelCase', 'snake_case', 'UPPER_CASE'], + format: ['camelCase', 'snake_case', 'UPPER_CASE', 'PascalCase'], }, ], }, diff --git a/src/core/app-error.ts b/src/core/app-error.ts index fb0cea2b..0d7b36f9 100644 --- a/src/core/app-error.ts +++ b/src/core/app-error.ts @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ export class AppError extends Error { - constructor(message) { - super(message); + constructor(message: string | Error) { + super(message instanceof Error ? message.message : message); this.name = 'AppError'; } @@ -9,7 +9,7 @@ export class AppError extends Error { } export class NotFound extends AppError { - constructor(message) { + constructor(message?: string | Error) { super(message || 'Not Found'); this.name = 'NotFoundError'; } @@ -18,7 +18,7 @@ export class NotFound extends AppError { } export class Unauthorized extends AppError { - constructor(message) { + constructor(message?: string | Error) { super(message || 'Unauthorized'); this.name = 'UnauthorizedError'; } diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index 2b9d4357..133d5e8f 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -195,7 +195,7 @@ class ClientManager { ) { rs.packageId = packageId; rs.targetBinaryRange = deploymentsVersions.app_version; - rs.downloadURL = common.getBlobDownloadUrl(_.get(packages, 'blob_url')); + rs.downloadURL = common.getBlobDownloadUrl(packages.blob_url); rs.downloadUrl = rs.downloadURL; rs.description = _.get(packages, 'description', ''); rs.isAvailable = !_.eq(packages.is_disabled, 1); diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index bbc961b2..4da0c380 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -29,6 +29,7 @@ import { import { sequelize } from '../utils/connections'; import { qetag } from '../utils/qetag'; import { randToken, uploadPackageType } from '../utils/security'; +import { uploadFileToStorage } from '../utils/storage'; const common = require('../utils/common'); const dataCenterManager = require('./datacenter-manager')(); @@ -116,7 +117,14 @@ class PackageManager { }); } - createPackage(deploymentId, appVersion, packageHash, manifestHash, blobHash, params) { + createPackage( + deploymentId, + appVersion, + packageHash, + manifestHash: string, + blobHash: string, + params, + ) { const releaseMethod = params.releaseMethod || RELEASE_METHOD_UPLOAD; const releaseUid = params.releaseUid || 0; const isMandatory = params.isMandatory || 0; @@ -273,7 +281,7 @@ class PackageManager { hotCodePushFile, ).then((data) => { return qetag(data.path).then((diffHash) => { - return common.uploadFileToStorage(diffHash, fileName).then(() => { + return uploadFileToStorage(diffHash, fileName).then(() => { const stats = fs.statSync(fileName); return PackagesDiff.create({ package_id: packageId, @@ -427,8 +435,8 @@ class PackageManager { }) .then((manifestHash) => { return Promise.all([ - common.uploadFileToStorage(manifestHash, manifestFile), - common.uploadFileToStorage(blobHash, filePath), + uploadFileToStorage(manifestHash, manifestFile), + uploadFileToStorage(blobHash, filePath), ]).then(() => [packageHash, manifestHash, blobHash]); }); }); diff --git a/src/core/utils/common.js b/src/core/utils/common.js index 48fe4b45..0c1d168e 100644 --- a/src/core/utils/common.js +++ b/src/core/utils/common.js @@ -3,15 +3,10 @@ import fsextra from 'fs-extra'; import extract from 'extract-zip'; import _ from 'lodash'; import validator from 'validator'; -import qiniu from 'qiniu'; import jschardet from 'jschardet'; -import path from 'path'; import util from 'util'; import fetch from 'node-fetch'; import { logger } from 'kv-logger'; -import AWS from 'aws-sdk'; -import COS from 'cos-nodejs-sdk-v5'; -import ALY from 'aliyun-sdk'; import { config } from '../config'; import { AppError } from '../app-error'; @@ -209,87 +204,6 @@ common.unzipFile = async function (zipFile, outputPath) { return outputPath; }; -common.getUploadTokenQiniu = function (mac, bucket, key) { - var options = { - scope: bucket + ':' + key, - }; - var putPolicy = new qiniu.rs.PutPolicy(options); - return putPolicy.uploadToken(mac); -}; - -common.uploadFileToStorage = function (key, filePath) { - var storageType = _.get(config, 'common.storageType'); - if (storageType === 'local') { - return common.uploadFileToLocal(key, filePath); - } else if (storageType === 's3') { - return common.uploadFileToS3(key, filePath); - } else if (storageType === 'oss') { - return common.uploadFileToOSS(key, filePath); - } else if (storageType === 'qiniu') { - return common.uploadFileToQiniu(key, filePath); - } else if (storageType === 'tencentcloud') { - return common.uploadFileToTencentCloud(key, filePath); - } - throw new AppError(`${storageType} storageType does not support.`); -}; - -common.uploadFileToLocal = function (key, filePath) { - return new Promise((resolve, reject) => { - var storageDir = _.get(config, 'local.storageDir'); - if (!storageDir) { - throw new AppError('please set config local storageDir'); - } - if (key.length < 3) { - logger.error(`generate key is too short, key value:${key}`); - throw new AppError('generate key is too short.'); - } - try { - logger.debug(`uploadFileToLocal check directory ${storageDir} fs.R_OK`); - fs.accessSync(storageDir, fs.W_OK); - logger.debug(`uploadFileToLocal directory ${storageDir} fs.R_OK is ok`); - } catch (e) { - logger.error(e); - throw new AppError(e.message); - } - var subDir = key.substr(0, 2).toLowerCase(); - var finalDir = path.join(storageDir, subDir); - var fileName = path.join(finalDir, key); - if (fs.existsSync(fileName)) { - return resolve(key); - } - var stats = fs.statSync(storageDir); - if (!stats.isDirectory()) { - var e = new AppError(`${storageDir} must be directory`); - logger.error(e); - throw e; - } - if (!fs.existsSync(`${finalDir}`)) { - fs.mkdirSync(`${finalDir}`); - logger.debug(`uploadFileToLocal mkdir:${finalDir}`); - } - try { - fs.accessSync(filePath, fs.R_OK); - } catch (e) { - logger.error(e); - throw new AppError(e.message); - } - stats = fs.statSync(filePath); - if (!stats.isFile()) { - var e = new AppError(`${filePath} must be file`); - logger.error(e); - throw e; - } - fsextra.copy(filePath, fileName, (err) => { - if (err) { - logger.error(new AppError(err.message)); - return reject(new AppError(err.message)); - } - logger.debug(`uploadFileToLocal copy file ${key} success.`); - resolve(key); - }); - }); -}; - common.getBlobDownloadUrl = function (blobUrl) { var fileName = blobUrl; var storageType = _.get(config, 'common.storageType'); @@ -305,144 +219,6 @@ common.getBlobDownloadUrl = function (blobUrl) { return `${downloadUrl}/${fileName}`; }; -common.uploadFileToQiniu = function (key, filePath) { - return new Promise((resolve, reject) => { - var accessKey = _.get(config, 'qiniu.accessKey'); - var secretKey = _.get(config, 'qiniu.secretKey'); - var bucket = _.get(config, 'qiniu.bucketName', ''); - var mac = new qiniu.auth.digest.Mac(accessKey, secretKey); - var conf = new qiniu.conf.Config(); - var bucketManager = new qiniu.rs.BucketManager(mac, conf); - bucketManager.stat(bucket, key, (respErr, respBody, respInfo) => { - if (respErr) { - logger.debug('uploadFileToQiniu file stat:', respErr); - return reject(new AppError(respErr.message)); - } - logger.debug('uploadFileToQiniu file stat respBody:', respBody); - logger.debug('uploadFileToQiniu file stat respInfo:', respInfo); - if (respInfo.statusCode == 200) { - resolve(respBody.hash); - } else { - try { - var uploadToken = common.getUploadTokenQiniu(mac, bucket, key); - } catch (e) { - return reject(new AppError(e.message)); - } - var formUploader = new qiniu.form_up.FormUploader(conf); - var putExtra = new qiniu.form_up.PutExtra(); - formUploader.putFile( - uploadToken, - key, - filePath, - putExtra, - (respErr, respBody, respInfo) => { - if (respErr) { - logger.error('uploadFileToQiniu putFile:', respErr); - // 上传失败, 处理返回代码 - return reject(new AppError(JSON.stringify(respErr))); - } else { - logger.debug('uploadFileToQiniu putFile respBody:', respBody); - logger.debug('uploadFileToQiniu putFile respInfo:', respInfo); - // 上传成功, 处理返回值 - if (respInfo.statusCode == 200) { - return resolve(respBody.hash); - } else { - return reject(new AppError(respBody.error)); - } - } - }, - ); - } - }); - }); -}; - -common.uploadFileToS3 = function (key, filePath) { - return new Promise((resolve, reject) => { - AWS.config.update({ - accessKeyId: _.get(config, 's3.accessKeyId'), - secretAccessKey: _.get(config, 's3.secretAccessKey'), - sessionToken: _.get(config, 's3.sessionToken'), - region: _.get(config, 's3.region'), - }); - var s3 = new AWS.S3({ - params: { Bucket: _.get(config, 's3.bucketName') }, - }); - fs.readFile(filePath, (err, data) => { - s3.upload( - { - Key: key, - Body: data, - ACL: 'public-read', - }, - (err, response) => { - if (err) { - reject(new AppError(JSON.stringify(err))); - } else { - resolve(response.ETag); - } - }, - ); - }); - }); -}; - -common.uploadFileToOSS = function (key, filePath) { - var ossStream = require('aliyun-oss-upload-stream')( - new ALY.OSS({ - accessKeyId: _.get(config, 'oss.accessKeyId'), - secretAccessKey: _.get(config, 'oss.secretAccessKey'), - endpoint: _.get(config, 'oss.endpoint'), - apiVersion: '2013-10-15', - }), - ); - if (!_.isEmpty(_.get(config, 'oss.prefix', ''))) { - key = `${_.get(config, 'oss.prefix')}/${key}`; - } - var upload = ossStream.upload({ - Bucket: _.get(config, 'oss.bucketName'), - Key: key, - }); - - return new Promise((resolve, reject) => { - upload.on('error', (error) => { - logger.debug('uploadFileToOSS', error); - reject(error); - }); - - upload.on('uploaded', (details) => { - logger.debug('uploadFileToOSS', details); - resolve(details.ETag); - }); - fs.createReadStream(filePath).pipe(upload); - }); -}; - -common.uploadFileToTencentCloud = function (key, filePath) { - return new Promise((resolve, reject) => { - var cosIn = new COS({ - SecretId: _.get(config, 'tencentcloud.accessKeyId'), - SecretKey: _.get(config, 'tencentcloud.secretAccessKey'), - }); - cosIn.sliceUploadFile( - { - Bucket: _.get(config, 'tencentcloud.bucketName'), - Region: _.get(config, 'tencentcloud.region'), - Key: key, - FilePath: filePath, - }, - function (err, data) { - logger.debug('uploadFileToTencentCloud', { err, data }); - if (err) { - reject(new AppError(JSON.stringify(err))); - } else { - resolve(data.Key); - } - }, - ); - }); -}; - common.diffCollectionsSync = function (collection1, collection2) { var diffFiles = []; var collection1Only = []; diff --git a/src/core/utils/storage.ts b/src/core/utils/storage.ts new file mode 100644 index 00000000..93dff88f --- /dev/null +++ b/src/core/utils/storage.ts @@ -0,0 +1,247 @@ +import fs from 'fs'; +import path from 'path'; +import ALYOSSStream from 'aliyun-oss-upload-stream'; +import ALY from 'aliyun-sdk'; +import AWS from 'aws-sdk'; +import COS from 'cos-nodejs-sdk-v5'; +import fsextra from 'fs-extra'; +import { logger } from 'kv-logger'; +import _ from 'lodash'; +import qiniu from 'qiniu'; + +import { AppError } from '../app-error'; +import { config } from '../config'; + +function uploadFileToLocal(key: string, filePath: string): Promise { + return new Promise((resolve, reject) => { + logger.info(`try uploadFileToLocal`, { + key, + }); + + const storageDir = _.get(config, 'local.storageDir'); + if (!storageDir) { + throw new AppError('please set config local storageDir'); + } + if (key.length < 3) { + logger.error(`generate key is too short, key value:${key}`); + throw new AppError('generate key is too short.'); + } + try { + logger.debug(`uploadFileToLocal check directory ${storageDir} fs.W_OK`); + fs.accessSync(storageDir, fs.constants.W_OK); + logger.debug(`uploadFileToLocal directory ${storageDir} fs.W_OK is ok`); + } catch (err) { + throw new AppError(err); + } + const subDir = key.substring(0, 2).toLowerCase(); + const finalDir = path.join(storageDir, subDir); + const fileName = path.join(finalDir, key); + if (fs.existsSync(fileName)) { + logger.info(`uploadFileToLocal file exists, skip copy`, { + key, + }); + + resolve(); + return; + } + let stats = fs.statSync(storageDir); + if (!stats.isDirectory()) { + throw new AppError(`${storageDir} must be directory`); + } + if (!fs.existsSync(`${finalDir}`)) { + fs.mkdirSync(`${finalDir}`); + logger.info(`uploadFileToLocal mkdir:${finalDir}`, { + key, + }); + } + try { + fs.accessSync(filePath, fs.constants.R_OK); + } catch (err) { + throw new AppError(err); + } + stats = fs.statSync(filePath); + if (!stats.isFile()) { + throw new AppError(`${filePath} must be file`); + } + fsextra.copy(filePath, fileName, (err) => { + if (err) { + reject(new AppError(err)); + return; + } + logger.info(`uploadFileToLocal copy file success.`, { + key, + }); + resolve(); + }); + }); +} + +function uploadFileToS3(key: string, filePath: string): Promise { + return new Promise((resolve, reject) => { + logger.info('try uploadFileToS3', { key }); + AWS.config.update({ + accessKeyId: _.get(config, 's3.accessKeyId'), + secretAccessKey: _.get(config, 's3.secretAccessKey'), + sessionToken: _.get(config, 's3.sessionToken'), + region: _.get(config, 's3.region'), + }); + const s3 = new AWS.S3(); + fs.readFile(filePath, (err, data) => { + if (err) { + reject(new AppError(err)); + return; + } + s3.upload( + { + Key: key, + Body: data, + ACL: 'public-read', + Bucket: _.get(config, 's3.bucketName'), + }, + (error: Error) => { + if (error) { + reject(new AppError(error)); + } else { + logger.info('uploadFileToS3 success', { key }); + resolve(); + } + }, + ); + }); + }); +} + +function uploadFileToOSS(key: string, filePath: string): Promise { + logger.info('try uploadFileToOSS', { key }); + const ossStream = ALYOSSStream( + new ALY.OSS({ + accessKeyId: _.get(config, 'oss.accessKeyId'), + secretAccessKey: _.get(config, 'oss.secretAccessKey'), + endpoint: _.get(config, 'oss.endpoint'), + apiVersion: '2013-10-15', + }), + ); + if (!_.isEmpty(_.get(config, 'oss.prefix', ''))) { + // eslint-disable-next-line no-param-reassign + key = `${_.get(config, 'oss.prefix')}/${key}`; + } + const upload = ossStream.upload({ + Bucket: _.get(config, 'oss.bucketName'), + Key: key, + }); + + return new Promise((resolve, reject) => { + upload.on('error', (error) => { + reject(new AppError(JSON.stringify(error))); + }); + + upload.on('uploaded', () => { + logger.info('uploadFileToOSS success', { key }); + resolve(); + }); + fs.createReadStream(filePath).pipe(upload); + }); +} + +function getUploadTokenQiniu(mac: qiniu.auth.digest.Mac, bucket: string, key: string) { + const options = { + scope: `${bucket}:${key}`, + }; + const putPolicy = new qiniu.rs.PutPolicy(options); + return putPolicy.uploadToken(mac); +} + +function uploadFileToQiniu(key: string, filePath: string): Promise { + return new Promise((resolve, reject) => { + logger.info('try uploadFileToQiniu', { key }); + const accessKey = _.get(config, 'qiniu.accessKey'); + const secretKey = _.get(config, 'qiniu.secretKey'); + const bucket = _.get(config, 'qiniu.bucketName', ''); + const mac = new qiniu.auth.digest.Mac(accessKey, secretKey); + const conf = new qiniu.conf.Config(); + const bucketManager = new qiniu.rs.BucketManager(mac, conf); + bucketManager.stat(bucket, key, (respErr, respBody, respInfo) => { + if (respErr) { + reject(new AppError(respErr.message)); + return; + } + if (respInfo.statusCode === 200) { + logger.info('uploadFileToQiniu file exists, skip upload', { key }); + resolve(); + return; + } + + let uploadToken: string; + try { + uploadToken = getUploadTokenQiniu(mac, bucket, key); + } catch (e) { + reject(new AppError(e.message)); + return; + } + const formUploader = new qiniu.form_up.FormUploader(conf); + const putExtra = new qiniu.form_up.PutExtra(); + formUploader.putFile( + uploadToken, + key, + filePath, + putExtra, + (resErr, resBody, resInfo) => { + if (resErr) { + // 上传失败, 处理返回代码 + return reject(new AppError(resErr)); + } + // 上传成功, 处理返回值 + if (resInfo.statusCode === 200) { + logger.info('uploadFileToQiniu success', { key }); + return resolve(); + } + return reject(new AppError(resBody.error)); + }, + ); + }); + }); +} + +function uploadFileToTencentCloud(key: string, filePath: string): Promise { + return new Promise((resolve, reject) => { + logger.info('try uploadFileToTencentCloud', { key }); + const cosIn = new COS({ + SecretId: _.get(config, 'tencentcloud.accessKeyId'), + SecretKey: _.get(config, 'tencentcloud.secretAccessKey'), + }); + cosIn.sliceUploadFile( + { + Bucket: _.get(config, 'tencentcloud.bucketName'), + Region: _.get(config, 'tencentcloud.region'), + Key: key, + FilePath: filePath, + }, + (err) => { + if (err) { + reject(new AppError(err.message)); + } else { + logger.info('uploadFileToTencentCloud success', { key }); + resolve(); + } + }, + ); + }); +} + +export function uploadFileToStorage(key: string, filePath: string): Promise { + const storageType = _.get(config, 'common.storageType'); + switch (storageType) { + case 'local': + return uploadFileToLocal(key, filePath); + case 's3': + return uploadFileToS3(key, filePath); + case 'oss': + return uploadFileToOSS(key, filePath); + case 'qiniu': + return uploadFileToQiniu(key, filePath); + case 'tencentcloud': + return uploadFileToTencentCloud(key, filePath); + default: + throw new AppError(`${storageType} storageType does not support.`); + } +} From 082913311262a1d360043426a4c6f62eb22a0e00 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 16 Feb 2022 20:39:05 +0800 Subject: [PATCH 181/347] chore: update package-lock --- package-lock.json | 2043 +++++++++++++++++---------------------------- src/www.ts | 2 +- 2 files changed, 783 insertions(+), 1262 deletions(-) diff --git a/package-lock.json b/package-lock.json index 03451eed..68922241 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,18 +5,18 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.7" } }, "@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", "dev": true, "requires": { "@babel/types": "^7.17.0", @@ -24,21 +24,11 @@ "source-map": "^0.5.0" }, "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true - }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } } } }, @@ -49,24 +39,6 @@ "dev": true, "requires": { "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-function-name": { @@ -78,24 +50,6 @@ "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-get-function-arity": { @@ -105,24 +59,6 @@ "dev": true, "requires": { "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-hoist-variables": { @@ -132,24 +68,6 @@ "dev": true, "requires": { "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-split-export-declaration": { @@ -159,46 +77,28 @@ "dev": true, "requires": { "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" }, "@babel/runtime": { "version": "7.17.2", @@ -228,120 +128,49 @@ "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", - "dev": true - }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", + "@babel/generator": "^7.17.3", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.0", + "@babel/parser": "^7.17.3", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "ms": "2.1.2" } }, - "@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true - }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } } } }, "@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "requires": { - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, @@ -362,6 +191,27 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "globals": { "version": "13.12.1", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", @@ -377,10 +227,16 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -394,6 +250,23 @@ "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "@humanwhocodes/object-schema": { @@ -677,9 +550,9 @@ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, "@types/node": { - "version": "9.4.7", - "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-9.4.7.tgz", - "integrity": "sha1-V9gc2YcZ3yyd4Rjy1fOxEg3NcnU=" + "version": "17.0.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", + "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" }, "@types/node-fetch": { "version": "2.6.1", @@ -791,24 +664,102 @@ "tsutils": "^3.21.0" }, "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "ms": "2.1.2" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, "@typescript-eslint/experimental-utils": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.11.0.tgz", - "integrity": "sha512-EPvC/bU2n1LKtzKWP1AjGWkp7r8tJ8giVlZHIODo6q7SAd6J+/9vjtEKHK2G/Qp+D2IGPsQge+oadDR3CZcFtQ==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.12.0.tgz", + "integrity": "sha512-iFVADWH2CmiDF+E9kFK2r474BO2JILDKw1NVD5ytqHrM3ezsfdu5uo6B+77DH0suM7iUC/yOayHNziuiI9BPbQ==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.11.0" + "@typescript-eslint/utils": "5.12.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.0.tgz", + "integrity": "sha512-GAMobtIJI8FGf1sLlUWNUm2IOkIjvn7laFWyRx7CLrv6nLBI7su+B7lbStqVlK5NdLvHRFiJo2HhiDF7Ki01WQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.12.0", + "@typescript-eslint/visitor-keys": "5.12.0" + } + }, + "@typescript-eslint/types": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.0.tgz", + "integrity": "sha512-JowqbwPf93nvf8fZn5XrPGFBdIK8+yx5UEGs2QFAYFI8IWYfrzz+6zqlurGr2ctShMaJxqwsqmra3WXWjH1nRQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.0.tgz", + "integrity": "sha512-Dd9gVeOqt38QHR0BEA8oRaT65WYqPYbIc5tRFQPkfLquVEFPD1HAtbZT98TLBkEcCkvwDYOAvuSvAD9DnQhMfQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.12.0", + "@typescript-eslint/visitor-keys": "5.12.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.0.tgz", + "integrity": "sha512-k4J2WovnMPGI4PzKgDtQdNrCnmBHpMUFy21qjX2CoPdoBcSBIMvVBr9P2YDP8jOqZOeK3ThOL6VO/sy6jtnvzw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.12.0", + "@typescript-eslint/types": "5.12.0", + "@typescript-eslint/typescript-estree": "5.12.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.0.tgz", + "integrity": "sha512-cFwTlgnMV6TgezQynx2c/4/tx9Tufbuo9LPzmWqyRC3QC4qTGkAG1C6pBr0/4I10PAI/FlYunI3vJjIcu+ZHMg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.12.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "@typescript-eslint/parser": { @@ -821,6 +772,23 @@ "@typescript-eslint/types": "5.11.0", "@typescript-eslint/typescript-estree": "5.11.0", "debug": "^4.3.2" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "@typescript-eslint/scope-manager": { @@ -842,6 +810,23 @@ "@typescript-eslint/utils": "5.11.0", "debug": "^4.3.2", "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "@typescript-eslint/types": { @@ -865,23 +850,20 @@ "tsutils": "^3.21.0" }, "dependencies": { - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "ms": "2.1.2" } }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, @@ -926,27 +908,12 @@ } }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "dependencies": { - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { - "mime-db": "1.51.0" - } - } + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { @@ -960,6 +927,11 @@ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, "add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", @@ -980,9 +952,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -995,9 +967,9 @@ } }, "agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz", + "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==", "requires": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -1005,9 +977,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -1020,13 +992,13 @@ } }, "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", + "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", "requires": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, @@ -1036,29 +1008,11 @@ "integrity": "sha512-4CjkH20If1lhR5CGtqkrVg3bbOtFEG80X9v6jDOIUhbzzbB+UzPBGy8GQhUNVZ0yvMHdMpawCOcy5ydGMsagGQ==", "requires": { "ajv": "^7.0.0" - }, - "dependencies": { - "ajv": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", - "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } } }, "aliyun-oss-upload-stream": { "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/aliyun-oss-upload-stream/download/aliyun-oss-upload-stream-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/aliyun-oss-upload-stream/-/aliyun-oss-upload-stream-1.3.0.tgz", "integrity": "sha1-ODAbGfA0QGhDjrY5d6DNldYEcMA=" }, "aliyun-sdk": { @@ -1073,12 +1027,6 @@ "xmlbuilder": "^13.0.2" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "optional": true - }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -1086,17 +1034,16 @@ "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "any-promise": { @@ -1227,7 +1174,7 @@ }, "asynckit": { "version": "0.4.0", - "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atomically": { @@ -1256,11 +1203,6 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", @@ -1330,9 +1272,9 @@ } }, "balanced-match": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -1369,12 +1311,6 @@ "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", "requires": { "readable-stream": "^3.4.0" - }, - "dependencies": { - "safe-buffer": { - "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "body-parser": { @@ -1392,70 +1328,12 @@ "qs": "6.9.6", "raw-body": "2.4.2", "type-is": "~1.6.18" - }, - "dependencies": { - "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" - }, - "raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", - "requires": { - "bytes": "3.1.1", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - } } }, "brace-expansion": { "version": "1.1.11", - "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", - "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1488,7 +1366,7 @@ }, "buffer-crc32": { "version": "0.2.13", - "resolved": "http://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, "buffer-equal-constant-time": { @@ -1503,9 +1381,9 @@ "dev": true }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" }, "call-bind": { "version": "1.0.2", @@ -1523,9 +1401,9 @@ "dev": true }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "camelcase-keys": { @@ -1537,6 +1415,14 @@ "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } } }, "caseless": { @@ -1553,6 +1439,32 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } } }, "character-parser": { @@ -1595,19 +1507,17 @@ "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==" }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "combined-stream": { "version": "1.0.8", @@ -1646,7 +1556,7 @@ }, "concat-map": { "version": "0.0.1", - "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { @@ -1677,15 +1587,6 @@ "yargs": "^16.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1701,27 +1602,12 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1751,6 +1637,12 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, @@ -1770,32 +1662,6 @@ "onetime": "^5.1.2", "pkg-up": "^3.1.0", "semver": "^7.3.4" - }, - "dependencies": { - "ajv": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", - "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "confusing-browser-globals": { @@ -1819,19 +1685,12 @@ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "content-type": { "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", - "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "conventional-changelog": { "version": "3.1.24", @@ -1972,14 +1831,14 @@ "dev": true }, "conventional-changelog-writer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", - "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, "requires": { "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", - "handlebars": "^4.7.6", + "handlebars": "^4.7.7", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.15", "meow": "^8.0.0", @@ -1993,10 +1852,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -2011,9 +1866,9 @@ } }, "conventional-commits-parser": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.2.tgz", - "integrity": "sha512-Jr9KAKgqAkwXMRHjxDwO/zOCDKod1XdAESHAGuJX38iZ7ZzVti/tvVoysO0suMsdAObp9NQ2rHSsSbnAqZ5f5g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "requires": { "JSONStream": "^1.0.4", @@ -2052,18 +1907,11 @@ "requires": { "cookie": "0.4.1", "cookie-signature": "1.0.6" - }, - "dependencies": { - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - } } }, "cookie-signature": { "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "cookiejar": { @@ -2085,7 +1933,7 @@ }, "core-util-is": { "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cos-nodejs-sdk-v5": { @@ -2101,22 +1949,9 @@ }, "dependencies": { "@types/node": { - "version": "14.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.3.tgz", - "integrity": "sha512-GtTH2crF4MtOIrrAa+jgTV9JX/PfoUCYr6MiZw7O/dkZu5b6gm5dc1nAL0jwGo4ortSBBtGyeVaxdC8X6V+pLg==" - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { - "mime-db": "1.51.0" - } + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "xml2js": { "version": "0.4.23", @@ -2196,24 +2031,17 @@ } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "ms": "2.0.0" } }, "decamelize": { - "version": "1.2.0", - "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, "decamelize-keys": { @@ -2226,6 +2054,12 @@ "map-obj": "^1.0.0" }, "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -2235,9 +2069,9 @@ } }, "deep-is": { - "version": "0.1.3", - "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "default-user-agent": { "version": "1.0.0", @@ -2257,35 +2091,34 @@ } }, "degenerator": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", - "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.1.tgz", + "integrity": "sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==", "requires": { "ast-types": "^0.13.2", "escodegen": "^1.8.1", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } + "esprima": "^4.0.0", + "vm2": "^3.9.3" } }, "delayed-stream": { "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" + }, "depd": { "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "destroy": { "version": "1.0.4", - "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "detect-indent": { @@ -2340,14 +2173,6 @@ "dev": true, "requires": { "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } } }, "doctrine": { @@ -2406,7 +2231,7 @@ }, "ee-first": { "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "emoji-regex": { @@ -2416,7 +2241,7 @@ }, "encodeurl": { "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "end-of-stream": { @@ -2492,31 +2317,20 @@ }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "escodegen": { - "version": "1.8.1", - "resolved": "http://registry.npm.taobao.org/escodegen/download/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", + "esprima": "^4.0.1", + "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", - "source-map": "~0.2.0" - }, - "dependencies": { - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "source-map": "~0.6.1" } }, "eslint": { @@ -2562,19 +2376,16 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "chalk": { @@ -2587,21 +2398,15 @@ "supports-color": "^7.1.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "color-name": "~1.1.4" + "ms": "2.1.2" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2631,17 +2436,6 @@ "dev": true, "requires": { "is-glob": "^4.0.3" - }, - "dependencies": { - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } } }, "globals": { @@ -2659,6 +2453,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2669,6 +2469,12 @@ "type-check": "~0.4.0" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -2689,15 +2495,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2715,12 +2512,6 @@ "requires": { "prelude-ls": "^1.2.1" } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true } } }, @@ -2788,6 +2579,23 @@ "is-glob": "^4.0.1", "resolve": "^1.20.0", "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "eslint-module-utils": { @@ -2892,15 +2700,6 @@ "tsconfig-paths": "^3.12.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2909,24 +2708,6 @@ "requires": { "esutils": "^2.0.2" } - }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } } } }, @@ -3061,14 +2842,6 @@ "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } } }, "eslint-utils": { @@ -3114,9 +2887,9 @@ } }, "esprima": { - "version": "2.7.3", - "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.4.0", @@ -3153,14 +2926,14 @@ } }, "estraverse": { - "version": "1.9.3", - "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { - "version": "2.0.2", - "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -3207,86 +2980,6 @@ "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", - "requires": { - "bytes": "3.1.1", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" - } - }, - "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" - }, - "raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", - "requires": { - "bytes": "3.1.1", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - } } }, "extend": { @@ -3314,9 +3007,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -3358,13 +3051,13 @@ } }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { "version": "2.0.6", - "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fast-safe-stringify": { @@ -3434,22 +3127,12 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } } }, "find-up": { "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { "locate-path": "^3.0.0" } @@ -3520,9 +3203,9 @@ }, "dependencies": { "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" } } }, @@ -3553,27 +3236,6 @@ "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } } }, "fs.realpath": { @@ -3623,8 +3285,8 @@ }, "function-bind": { "version": "1.1.1", - "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -3687,6 +3349,12 @@ "util-deprecate": "~1.0.1" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -3720,6 +3388,12 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, @@ -3755,9 +3429,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -3772,15 +3446,23 @@ "universalify": "^0.1.0" } }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" } } }, @@ -3793,9 +3475,9 @@ } }, "git-raw-commits": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", - "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "requires": { "dargs": "^7.0.0", @@ -3886,9 +3568,9 @@ } }, "graceful-fs": { - "version": "4.1.11", - "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "growl": { "version": "1.10.5", @@ -3907,14 +3589,6 @@ "source-map": "^0.6.1", "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "har-schema": { @@ -3929,6 +3603,24 @@ "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + } } }, "hard-rejection": { @@ -3987,24 +3679,24 @@ "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" }, "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" } }, "http-proxy-agent": { @@ -4018,9 +3710,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -4052,9 +3744,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -4122,7 +3814,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { @@ -4131,9 +3823,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", @@ -4203,9 +3895,9 @@ "dev": true }, "is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "requires": { "has": "^1.0.3" } @@ -4245,9 +3937,9 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -4280,15 +3972,15 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "is-promise": { - "version": "2.1.0", - "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "is-property": { "version": "1.0.2", @@ -4359,12 +4051,12 @@ }, "isarray": { "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, @@ -4432,9 +4124,9 @@ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "json-schema-typed": { "version": "7.0.3", @@ -4449,7 +4141,7 @@ }, "json-stringify-safe": { "version": "5.0.1", - "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { @@ -4462,11 +4154,12 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "jsonparse": { @@ -4581,7 +4274,7 @@ }, "levn": { "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { "prelude-ls": "~1.1.2", @@ -4589,9 +4282,9 @@ } }, "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "load-json-file": { @@ -4626,8 +4319,8 @@ }, "locate-path": { "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -4695,15 +4388,6 @@ "is-unicode-supported": "^0.1.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -4714,21 +4398,6 @@ "supports-color": "^7.1.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4791,7 +4460,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "meow": { @@ -4838,15 +4507,6 @@ "p-locate": "^4.1.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -4912,6 +4572,24 @@ "dev": true } } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, @@ -4928,7 +4606,7 @@ }, "methods": { "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { @@ -4947,16 +4625,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.33.0", - "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.33.0.tgz", - "integrity": "sha1-o0kgUKXLm2NFBUHjnZeI0icng9s=" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.18", - "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.18.tgz", - "integrity": "sha1-bzI/YKg9ERRvgx/xH9ZuL+VQO7g=", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.51.0" } }, "mimic-fn": { @@ -4972,8 +4650,8 @@ }, "minimatch": { "version": "3.0.4", - "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" } @@ -4992,6 +4670,14 @@ "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } } }, "mkdirp": { @@ -5165,7 +4851,7 @@ }, "ms": { "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mysql2": { @@ -5183,11 +4869,6 @@ "sqlstring": "^2.3.2" }, "dependencies": { - "denque": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", - "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" - }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -5245,9 +4926,9 @@ "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { "version": "2.6.2", @@ -5274,16 +4955,6 @@ "integrity": "sha1-icFSr4itKIF/ANiRyZBFHV1xLqg=", "requires": { "debug": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } } }, "nodemailer": { @@ -5301,17 +4972,6 @@ "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "normalize-path": { @@ -5337,9 +4997,9 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true }, "object-keys": { @@ -5405,7 +5065,7 @@ }, "on-finished": { "version": "2.3.0", - "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "requires": { "ee-first": "1.1.1" @@ -5413,7 +5073,7 @@ }, "once": { "version": "1.4.0", - "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { "wrappy": "1" @@ -5435,16 +5095,16 @@ } }, "optionator": { - "version": "0.8.2", - "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, "os-name": { @@ -5465,30 +5125,30 @@ } }, "p-limit": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-2.0.0.tgz", - "integrity": "sha1-5iTtVO6MRgp3izyfNnBJb/ileuw=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "requires": { "p-limit": "^2.0.0" } }, "p-try": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-2.0.0.tgz", - "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pac-proxy-agent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz", - "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", + "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", "requires": { "@tootallnate/once": "1", "agent-base": "6", @@ -5496,15 +5156,15 @@ "get-uri": "3", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "5", - "pac-resolver": "^4.1.0", + "pac-resolver": "^5.0.0", "raw-body": "^2.2.0", "socks-proxy-agent": "5" }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -5517,11 +5177,11 @@ } }, "pac-resolver": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", - "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz", + "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", "requires": { - "degenerator": "^2.2.0", + "degenerator": "^3.0.1", "ip": "^1.1.5", "netmask": "^2.0.1" } @@ -5554,12 +5214,12 @@ }, "path-exists": { "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -5580,21 +5240,10 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pause-stream": { "version": "0.0.11", @@ -5620,9 +5269,9 @@ "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pify": { @@ -5646,7 +5295,7 @@ }, "prelude-ls": { "version": "1.1.2", - "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { @@ -5707,13 +5356,6 @@ "@types/long": "^4.0.1", "@types/node": ">=13.7.0", "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "16.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.8.tgz", - "integrity": "sha512-hmT5gfpRkkHr7DZZHMf3jBe/zNcVGN+jXSL2f8nAsYfBPxQFToKwQlS/zES4Sjp488Bi73i+p6bvrNRRGU0x9Q==" - } } }, "proxy-addr": { @@ -5726,24 +5368,24 @@ } }, "proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz", - "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", + "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", "requires": { "agent-base": "^6.0.0", "debug": "4", "http-proxy-agent": "^4.0.0", "https-proxy-agent": "^5.0.0", "lru-cache": "^5.1.1", - "pac-proxy-agent": "^4.1.0", + "pac-proxy-agent": "^5.0.0", "proxy-from-env": "^1.0.0", "socks-proxy-agent": "^5.0.0" }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -5933,16 +5575,16 @@ }, "dependencies": { "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" } } }, "qs": { - "version": "6.5.1", - "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", - "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" }, "querystring": { "version": "0.2.0", @@ -5981,12 +5623,12 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -6025,6 +5667,27 @@ "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -6104,8 +5767,8 @@ }, "recursive-readdir": { "version": "2.2.2", - "resolved": "http://registry.npm.taobao.org/recursive-readdir/download/recursive-readdir-2.2.2.tgz", - "integrity": "sha1-mUb7MnThYo3m42svZxSVO0hFCU8=", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", "requires": { "minimatch": "3.0.4" } @@ -6195,34 +5858,16 @@ "uuid": "^3.3.2" }, "dependencies": { - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { - "mime-db": "1.51.0" - } - }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" } } }, "require-directory": { "version": "2.1.1", - "resolved": "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-from-string": { @@ -6231,12 +5876,13 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-from": { @@ -6292,9 +5938,9 @@ } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", - "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", @@ -6303,13 +5949,16 @@ }, "sax": { "version": "0.6.1", - "resolved": "http://registry.npm.taobao.org/sax/download/sax-0.6.1.tgz", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=" }, "semver": { - "version": "5.5.0", - "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz", - "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=" + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } }, "send": { "version": "0.17.2", @@ -6331,52 +5980,10 @@ "statuses": "~1.5.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" } } }, @@ -6407,14 +6014,19 @@ "wkx": "^0.5.0" }, "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { - "lru-cache": "^6.0.0" + "ms": "2.1.2" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -6448,9 +6060,9 @@ } }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "shebang-command": { "version": "2.0.0", @@ -6543,12 +6155,12 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "requires": { "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "smart-buffer": "^4.2.0" } }, "socks-proxy-agent": { @@ -6562,9 +6174,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -6577,10 +6189,9 @@ } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "spawn-command": { "version": "0.0.2-1", @@ -6615,9 +6226,9 @@ } }, "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "split": { @@ -6644,9 +6255,9 @@ "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==" }, "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -6725,15 +6336,6 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -6748,6 +6350,12 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, @@ -6757,13 +6365,13 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "string.prototype.matchall": { @@ -6808,13 +6416,6 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "stringify-package": { @@ -6824,11 +6425,11 @@ "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -6853,9 +6454,9 @@ "dev": true }, "superagent": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.0.tgz", - "integrity": "sha512-hbogIdmfjWtAkTfLlpoObeWb5phVJ95JFSkILCTCHoCG1U7s4XnY3WQ5j9C82YaxqLnMMliuFfngI+3liQ12ng==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.1.tgz", + "integrity": "sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==", "dev": true, "requires": { "component-emitter": "^1.3.0", @@ -6911,15 +6512,6 @@ "requires": { "side-channel": "^1.0.4" } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -6935,7 +6527,7 @@ }, "supervisor": { "version": "0.12.0", - "resolved": "http://registry.npm.taobao.org/supervisor/download/supervisor-0.12.0.tgz", + "resolved": "https://registry.npmjs.org/supervisor/-/supervisor-0.12.0.tgz", "integrity": "sha1-3n5jNwFbKRhRwQ81OMSn8EkX7ME=", "dev": true }, @@ -6948,6 +6540,11 @@ "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -6978,7 +6575,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { @@ -7005,9 +6602,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "token-stream": { "version": "1.0.0", @@ -7088,7 +6685,7 @@ }, "tunnel-agent": { "version": "0.6.0", - "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { "safe-buffer": "^5.0.1" @@ -7101,16 +6698,16 @@ }, "type-check": { "version": "0.3.2", - "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { "prelude-ls": "~1.1.2" } }, "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { @@ -7120,21 +6717,6 @@ "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" - }, - "dependencies": { - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" - }, - "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "requires": { - "mime-db": "1.49.0" - } - } } }, "typedarray": { @@ -7150,9 +6732,9 @@ "dev": true }, "uglify-js": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", - "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.1.tgz", + "integrity": "sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==", "dev": true, "optional": true }, @@ -7177,13 +6759,13 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "unpipe": { "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "uri-js": { @@ -7211,9 +6793,9 @@ } }, "urllib": { - "version": "2.37.3", - "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.37.3.tgz", - "integrity": "sha512-jGfi6qi23KvN3u3WizRxeU/yWVoh0Ml7c4yfmeRKVfGESMXYfNcQCPgeHRC1w1OMstVa9MXyIUYz3OLj+pWAMA==", + "version": "2.38.0", + "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.38.0.tgz", + "integrity": "sha512-8nim/hlS5GXtWe2BJ6usPimKx5VE3nenXgcG26ip5Ru+MKPddINH8uLpZ948n6ADhlus6A0AYj8xTYNmGQi8yA==", "requires": { "any-promise": "^1.3.0", "content-type": "^1.0.2", @@ -7225,26 +6807,16 @@ "humanize-ms": "^1.2.0", "iconv-lite": "^0.4.15", "ip": "^1.1.5", - "proxy-agent": "^4.0.1", + "proxy-agent": "^5.0.0", "pump": "^3.0.0", "qs": "^6.4.0", "statuses": "^1.3.1", "utility": "^1.16.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } } }, "util-deprecate": { "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utility": { @@ -7265,9 +6837,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "v8-compile-cache": { "version": "2.3.0", @@ -7305,6 +6877,22 @@ "extsprintf": "^1.2.0" } }, + "vm2": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.7.tgz", + "integrity": "sha512-g/GZ7V0Mlmch3eDVOATvAXr1GsJNg6kQ5PjvYy3HbJMCRn5slNbo/u73Uy7r5yUej1cRa3ZjtoVwcWSQuQ/fow==", + "requires": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "dependencies": { + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + } + } + }, "void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -7352,6 +6940,13 @@ "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", "requires": { "semver": "^5.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "with": { @@ -7376,13 +6971,13 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true }, "workerpool": { "version": "6.2.0", @@ -7398,34 +6993,11 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } } }, "wrappy": { "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "xml2js": { @@ -7475,43 +7047,12 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" - } } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" }, "yargs-unparser": { "version": "2.0.0", @@ -7523,26 +7064,6 @@ "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } } }, "yauzl": { diff --git a/src/www.ts b/src/www.ts index e9828a63..c5cf8fcd 100755 --- a/src/www.ts +++ b/src/www.ts @@ -77,7 +77,7 @@ Versions.findOne({ where: { type: 1 } }) server.on('listening', () => { const addr = server.address(); - logger.info('server is listening on ', addr); + logger.info(`server is listening on ${addr}`); }); }) .catch((e) => { From 7459ab5070bd5de377e28d592fd43d2758dfd783 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 16 Feb 2022 20:45:40 +0800 Subject: [PATCH 182/347] refactor: remove unused jschardet package --- package-lock.json | 5 ----- package.json | 1 - src/core/utils/common.js | 17 ----------------- 3 files changed, 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index 68922241..989d6344 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4095,11 +4095,6 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, - "jschardet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.0.0.tgz", - "integrity": "sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ==" - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", diff --git a/package.json b/package.json index 5db3f695..7880fe27 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,6 @@ "formidable": "2.0.1", "fs-extra": "10.0.0", "helmet": "5.0.2", - "jschardet": "3.0.0", "jsonwebtoken": "8.5.1", "kv-logger": "0.5.2", "lodash": "4.17.21", diff --git a/src/core/utils/common.js b/src/core/utils/common.js index 0c1d168e..fe02d64f 100644 --- a/src/core/utils/common.js +++ b/src/core/utils/common.js @@ -3,7 +3,6 @@ import fsextra from 'fs-extra'; import extract from 'extract-zip'; import _ from 'lodash'; import validator from 'validator'; -import jschardet from 'jschardet'; import util from 'util'; import fetch from 'node-fetch'; import { logger } from 'kv-logger'; @@ -16,22 +15,6 @@ const streamPipeline = util.promisify(require('stream').pipeline); var common = {}; module.exports = common; -common.detectIsTextFile = function (filePath) { - var fd = fs.openSync(filePath, 'r'); - var buffer = Buffer.alloc(4096); - fs.readSync(fd, buffer, 0, 4096, 0); - fs.closeSync(fd); - var rs = jschardet.detect(buffer); - logger.debug('detectIsTextFile:', { - filePath, - rs, - }); - if (rs.confidence == 1) { - return true; - } - return false; -}; - common.parseVersion = function (versionNo) { var version = '0'; var data = null; From ea1218b368519dd7aaa3828ff623eb11835e0dd8 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 17 Feb 2022 09:21:27 +0800 Subject: [PATCH 183/347] chore: increase the test timeout to reduce false test failure --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e031ea46..3ae52091 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ VERSION := $(shell node -p "require('./package.json').version") test: @echo "\nRunning integration tests..." @mocha tests/api/init --exit - @mocha tests/api/users tests/api/auth tests/api/account tests/api/accessKeys tests/api/apps tests/api/index --exit --recursive --timeout 15000 + @mocha tests/api/users tests/api/auth tests/api/account tests/api/accessKeys tests/api/apps tests/api/index --exit --recursive --timeout 30000 .PHONY: release-docker release-docker: From 915fd25fedff2246d93c051bc7a56db52cbd61b7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 17 Feb 2022 03:00:17 +0000 Subject: [PATCH 184/347] fix(deps): update dependency express to v4.17.3 --- package-lock.json | 59 +++++++++++++++++++++++++++++++++++++++++------ package.json | 2 +- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 989d6344..7026c201 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2946,16 +2946,16 @@ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", - "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.1", + "body-parser": "1.19.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.1", + "cookie": "0.4.2", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -2970,7 +2970,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.6", + "qs": "6.9.7", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.17.2", @@ -2980,6 +2980,51 @@ "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" + }, + "raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "requires": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + } } }, "extend": { diff --git a/package.json b/package.json index 7880fe27..0c71bcef 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "body-parser": "1.19.1", "cookie-parser": "1.4.6", "cos-nodejs-sdk-v5": "2.11.6", - "express": "4.17.2", + "express": "4.17.3", "extract-zip": "2.0.1", "formidable": "2.0.1", "fs-extra": "10.0.0", From d6ab42e95304a74441415a23a026f13c012fd2e2 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 17 Feb 2022 20:43:34 +0800 Subject: [PATCH 185/347] refactor: turn core/utils/common to ts --- src/core/services/client-manager.ts | 16 +- src/core/services/datacenter-manager.js | 7 +- src/core/services/deployments.js | 11 +- src/core/services/package-manager.ts | 133 +++++++------- src/core/utils/common.js | 226 ------------------------ src/core/utils/common.ts | 199 +++++++++++++++++++++ src/routes/apps.js | 4 +- 7 files changed, 284 insertions(+), 312 deletions(-) delete mode 100644 src/core/utils/common.js create mode 100644 src/core/utils/common.ts diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index 133d5e8f..d6d78756 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -1,7 +1,6 @@ import { logger } from 'kv-logger'; import _ from 'lodash'; import { Op } from 'sequelize'; - import { Deployments } from '../../models/deployments'; import { DeploymentsVersions } from '../../models/deployments_versions'; import { LogReportDeploy } from '../../models/log_report_deploy'; @@ -12,13 +11,12 @@ import { PackagesMetrics } from '../../models/packages_metrics'; import { AppError } from '../app-error'; import { config } from '../config'; import { DEPLOYMENT_FAILED, DEPLOYMENT_SUCCEEDED } from '../const'; +import { parseVersion, getBlobDownloadUrl } from '../utils/common'; import { redisClient } from '../utils/connections'; -const common = require('../utils/common'); - const updateCheck = 'UPDATE_CHECK'; const chosenMan = 'CHOSEN_MAN'; -const EXPIRED = 600; +const expired = 600; class ClientManager { getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash) { @@ -78,7 +76,7 @@ class ClientManager { try { logger.debug('updateCheckFromCache read from db'); const strRs = JSON.stringify(rs); - redisClient.setEx(redisCacheKey, EXPIRED, strRs); + redisClient.setEx(redisCacheKey, expired, strRs); } catch (e) { // do nothing } @@ -156,7 +154,7 @@ class ClientManager { if (_.isEmpty(dep)) { throw new AppError('Not found deployment, check deployment key is right.'); } - const version = common.parseVersion(appVersion); + const version = parseVersion(appVersion); return DeploymentsVersions.findAll({ where: { deployment_id: dep.id, @@ -195,7 +193,7 @@ class ClientManager { ) { rs.packageId = packageId; rs.targetBinaryRange = deploymentsVersions.app_version; - rs.downloadURL = common.getBlobDownloadUrl(packages.blob_url); + rs.downloadURL = getBlobDownloadUrl(packages.blob_url); rs.downloadUrl = rs.downloadURL; rs.description = _.get(packages, 'description', ''); rs.isAvailable = !_.eq(packages.is_disabled, 1); @@ -223,10 +221,10 @@ class ClientManager { }, }).then((diffPackage) => { if (!_.isEmpty(diffPackage)) { - rs.downloadURL = common.getBlobDownloadUrl( + rs.downloadURL = getBlobDownloadUrl( _.get(diffPackage, 'diff_blob_url'), ); - rs.downloadUrl = common.getBlobDownloadUrl( + rs.downloadUrl = getBlobDownloadUrl( _.get(diffPackage, 'diff_blob_url'), ); rs.packageSize = _.get(diffPackage, 'diff_size', 0); diff --git a/src/core/services/datacenter-manager.js b/src/core/services/datacenter-manager.js index 94b7f0c5..1c695227 100644 --- a/src/core/services/datacenter-manager.js +++ b/src/core/services/datacenter-manager.js @@ -5,8 +5,7 @@ import { logger } from 'kv-logger'; import { config } from '../config'; import { AppError } from '../app-error'; import { calcAllFileSha256, packageHashSync } from '../utils/security'; - -var common = require('../utils/common'); +import { createEmptyFolder, copy } from '../utils/common'; const MANIFEST_FILE_NAME = 'manifest.json'; const CONTENTS_NAME = 'contents'; @@ -103,8 +102,8 @@ proto.storePackage = function (sourceDst, force) { ); } else { logger.debug(`storePackage cover from sourceDst:`, sourceDst); - return common.createEmptyFolder(packageHashPath).then(() => { - return common.copy(sourceDst, contentPath).then(() => { + return createEmptyFolder(packageHashPath).then(() => { + return copy(sourceDst, contentPath).then(() => { var manifestString = JSON.stringify(manifestJson); fs.writeFileSync(manifestFile, manifestString); return self.buildPackageInfo( diff --git a/src/core/services/deployments.js b/src/core/services/deployments.js index d5e15c62..ca4ae2b6 100644 --- a/src/core/services/deployments.js +++ b/src/core/services/deployments.js @@ -12,8 +12,7 @@ import { Users } from '../../models/users'; import { sequelize } from '../utils/connections'; import { AppError } from '../app-error'; import { randToken } from '../../core/utils/security'; - -var common = require('../../core/utils/common'); +import { getBlobDownloadUrl } from '../../core/utils/common'; var proto = (module.exports = function () { function Deployments() {} @@ -113,7 +112,7 @@ proto.findPackagesAndOtherInfos = function (packageId) { (result, v) => { result[_.get(v, 'diff_against_package_hash')] = { size: _.get(v, 'diff_size'), - url: common.getBlobDownloadUrl(_.get(v, 'diff_blob_url')), + url: getBlobDownloadUrl(_.get(v, 'diff_blob_url')), }; return result; }, @@ -161,11 +160,9 @@ proto.formatPackage = function (packageVersion) { rollout: 100, appVersion: _.get(packageVersion, 'deploymentsVersions.app_version'), packageHash: _.get(packageVersion, 'packageInfo.package_hash'), - blobUrl: common.getBlobDownloadUrl(_.get(packageVersion, 'packageInfo.blob_url')), + blobUrl: getBlobDownloadUrl(_.get(packageVersion, 'packageInfo.blob_url')), size: _.get(packageVersion, 'packageInfo.size'), - manifestBlobUrl: common.getBlobDownloadUrl( - _.get(packageVersion, 'packageInfo.manifest_blob_url'), - ), + manifestBlobUrl: getBlobDownloadUrl(_.get(packageVersion, 'packageInfo.manifest_blob_url')), diffPackageMap: _.get(packageVersion, 'packageDiffMap'), releaseMethod: _.get(packageVersion, 'packageInfo.release_method'), uploadTime: parseInt(moment(_.get(packageVersion, 'packageInfo.updated_at')).format('x')), diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index 4da0c380..4f128f7d 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -26,12 +26,22 @@ import { RELEASE_METHOD_PROMOTE, RELEASE_METHOD_UPLOAD, } from '../const'; +import { + getBlobDownloadUrl, + createFileFromRequest, + unzipFile, + copySync, + diffCollectionsSync, + createEmptyFolder, + createEmptyFolderSync, + deleteFolderSync, + validatorVersion, +} from '../utils/common'; import { sequelize } from '../utils/connections'; import { qetag } from '../utils/qetag'; import { randToken, uploadPackageType } from '../utils/security'; import { uploadFileToStorage } from '../utils/storage'; -const common = require('../utils/common'); const dataCenterManager = require('./datacenter-manager')(); class PackageManager { @@ -187,19 +197,17 @@ class PackageManager { if (isValidate) { return dataCenterManager.getPackageInfo(packageHash); } - const downloadURL = common.getBlobDownloadUrl(blobHash); - return common - .createFileFromRequest(downloadURL, path.join(workDirectoryPath, blobHash)) - .then(() => { - return common - .unzipFile( - path.join(workDirectoryPath, blobHash), - path.join(workDirectoryPath, 'current'), - ) - .then((outputPath) => { - return dataCenterManager.storePackage(outputPath, true); - }); - }); + const downloadURL = getBlobDownloadUrl(blobHash); + return createFileFromRequest(downloadURL, path.join(workDirectoryPath, blobHash)).then( + () => { + return unzipFile( + path.join(workDirectoryPath, blobHash), + path.join(workDirectoryPath, 'current'), + ).then((outputPath) => { + return dataCenterManager.storePackage(outputPath, true); + }); + }, + ); }); } @@ -249,50 +257,48 @@ class PackageManager { originDataCenter, oldPackageDataCenter, }); - const downloadURL = common.getBlobDownloadUrl(diffManifestBlobHash); - return common - .createFileFromRequest( - downloadURL, - path.join(workDirectoryPath, diffManifestBlobHash), - ) - .then(() => { - const dataCenterContentPath = path.join(workDirectoryPath, 'dataCenter'); - common.copySync(originDataCenter.contentPath, dataCenterContentPath); - // const oldPackageDataCenterContentPath = oldPackageDataCenter.contentPath; - const originManifestJson = JSON.parse( - fs.readFileSync(originDataCenter.manifestFilePath, 'utf8'), - ); - const diffManifestJson = JSON.parse( - fs.readFileSync(path.join(workDirectoryPath, diffManifestBlobHash), 'utf8'), - ); - const json = common.diffCollectionsSync(originManifestJson, diffManifestJson); - const files = _.concat(json.diff, json.collection1Only); - const hotcodepush = { deletedFiles: json.collection2Only, patchedFiles: [] }; - const hotCodePushFile = path.join( - workDirectoryPath, - `${diffManifestBlobHash}_hotcodepush`, - ); - fs.writeFileSync(hotCodePushFile, JSON.stringify(hotcodepush)); - const fileName = path.join(workDirectoryPath, `${diffManifestBlobHash}.zip`); - return this.zipDiffPackage( - fileName, - files, - dataCenterContentPath, - hotCodePushFile, - ).then((data) => { - return qetag(data.path).then((diffHash) => { - return uploadFileToStorage(diffHash, fileName).then(() => { - const stats = fs.statSync(fileName); - return PackagesDiff.create({ - package_id: packageId, - diff_against_package_hash: diffPackageHash, - diff_blob_url: diffHash, - diff_size: stats.size, - }); + const downloadURL = getBlobDownloadUrl(diffManifestBlobHash); + return createFileFromRequest( + downloadURL, + path.join(workDirectoryPath, diffManifestBlobHash), + ).then(() => { + const dataCenterContentPath = path.join(workDirectoryPath, 'dataCenter'); + copySync(originDataCenter.contentPath, dataCenterContentPath); + // const oldPackageDataCenterContentPath = oldPackageDataCenter.contentPath; + const originManifestJson = JSON.parse( + fs.readFileSync(originDataCenter.manifestFilePath, 'utf8'), + ); + const diffManifestJson = JSON.parse( + fs.readFileSync(path.join(workDirectoryPath, diffManifestBlobHash), 'utf8'), + ); + const json = diffCollectionsSync(originManifestJson, diffManifestJson); + const files = _.concat(json.diff, json.collection1Only); + const hotcodepush = { deletedFiles: json.collection2Only, patchedFiles: [] }; + const hotCodePushFile = path.join( + workDirectoryPath, + `${diffManifestBlobHash}_hotcodepush`, + ); + fs.writeFileSync(hotCodePushFile, JSON.stringify(hotcodepush)); + const fileName = path.join(workDirectoryPath, `${diffManifestBlobHash}.zip`); + return this.zipDiffPackage( + fileName, + files, + dataCenterContentPath, + hotCodePushFile, + ).then((data) => { + return qetag(data.path).then((diffHash) => { + return uploadFileToStorage(diffHash, fileName).then(() => { + const stats = fs.statSync(fileName); + return PackagesDiff.create({ + package_id: packageId, + diff_against_package_hash: diffPackageHash, + diff_blob_url: diffHash, + diff_size: stats.size, }); }); }); }); + }); }); } @@ -336,8 +342,7 @@ class PackageManager { const blobUrl = _.get(originalPackage, 'blob_url'); const workDirectoryPath = path.join(os.tmpdir(), `codepush_${randToken(32)}`); logger.debug('createDiffPackages using dir', { workDirectoryPath }); - return common - .createEmptyFolder(workDirectoryPath) + return createEmptyFolder(workDirectoryPath) .then(() => this.downloadPackageAndExtract(workDirectoryPath, packageHash, blobUrl)) .then((originDataCenter) => Promise.all( @@ -346,7 +351,7 @@ class PackageManager { workDirectoryPath, _.get(v, 'package_hash'), ); - common.createEmptyFolderSync(diffWorkDirectoryPath); + createEmptyFolderSync(diffWorkDirectoryPath); return this.downloadPackageAndExtract( diffWorkDirectoryPath, _.get(v, 'package_hash'), @@ -364,13 +369,13 @@ class PackageManager { }), ), ) - .finally(() => common.deleteFolderSync(workDirectoryPath)); + .finally(() => deleteFolderSync(workDirectoryPath)); } // eslint-disable-next-line max-lines-per-function releasePackage(appId, deploymentId, packageInfo, filePath: string, releaseUid) { const { appVersion } = packageInfo; - const versionInfo = common.validatorVersion(appVersion); + const versionInfo = validatorVersion(appVersion); if (!versionInfo[0]) { logger.debug(`releasePackage targetBinaryVersion ${appVersion} not support.`); return Promise.reject(new AppError(`targetBinaryVersion ${appVersion} not support.`)); @@ -385,8 +390,8 @@ class PackageManager { logger.debug(`releasePackage generate an random dir path: ${directoryPath}`); return Promise.all([ qetag(filePath), - common.createEmptyFolder(directoryPath).then(() => { - return common.unzipFile(filePath, directoryPath); + createEmptyFolder(directoryPath).then(() => { + return unzipFile(filePath, directoryPath); }), ]) .then(([blobHash]) => { @@ -463,7 +468,7 @@ class PackageManager { params, ); }) - .finally(() => common.deleteFolderSync(directoryPathParent)); + .finally(() => deleteFolderSync(directoryPathParent)); } modifyReleasePackage(packageId, params) { @@ -478,7 +483,7 @@ class PackageManager { throw new AppError(`packageInfo not found`); } if (!_.isNull(appVersion)) { - const versionInfo = common.validatorVersion(appVersion); + const versionInfo = validatorVersion(appVersion); if (!versionInfo[0]) { throw new AppError(`--targetBinaryVersion ${appVersion} not support.`); } @@ -613,7 +618,7 @@ class PackageManager { }); }) .then(([sourcePack, appFinalVersion]) => { - const versionInfo = common.validatorVersion(appFinalVersion); + const versionInfo = validatorVersion(appFinalVersion); if (!versionInfo[0]) { logger.debug(`targetBinaryVersion ${appVersion} not support.`); throw new AppError(`targetBinaryVersion ${appVersion} not support.`); diff --git a/src/core/utils/common.js b/src/core/utils/common.js deleted file mode 100644 index fe02d64f..00000000 --- a/src/core/utils/common.js +++ /dev/null @@ -1,226 +0,0 @@ -import fs from 'fs'; -import fsextra from 'fs-extra'; -import extract from 'extract-zip'; -import _ from 'lodash'; -import validator from 'validator'; -import util from 'util'; -import fetch from 'node-fetch'; -import { logger } from 'kv-logger'; - -import { config } from '../config'; -import { AppError } from '../app-error'; - -const streamPipeline = util.promisify(require('stream').pipeline); - -var common = {}; -module.exports = common; - -common.parseVersion = function (versionNo) { - var version = '0'; - var data = null; - if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { - // "1.2.3" - version = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})$/))) { - // "1.2" - version = data[1] + _.padStart(data[2], 5, '0') + _.padStart('0', 10, '0'); - } - return version; -}; - -common.validatorVersion = function (versionNo) { - var flag = false; - var min = '0'; - var max = '9999999999999999999'; - var data = null; - if (versionNo == '*') { - // "*" - flag = true; - } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { - // "1.2.3" - flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - max = data[1] + _.padStart(data[2], 5, '0') + _.padStart(parseInt(data[3]) + 1, 10, '0'); - } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})(\.\*){0,1}$/))) { - // "1.2" "1.2.*" - flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart('0', 10, '0'); - max = data[1] + _.padStart(parseInt(data[2]) + 1, 5, '0') + _.padStart('0', 10, '0'); - } else if ((data = versionNo.match(/^\~([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { - //"~1.2.3" - flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - max = data[1] + _.padStart(parseInt(data[2]) + 1, 5, '0') + _.padStart('0', 10, '0'); - } else if ((data = versionNo.match(/^\^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { - //"^1.2.3" - flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - max = _.toString(parseInt(data[1]) + 1) + _.padStart(0, 5, '0') + _.padStart('0', 10, '0'); - } else if ( - (data = versionNo.match( - /^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?-\s?([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/, - )) - ) { - // "1.2.3 - 1.2.7" - flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - max = data[4] + _.padStart(data[5], 5, '0') + _.padStart(parseInt(data[6]) + 1, 10, '0'); - } else if ( - (data = versionNo.match( - /^>=([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?<([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/, - )) - ) { - // ">=1.2.3 <1.2.7" - flag = true; - min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - max = data[4] + _.padStart(data[5], 5, '0') + _.padStart(data[6], 10, '0'); - } - return [flag, min, max]; -}; - -common.createFileFromRequest = async function (url, filePath) { - try { - await fs.promises.stat(filePath); - return; - } catch (err) { - if (err.code !== 'ENOENT') { - throw error; - } - } - - logger.debug(`createFileFromRequest url:${url}`); - const response = await fetch(url); - if (!response.ok) { - throw new AppError(`unexpected response ${response.statusText}`); - } - await streamPipeline(response.body, fs.createWriteStream(filePath)); -}; - -common.copySync = function (sourceDst, targertDst) { - return fsextra.copySync(sourceDst, targertDst, { overwrite: true }); -}; - -common.copy = function (sourceDst, targertDst) { - return new Promise((resolve, reject) => { - fsextra.copy(sourceDst, targertDst, { overwrite: true }, function (err) { - if (err) { - logger.error(err); - reject(err); - } else { - logger.debug(`copy success sourceDst:${sourceDst} targertDst:${targertDst}`); - resolve(); - } - }); - }); -}; - -common.move = function (sourceDst, targertDst) { - return new Promise((resolve, reject) => { - fsextra.move(sourceDst, targertDst, { overwrite: true }, function (err) { - if (err) { - logger.error(err); - reject(err); - } else { - logger.debug(`move success sourceDst:${sourceDst} targertDst:${targertDst}`); - resolve(); - } - }); - }); -}; - -common.deleteFolder = function (folderPath) { - return new Promise((resolve, reject) => { - fsextra.remove(folderPath, function (err) { - if (err) { - logger.error(err); - reject(err); - } else { - logger.debug(`deleteFolder delete ${folderPath} success.`); - resolve(null); - } - }); - }); -}; - -common.deleteFolderSync = function (folderPath) { - return fsextra.removeSync(folderPath); -}; - -common.createEmptyFolder = function (folderPath) { - return new Promise((resolve, reject) => { - logger.debug(`createEmptyFolder Create dir ${folderPath}`); - return common.deleteFolder(folderPath).then((data) => { - fsextra.mkdirs(folderPath, (err) => { - if (err) { - logger.error(err); - reject(new AppError(err.message)); - } else { - resolve(folderPath); - } - }); - }); - }); -}; - -common.createEmptyFolderSync = function (folderPath) { - common.deleteFolderSync(folderPath); - return fsextra.mkdirsSync(folderPath); -}; - -common.unzipFile = async function (zipFile, outputPath) { - try { - logger.debug(`unzipFile check zipFile ${zipFile} fs.R_OK`); - fs.accessSync(zipFile, fs.R_OK); - logger.debug(`Pass unzipFile file ${zipFile}`); - } catch (err) { - logger.error(err); - throw new AppError(err.message); - } - - try { - await extract(zipFile, { dir: outputPath }); - logger.debug(`unzipFile success`); - } catch (err) { - logger.error(err); - throw new AppError(`it's not a zipFile`); - } - return outputPath; -}; - -common.getBlobDownloadUrl = function (blobUrl) { - var fileName = blobUrl; - var storageType = _.get(config, 'common.storageType'); - var downloadUrl = _.get(config, `${storageType}.downloadUrl`); - if (storageType === 'local') { - fileName = blobUrl.substr(0, 2).toLowerCase() + '/' + blobUrl; - } - if (!validator.isURL(downloadUrl)) { - var e = new AppError(`Please config ${storageType}.downloadUrl in config.js`); - logger.error(e); - throw e; - } - return `${downloadUrl}/${fileName}`; -}; - -common.diffCollectionsSync = function (collection1, collection2) { - var diffFiles = []; - var collection1Only = []; - var newCollection2 = Object.assign({}, collection2); - if (collection1 instanceof Object) { - for (var key of Object.keys(collection1)) { - if (_.isEmpty(newCollection2[key])) { - collection1Only.push(key); - } else { - if (!_.eq(collection1[key], newCollection2[key])) { - diffFiles.push(key); - } - delete newCollection2[key]; - } - } - } - return { - diff: diffFiles, - collection1Only: collection1Only, - collection2Only: Object.keys(newCollection2), - }; -}; diff --git a/src/core/utils/common.ts b/src/core/utils/common.ts new file mode 100644 index 00000000..cbac25ce --- /dev/null +++ b/src/core/utils/common.ts @@ -0,0 +1,199 @@ +/* eslint-disable no-cond-assign */ +import fs from 'fs'; +import { pipeline } from 'stream'; +import util from 'util'; +import extract from 'extract-zip'; +import fsextra from 'fs-extra'; +import { logger } from 'kv-logger'; +import _ from 'lodash'; +import fetch from 'node-fetch'; +import validator from 'validator'; +import { AppError } from '../app-error'; +import { config } from '../config'; + +const streamPipeline = util.promisify(pipeline); + +export function parseVersion(versionNo: string) { + let version = '0'; + let data = null; + if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { + // "1.2.3" + version = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})$/))) { + // "1.2" + version = data[1] + _.padStart(data[2], 5, '0') + _.padStart('0', 10, '0'); + } + return version; +} + +export function validatorVersion(versionNo: string) { + let flag = false; + let min = '0'; + let max = '9999999999999999999'; + let data = null; + if (versionNo === '*') { + // "*" + flag = true; + } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { + // "1.2.3" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + max = + data[1] + + _.padStart(data[2], 5, '0') + + _.padStart(`${parseInt(data[3], 10) + 1}`, 10, '0'); + } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})(\.\*){0,1}$/))) { + // "1.2" "1.2.*" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart('0', 10, '0'); + max = + data[1] + _.padStart(`${parseInt(data[2], 10) + 1}`, 5, '0') + _.padStart('0', 10, '0'); + } else if ((data = versionNo.match(/^~([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { + // "~1.2.3" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + max = + data[1] + _.padStart(`${parseInt(data[2], 10) + 1}`, 5, '0') + _.padStart('0', 10, '0'); + } else if ((data = versionNo.match(/^\^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { + // "^1.2.3" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + max = + _.toString(parseInt(data[1], 10) + 1) + + _.padStart('0', 5, '0') + + _.padStart('0', 10, '0'); + } else if ( + (data = versionNo.match( + /^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?-\s?([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/, + )) + ) { + // "1.2.3 - 1.2.7" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + max = + data[4] + + _.padStart(data[5], 5, '0') + + _.padStart(`${parseInt(data[6], 10) + 1}`, 10, '0'); + } else if ( + (data = versionNo.match( + /^>=([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})\s?<([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/, + )) + ) { + // ">=1.2.3 <1.2.7" + flag = true; + min = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); + max = data[4] + _.padStart(data[5], 5, '0') + _.padStart(data[6], 10, '0'); + } + return [flag, min, max]; +} + +export async function createFileFromRequest(url, filePath) { + try { + await fs.promises.stat(filePath); + return; + } catch (err) { + if (err.code !== 'ENOENT') { + throw err; + } + } + + logger.debug(`createFileFromRequest url:${url}`); + const response = await fetch(url); + if (!response.ok) { + throw new AppError(`unexpected response ${response.statusText}`); + } + await streamPipeline(response.body, fs.createWriteStream(filePath)); +} + +export function copySync(sourceDst: string, targertDst: string) { + return fsextra.copySync(sourceDst, targertDst, { overwrite: true }); +} + +export function copy(sourceDst: string, targertDst: string) { + return fsextra.copy(sourceDst, targertDst, { overwrite: true }); +} + +export function move(sourceDst: string, targertDst: string) { + return fsextra.move(sourceDst, targertDst, { overwrite: true }); +} + +export function deleteFolder(folderPath: string) { + return fsextra.remove(folderPath); +} + +export function deleteFolderSync(folderPath: string) { + return fsextra.removeSync(folderPath); +} + +export async function createEmptyFolder(folderPath: string) { + await deleteFolder(folderPath); + await fsextra.mkdirs(folderPath); +} + +export function createEmptyFolderSync(folderPath: string) { + deleteFolderSync(folderPath); + fsextra.mkdirsSync(folderPath); +} + +export async function unzipFile(zipFile: string, outputPath: string) { + try { + logger.debug(`unzipFile check zipFile ${zipFile} fs.R_OK`); + fs.accessSync(zipFile, fs.constants.R_OK); + logger.debug(`Pass unzipFile file ${zipFile}`); + } catch (err) { + logger.error(err); + throw new AppError(err.message); + } + + try { + await extract(zipFile, { dir: outputPath }); + logger.debug(`unzipFile success`); + } catch (err) { + logger.error(err); + throw new AppError(`it's not a zipFile`); + } + return outputPath; +} + +export function getBlobDownloadUrl(blobUrl: string): string { + let fileName = blobUrl; + const storageType = _.get(config, 'common.storageType'); + const downloadUrl = _.get(config, `${storageType}.downloadUrl`); + if (storageType === 'local') { + fileName = `${blobUrl.substring(0, 2).toLowerCase()}/${blobUrl}`; + } + if (!validator.isURL(downloadUrl)) { + const e = new AppError(`Please config ${storageType}.downloadUrl in config.js`); + logger.error(e); + throw e; + } + return `${downloadUrl}/${fileName}`; +} + +export function diffCollectionsSync( + collection1: Record, + collection2: Record, +) { + const diff: string[] = []; + const collection1Only: string[] = []; + const collection2Keys = new Set(Object.keys(collection2)); + if (collection1 instanceof Object) { + const keys = Object.keys(collection1); + for (let i = 0; i < keys.length; i += 1) { + const key = keys[i]; + if (!collection2Keys.has(key)) { + collection1Only.push(key); + } else { + collection2Keys.delete(key); + if (!_.eq(collection1[key], collection2[key])) { + diff.push(key); + } + } + } + } + return { + diff, + collection1Only, + collection2Only: Array.from(collection2Keys), + }; +} diff --git a/src/routes/apps.js b/src/routes/apps.js index 2c05a138..1b0f9ef7 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -20,12 +20,12 @@ import { CORDOVA, CORDOVA_NAME, } from '../core/const'; +import { deleteFolderSync } from '../core/utils/common'; var middleware = require('../core/middleware'); var Deployments = require('../core/services/deployments'); var Collaborators = require('../core/services/collaborators'); var AppManager = require('../core/services/app-manager'); -var common = require('../core/utils/common'); const router = express.Router(); @@ -349,7 +349,7 @@ router.post( uid, ) .finally(() => { - common.deleteFolderSync(data.package.filepath); + deleteFolderSync(data.package.filepath); }); }) .then((packages) => { From e7d2e0f28e1989227582505397139e0db617424d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 18 Feb 2022 03:07:32 +0000 Subject: [PATCH 186/347] fix(deps): update dependency kv-logger to v0.5.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 989d6344..6930f461 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4248,9 +4248,9 @@ "dev": true }, "kv-logger": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/kv-logger/-/kv-logger-0.5.2.tgz", - "integrity": "sha512-yiPjzU66HK7xCqgOFBpQGGxMeRq05axt2BJPusNNoH072wizzSF4p4O8ZYohuE50IkX9UH/X9FIucx1ibWQxRg==" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/kv-logger/-/kv-logger-0.5.3.tgz", + "integrity": "sha512-ToBlw7HfX9/2MD1ek85tMa2Q3gSU/n5TXaoPPBuyZ8JX+f2w5OGjE10H+YzolJpMXbxsa0fVtj41Vq/MJPhUlQ==" }, "language-subtag-registry": { "version": "0.3.21", diff --git a/package.json b/package.json index 7880fe27..49e1fda8 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "fs-extra": "10.0.0", "helmet": "5.0.2", "jsonwebtoken": "8.5.1", - "kv-logger": "0.5.2", + "kv-logger": "0.5.3", "lodash": "4.17.21", "moment": "2.29.1", "mysql2": "2.3.3", From 19d8acd994538cb683dc319e0f0aa164c75a882f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 18 Feb 2022 03:15:51 +0000 Subject: [PATCH 187/347] fix(deps): update dependency body-parser to v1.19.2 --- package-lock.json | 35 +++++++++++++++++++++++++++++------ package.json | 2 +- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a9660f9..17597a11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1314,20 +1314,43 @@ } }, "body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", "requires": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", + "qs": "6.9.7", + "raw-body": "2.4.3", "type-is": "~1.6.18" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" + }, + "raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "requires": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + } } }, "brace-expansion": { diff --git a/package.json b/package.json index a36a2280..fa3da5ce 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "aliyun-sdk": "1.12.4", "aws-sdk": "2.1072.0", "bcryptjs": "2.4.3", - "body-parser": "1.19.1", + "body-parser": "1.19.2", "cookie-parser": "1.4.6", "cos-nodejs-sdk-v5": "2.11.6", "express": "4.17.3", From 27d2e2f757eb72bb9ba6d74a5da5852359654bc9 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 18 Feb 2022 13:27:16 +0800 Subject: [PATCH 188/347] refactor: turn appManager to ts --- src/core/services/app-manager.js | 178 ------------------------------ src/core/services/app-manager.ts | 183 +++++++++++++++++++++++++++++++ src/models/apps.ts | 2 +- src/routes/apps.js | 7 +- 4 files changed, 185 insertions(+), 185 deletions(-) delete mode 100644 src/core/services/app-manager.js create mode 100644 src/core/services/app-manager.ts diff --git a/src/core/services/app-manager.js b/src/core/services/app-manager.js deleted file mode 100644 index fbd07170..00000000 --- a/src/core/services/app-manager.js +++ /dev/null @@ -1,178 +0,0 @@ -import _ from 'lodash'; - -import { Apps } from '../../models/apps'; -import { Collaborators } from '../../models/collaborators'; -import { Deployments } from '../../models/deployments'; -import { Users } from '../../models/users'; -import { sequelize } from '../utils/connections'; -import { AppError } from '../app-error'; -import { - IOS, - IOS_NAME, - ANDROID, - ANDROID_NAME, - WINDOWS, - WINDOWS_NAME, - CORDOVA, - CORDOVA_NAME, - REACT_NATIVE, - REACT_NATIVE_NAME, - STAGING, - PRODUCTION, -} from '../const'; -import { randToken } from '../../core/utils/security'; - -var proto = (module.exports = function () { - function AppManager() {} - AppManager.__proto__ = proto; - return AppManager; -}); - -proto.findAppByName = function (uid, appName) { - return Apps.findOne({ where: { name: appName, uid: uid } }); -}; - -proto.addApp = function (uid, appName, os, platform, identical) { - return sequelize.transaction((t) => { - return Apps.create( - { - name: appName, - uid: uid, - os: os, - platform: platform, - }, - { - transaction: t, - }, - ).then((apps) => { - var appId = apps.id; - var deployments = []; - var deploymentKey = randToken(28) + identical; - deployments.push({ - appid: appId, - name: PRODUCTION, - last_deployment_version_id: 0, - label_id: 0, - deployment_key: deploymentKey, - }); - deploymentKey = randToken(28) + identical; - deployments.push({ - appid: appId, - name: STAGING, - last_deployment_version_id: 0, - label_id: 0, - deployment_key: deploymentKey, - }); - return Promise.all([ - Collaborators.create( - { appid: appId, uid: uid, roles: 'Owner' }, - { transaction: t }, - ), - Deployments.bulkCreate(deployments, { transaction: t }), - ]); - }); - }); -}; - -proto.deleteApp = function (appId) { - return sequelize.transaction((t) => { - return Promise.all([ - Apps.destroy({ where: { id: appId }, transaction: t }), - Collaborators.destroy({ where: { appid: appId }, transaction: t }), - Deployments.destroy({ where: { appid: appId }, transaction: t }), - ]); - }); -}; - -proto.modifyApp = function (appId, params) { - return Apps.update(params, { where: { id: appId } }).then(([affectedCount, affectedRows]) => { - if (!_.gt(affectedCount, 0)) { - throw AppError('modify errors'); - } - return affectedCount; - }); -}; - -proto.transferApp = function (appId, fromUid, toUid) { - return sequelize.transaction((t) => { - return Promise.all([ - Apps.update({ uid: toUid }, { where: { id: appId }, transaction: t }), - Collaborators.destroy({ where: { appid: appId, uid: fromUid }, transaction: t }), - Collaborators.destroy({ where: { appid: appId, uid: toUid }, transaction: t }), - Collaborators.create({ appid: appId, uid: toUid, roles: 'Owner' }, { transaction: t }), - ]); - }); -}; - -proto.listApps = function (uid) { - const self = this; - return Collaborators.findAll({ where: { uid: uid } }) - .then((data) => { - if (_.isEmpty(data)) { - return []; - } else { - var appIds = _.map(data, (v) => { - return v.appid; - }); - var Sequelize = require('sequelize'); - return Apps.findAll({ where: { id: { [Sequelize.Op.in]: appIds } } }); - } - }) - .then((appInfos) => { - var rs = Promise.all( - _.values(appInfos).map((v) => { - return self.getAppDetailInfo(v, uid).then((info) => { - if (info.os == IOS) { - info.os = IOS_NAME; - } else if (info.os == ANDROID) { - info.os = ANDROID_NAME; - } else if (info.os == WINDOWS) { - info.os = WINDOWS_NAME; - } - if (info.platform == REACT_NATIVE) { - info.platform = REACT_NATIVE_NAME; - } else if (info.platform == CORDOVA) { - info.platform = CORDOVA_NAME; - } - return info; - }); - }), - ); - return rs; - }); -}; - -proto.getAppDetailInfo = function (appInfo, currentUid) { - var appId = appInfo.get('id'); - return Promise.all([ - Deployments.findAll({ where: { appid: appId } }), - Collaborators.findAll({ where: { appid: appId } }).then((collaboratorInfos) => { - return collaboratorInfos.reduce((prev, collaborator) => { - return prev.then((allCol) => { - return Users.findOne({ where: { id: collaborator.get('uid') } }).then((u) => { - var isCurrentAccount = false; - if (_.eq(u.get('id'), currentUid)) { - isCurrentAccount = true; - } - allCol[u.get('email')] = { - permission: collaborator.get('roles'), - isCurrentAccount: isCurrentAccount, - }; - return allCol; - }); - }); - }, Promise.resolve({})); - }), - ]).then(([deploymentInfos, collaborators]) => { - return { - collaborators, - deployments: _.map(deploymentInfos, (item) => { - return _.get(item, 'name'); - }), - os: appInfo.get('os'), - platform: appInfo.get('platform'), - name: appInfo.get('name'), - id: appInfo.get('id'), - }; - }); -}; diff --git a/src/core/services/app-manager.ts b/src/core/services/app-manager.ts new file mode 100644 index 00000000..eb1437d2 --- /dev/null +++ b/src/core/services/app-manager.ts @@ -0,0 +1,183 @@ +import _ from 'lodash'; +import { Op } from 'sequelize'; +import { Apps, AppsInterface } from '../../models/apps'; +import { Collaborators } from '../../models/collaborators'; +import { Deployments } from '../../models/deployments'; +import { Users } from '../../models/users'; +import { AppError } from '../app-error'; +import { + IOS, + IOS_NAME, + ANDROID, + ANDROID_NAME, + WINDOWS, + WINDOWS_NAME, + CORDOVA, + CORDOVA_NAME, + REACT_NATIVE, + REACT_NATIVE_NAME, + STAGING, + PRODUCTION, +} from '../const'; +import { sequelize } from '../utils/connections'; +import { randToken } from '../utils/security'; + +class AppManager { + findAppByName(uid: number, appName: string) { + return Apps.findOne({ where: { name: appName, uid } }); + } + + addApp(uid: number, appName: string, os, platform, identical: string) { + return sequelize.transaction((t) => { + return Apps.create( + { + name: appName, + uid, + os, + platform, + }, + { + transaction: t, + }, + ).then((apps) => { + const appId = apps.id; + const deployments = []; + let deploymentKey = randToken(28) + identical; + deployments.push({ + appid: appId, + name: PRODUCTION, + last_deployment_version_id: 0, + label_id: 0, + deployment_key: deploymentKey, + }); + deploymentKey = randToken(28) + identical; + deployments.push({ + appid: appId, + name: STAGING, + last_deployment_version_id: 0, + label_id: 0, + deployment_key: deploymentKey, + }); + return Promise.all([ + Collaborators.create({ appid: appId, uid, roles: 'Owner' }, { transaction: t }), + Deployments.bulkCreate(deployments, { transaction: t }), + ]); + }); + }); + } + + deleteApp(appId) { + return sequelize.transaction((t) => { + return Promise.all([ + Apps.destroy({ where: { id: appId }, transaction: t }), + Collaborators.destroy({ where: { appid: appId }, transaction: t }), + Deployments.destroy({ where: { appid: appId }, transaction: t }), + ]); + }); + } + + modifyApp(appId, params) { + return Apps.update(params, { where: { id: appId } }).then(([affectedCount]) => { + if (!_.gt(affectedCount, 0)) { + throw new AppError('modify errors'); + } + return affectedCount; + }); + } + + transferApp(appId: number, fromUid: number, toUid: number) { + return sequelize.transaction((t) => { + return Promise.all([ + Apps.update({ uid: toUid }, { where: { id: appId }, transaction: t }), + Collaborators.destroy({ where: { appid: appId, uid: fromUid }, transaction: t }), + Collaborators.destroy({ where: { appid: appId, uid: toUid }, transaction: t }), + Collaborators.create( + { appid: appId, uid: toUid, roles: 'Owner' }, + { transaction: t }, + ), + ]); + }); + } + + listApps(uid: number) { + return Collaborators.findAll({ where: { uid } }) + .then((data) => { + if (_.isEmpty(data)) { + return [] as AppsInterface[]; + } + const appIds = _.map(data, (v) => { + return v.appid; + }); + return Apps.findAll({ where: { id: { [Op.in]: appIds } } }); + }) + .then((appInfos) => { + const rs = Promise.all( + _.values(appInfos).map((v) => { + return this.getAppDetailInfo(v, uid).then((info) => { + let os = ''; + if (info.os === IOS) { + os = IOS_NAME; + } else if (info.os === ANDROID) { + os = ANDROID_NAME; + } else if (info.os === WINDOWS) { + os = WINDOWS_NAME; + } + + let platform = ''; + if (info.platform === REACT_NATIVE) { + platform = REACT_NATIVE_NAME; + } else if (info.platform === CORDOVA) { + platform = CORDOVA_NAME; + } + return { + ...info, + os, + platform, + }; + }); + }), + ); + return rs; + }); + } + + private getAppDetailInfo(appInfo: AppsInterface, currentUid: number) { + const appId = appInfo.get('id'); + return Promise.all([ + Deployments.findAll({ where: { appid: appId } }), + Collaborators.findAll({ where: { appid: appId } }).then((collaboratorInfos) => { + return collaboratorInfos.reduce((prev, collaborator) => { + return prev.then((allCol) => { + return Users.findOne({ where: { id: collaborator.get('uid') } }).then( + (u) => { + let isCurrentAccount = false; + if (_.eq(u.get('id'), currentUid)) { + isCurrentAccount = true; + } + // eslint-disable-next-line no-param-reassign + allCol[u.get('email')] = { + permission: collaborator.get('roles'), + isCurrentAccount, + }; + return allCol; + }, + ); + }); + }, Promise.resolve({})); + }), + ]).then(([deploymentInfos, collaborators]) => { + return { + collaborators, + deployments: _.map(deploymentInfos, (item) => { + return _.get(item, 'name'); + }), + os: appInfo.get('os'), + platform: appInfo.get('platform'), + name: appInfo.get('name'), + id: appInfo.get('id'), + }; + }); + } +} + +export const appManager = new AppManager(); diff --git a/src/models/apps.ts b/src/models/apps.ts index 6c5cf542..78264ed0 100644 --- a/src/models/apps.ts +++ b/src/models/apps.ts @@ -1,7 +1,7 @@ import { DataTypes, Model } from 'sequelize'; import { sequelize } from '../core/utils/connections'; -interface AppsInterface extends Model { +export interface AppsInterface extends Model { id: number; name: string; uid: number; diff --git a/src/routes/apps.js b/src/routes/apps.js index 1b0f9ef7..424651d3 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -21,11 +21,11 @@ import { CORDOVA_NAME, } from '../core/const'; import { deleteFolderSync } from '../core/utils/common'; +import { appManager } from '../core/services/app-manager'; var middleware = require('../core/middleware'); var Deployments = require('../core/services/deployments'); var Collaborators = require('../core/services/collaborators'); -var AppManager = require('../core/services/app-manager'); const router = express.Router(); @@ -37,7 +37,6 @@ function delay(ms) { router.get('/', middleware.checkToken, (req, res, next) => { var uid = req.users.id; - var appManager = new AppManager(); appManager .listApps(uid) .then((data) => { @@ -715,7 +714,6 @@ router.delete('/:appName', middleware.checkToken, (req, res, next) => { appName, }); - var appManager = new AppManager(); accountManager .ownerCan(uid, appName) .then((col) => { @@ -750,7 +748,6 @@ router.patch('/:appName', middleware.checkToken, (req, res, next) => { if (_.isEmpty(newAppName)) { return res.status(406).send('Please input name!'); } else { - var appManager = new AppManager(); return accountManager .ownerCan(uid, appName) .then((col) => { @@ -794,7 +791,6 @@ router.post('/:appName/transfer/:email', middleware.checkToken, (req, res, next) if (_.eq(data.id, uid)) { throw new AppError("You can't transfer to yourself!"); } - var appManager = new AppManager(); return appManager.transferApp(col.appid, uid, data.id); }); }) @@ -841,7 +837,6 @@ router.post('/', middleware.checkToken, (req, res, next) => { return res.status(406).send('Please input platform [React-Native|Cordova]!'); } var manuallyProvisionDeployments = req.body.manuallyProvisionDeployments; - var appManager = new AppManager(); appManager .findAppByName(uid, appName) From 9a18394ebd289f1bc9894e38ec60cd33a923bcda Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 18 Feb 2022 13:45:15 +0800 Subject: [PATCH 189/347] refactor: turn collaorators manager to ts --- src/core/services/collaborators-manager.ts | 75 ++++++++++++++++++++++ src/core/services/collaborators.js | 68 -------------------- src/models/collaborators.ts | 3 +- src/routes/apps.js | 11 ++-- 4 files changed, 81 insertions(+), 76 deletions(-) create mode 100644 src/core/services/collaborators-manager.ts delete mode 100644 src/core/services/collaborators.js diff --git a/src/core/services/collaborators-manager.ts b/src/core/services/collaborators-manager.ts new file mode 100644 index 00000000..024552f6 --- /dev/null +++ b/src/core/services/collaborators-manager.ts @@ -0,0 +1,75 @@ +import _ from 'lodash'; +import { Op } from 'sequelize'; +import { Collaborators, CollaboratorsInterface } from '../../models/collaborators'; +import { Users } from '../../models/users'; +import { AppError } from '../app-error'; + +class CollaboratorsManager { + listCollaborators(appId: number) { + return Collaborators.findAll({ where: { appid: appId } }) + .then( + ( + data, + ): { + uids: number[]; + colByUid: Record; + } => { + return _.reduce( + data, + (result, value) => { + result.uids.push(value.uid); + // eslint-disable-next-line no-param-reassign + result.colByUid[value.uid] = value; + return result; + }, + { + uids: [], + colByUid: {}, + }, + ); + }, + ) + .then((coInfo) => { + return Users.findAll({ where: { id: { [Op.in]: coInfo.uids } } }).then((data2) => { + return _.reduce( + data2, + (result, value) => { + let permission = ''; + if (!_.isEmpty(coInfo.colByUid[value.id])) { + permission = coInfo.colByUid[value.id].roles; + } + // eslint-disable-next-line no-param-reassign + result[value.email] = { permission }; + return result; + }, + {} as Record, + ); + }); + }); + } + + addCollaborator(appId: number, uid: number) { + return Collaborators.findOne({ where: { appid: appId, uid } }).then((data) => { + if (_.isEmpty(data)) { + return Collaborators.create({ + appid: appId, + uid, + roles: 'Collaborator', + }); + } + throw new AppError('user already is Collaborator.'); + }); + } + + deleteCollaborator(appId: number, uid: number) { + return Collaborators.findOne({ where: { appid: appId, uid } }).then((data) => { + if (_.isEmpty(data)) { + throw new AppError('user is not a Collaborator'); + } else { + return Collaborators.destroy({ where: { id: data.id } }); + } + }); + } +} + +export const collaboratorsManager = new CollaboratorsManager(); diff --git a/src/core/services/collaborators.js b/src/core/services/collaborators.js deleted file mode 100644 index aabeb54c..00000000 --- a/src/core/services/collaborators.js +++ /dev/null @@ -1,68 +0,0 @@ -import _ from 'lodash'; -import { Collaborators } from '../../models/collaborators'; -import { Users } from '../../models/users'; -import { AppError } from '../app-error'; - -var proto = (module.exports = function () { - function Collaborators() {} - Collaborators.__proto__ = proto; - return Collaborators; -}); - -proto.listCollaborators = function (appId) { - return Collaborators.findAll({ where: { appid: appId } }) - .then((data) => { - return _.reduce( - data, - function (result, value, key) { - (result['uids'] || (result['uids'] = [])).push(value.uid); - result[value.uid] = value; - return result; - }, - [], - ); - }) - .then((coInfo) => { - var Sequelize = require('sequelize'); - return Users.findAll({ where: { id: { [Sequelize.Op.in]: coInfo.uids } } }).then( - (data2) => { - return _.reduce( - data2, - function (result, value, key) { - var permission = ''; - if (!_.isEmpty(coInfo[value.id])) { - permission = coInfo[value.id].roles; - } - result[value.email] = { permission: permission }; - return result; - }, - {}, - ); - }, - ); - }); -}; - -proto.addCollaborator = function (appId, uid) { - return Collaborators.findOne({ where: { appid: appId, uid: uid } }).then((data) => { - if (_.isEmpty(data)) { - return Collaborators.create({ - appid: appId, - uid: uid, - roles: 'Collaborator', - }); - } else { - throw new AppError('user already is Collaborator.'); - } - }); -}; - -proto.deleteCollaborator = function (appId, uid) { - return Collaborators.findOne({ where: { appid: appId, uid: uid } }).then((data) => { - if (_.isEmpty(data)) { - throw new AppError('user is not a Collaborator'); - } else { - return Collaborators.destroy({ where: { id: data.id } }); - } - }); -}; diff --git a/src/models/collaborators.ts b/src/models/collaborators.ts index 2ef7938e..3f38cb0a 100644 --- a/src/models/collaborators.ts +++ b/src/models/collaborators.ts @@ -1,10 +1,11 @@ import { DataTypes, Model } from 'sequelize'; import { sequelize } from '../core/utils/connections'; -interface CollaboratorsInterface extends Model { +export interface CollaboratorsInterface extends Model { id: number; appid: number; uid: number; + roles: string; created_at: Date; updated_at: Date; } diff --git a/src/routes/apps.js b/src/routes/apps.js index 424651d3..7bc56f4f 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -22,10 +22,10 @@ import { } from '../core/const'; import { deleteFolderSync } from '../core/utils/common'; import { appManager } from '../core/services/app-manager'; +import { collaboratorsManager } from '../core/services/collaborators-manager'; var middleware = require('../core/middleware'); var Deployments = require('../core/services/deployments'); -var Collaborators = require('../core/services/collaborators'); const router = express.Router(); @@ -617,11 +617,10 @@ router.post( router.get('/:appName/collaborators', middleware.checkToken, (req, res, next) => { var appName = _.trim(req.params.appName); var uid = req.users.id; - var collaborators = new Collaborators(); accountManager .collaboratorCan(uid, appName) .then((col) => { - return collaborators.listCollaborators(col.appid); + return collaboratorsManager.listCollaborators(col.appid); }) .then((data) => { const rs = _.reduce( @@ -655,12 +654,11 @@ router.post('/:appName/collaborators/:email', middleware.checkToken, (req, res, if (!validator.isEmail(email)) { return res.status(406).send('Invalid Email!'); } - var collaborators = new Collaborators(); accountManager .ownerCan(uid, appName) .then((col) => { return accountManager.findUserByEmail(email).then((data) => { - return collaborators.addCollaborator(col.appid, data.id); + return collaboratorsManager.addCollaborator(col.appid, data.id); }); }) .then((data) => { @@ -682,7 +680,6 @@ router.delete('/:appName/collaborators/:email', middleware.checkToken, (req, res if (!validator.isEmail(email)) { return res.status(406).send('Invalid Email!'); } - var collaborators = new Collaborators(); accountManager .ownerCan(uid, appName) .then((col) => { @@ -690,7 +687,7 @@ router.delete('/:appName/collaborators/:email', middleware.checkToken, (req, res if (_.eq(data.id, uid)) { throw new AppError("can't delete yourself!"); } else { - return collaborators.deleteCollaborator(col.appid, data.id); + return collaboratorsManager.deleteCollaborator(col.appid, data.id); } }); }) From f65ddc4f33ead0aba355ad29bb96e59dfbb79bb9 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 18 Feb 2022 13:55:58 +0800 Subject: [PATCH 190/347] refactor: turn datacenter-manager to ts --- src/core/services/datacenter-manager.js | 120 ------------------------ src/core/services/datacenter-manager.ts | 115 +++++++++++++++++++++++ src/core/services/package-manager.ts | 4 +- 3 files changed, 116 insertions(+), 123 deletions(-) delete mode 100644 src/core/services/datacenter-manager.js create mode 100644 src/core/services/datacenter-manager.ts diff --git a/src/core/services/datacenter-manager.js b/src/core/services/datacenter-manager.js deleted file mode 100644 index 1c695227..00000000 --- a/src/core/services/datacenter-manager.js +++ /dev/null @@ -1,120 +0,0 @@ -import _ from 'lodash'; -import fs from 'fs'; -import path from 'path'; -import { logger } from 'kv-logger'; -import { config } from '../config'; -import { AppError } from '../app-error'; -import { calcAllFileSha256, packageHashSync } from '../utils/security'; -import { createEmptyFolder, copy } from '../utils/common'; - -const MANIFEST_FILE_NAME = 'manifest.json'; -const CONTENTS_NAME = 'contents'; - -var proto = (module.exports = function () { - function DataCenterManager() {} - DataCenterManager.__proto__ = proto; - return DataCenterManager; -}); - -proto.getDataDir = function () { - var dataDir = _.get(config, 'common.dataDir', {}); - return dataDir; -}; - -proto.hasPackageStoreSync = function (packageHash) { - var dataDir = this.getDataDir(); - var packageHashPath = path.join(dataDir, packageHash); - var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); - var contentPath = path.join(packageHashPath, CONTENTS_NAME); - return fs.existsSync(manifestFile) && fs.existsSync(contentPath); -}; - -proto.getPackageInfo = function (packageHash) { - if (this.hasPackageStoreSync(packageHash)) { - var dataDir = this.getDataDir(); - var packageHashPath = path.join(dataDir, packageHash); - var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); - var contentPath = path.join(packageHashPath, CONTENTS_NAME); - return this.buildPackageInfo(packageHash, packageHashPath, contentPath, manifestFile); - } else { - throw new AppError("can't get PackageInfo"); - } -}; - -proto.buildPackageInfo = function (packageHash, packageHashPath, contentPath, manifestFile) { - return { - packageHash: packageHash, - path: packageHashPath, - contentPath: contentPath, - manifestFilePath: manifestFile, - }; -}; - -proto.validateStore = function (providePackageHash) { - var dataDir = this.getDataDir(); - var packageHashPath = path.join(dataDir, providePackageHash); - var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); - var contentPath = path.join(packageHashPath, CONTENTS_NAME); - if (!this.hasPackageStoreSync(providePackageHash)) { - logger.debug(`validateStore providePackageHash not exist`); - return Promise.resolve(false); - } - return calcAllFileSha256(contentPath).then((manifestJson) => { - var packageHash = packageHashSync(manifestJson); - logger.debug(`validateStore packageHash:`, packageHash); - try { - var manifestJsonLocal = JSON.parse(fs.readFileSync(manifestFile)); - } catch (e) { - logger.debug(`validateStore manifestFile contents invilad`); - return false; - } - var packageHashLocal = packageHashSync(manifestJsonLocal); - logger.debug(`validateStore packageHashLocal:`, packageHashLocal); - if (_.eq(providePackageHash, packageHash) && _.eq(providePackageHash, packageHashLocal)) { - logger.debug(`validateStore store files is ok`); - return true; - } - logger.debug(`validateStore store files broken`); - return false; - }); -}; - -proto.storePackage = function (sourceDst, force) { - logger.debug(`storePackage sourceDst:`, sourceDst); - if (_.isEmpty(force)) { - force = false; - } - var self = this; - return calcAllFileSha256(sourceDst).then((manifestJson) => { - var packageHash = packageHashSync(manifestJson); - logger.debug('storePackage manifestJson packageHash:', packageHash); - var dataDir = self.getDataDir(); - var packageHashPath = path.join(dataDir, packageHash); - var manifestFile = path.join(packageHashPath, MANIFEST_FILE_NAME); - var contentPath = path.join(packageHashPath, CONTENTS_NAME); - return self.validateStore(packageHash).then((isValidate) => { - if (!force && isValidate) { - return self.buildPackageInfo( - packageHash, - packageHashPath, - contentPath, - manifestFile, - ); - } else { - logger.debug(`storePackage cover from sourceDst:`, sourceDst); - return createEmptyFolder(packageHashPath).then(() => { - return copy(sourceDst, contentPath).then(() => { - var manifestString = JSON.stringify(manifestJson); - fs.writeFileSync(manifestFile, manifestString); - return self.buildPackageInfo( - packageHash, - packageHashPath, - contentPath, - manifestFile, - ); - }); - }); - } - }); - }); -}; diff --git a/src/core/services/datacenter-manager.ts b/src/core/services/datacenter-manager.ts new file mode 100644 index 00000000..dbcc004f --- /dev/null +++ b/src/core/services/datacenter-manager.ts @@ -0,0 +1,115 @@ +import fs from 'fs'; +import path from 'path'; +import { logger } from 'kv-logger'; +import _ from 'lodash'; +import { AppError } from '../app-error'; +import { config } from '../config'; +import { createEmptyFolder, copy } from '../utils/common'; +import { calcAllFileSha256, packageHashSync } from '../utils/security'; + +const manifestFilename = 'manifest.json'; +const contentsName = 'contents'; + +class DataCenterManager { + getDataDir() { + return config.common.dataDir; + } + + hasPackageStoreSync(packageHash: string) { + const dataDir = this.getDataDir(); + const packageHashPath = path.join(dataDir, packageHash); + const manifestFile = path.join(packageHashPath, manifestFilename); + const contentPath = path.join(packageHashPath, contentsName); + return fs.existsSync(manifestFile) && fs.existsSync(contentPath); + } + + getPackageInfo(packageHash: string) { + if (this.hasPackageStoreSync(packageHash)) { + const dataDir = this.getDataDir(); + const packageHashPath = path.join(dataDir, packageHash); + const manifestFile = path.join(packageHashPath, manifestFilename); + const contentPath = path.join(packageHashPath, contentsName); + return this.buildPackageInfo(packageHash, packageHashPath, contentPath, manifestFile); + } + throw new AppError("can't get PackageInfo"); + } + + buildPackageInfo( + packageHash: string, + packageHashPath: string, + contentPath: string, + manifestFile: string, + ) { + return { + packageHash, + path: packageHashPath, + contentPath, + manifestFilePath: manifestFile, + }; + } + + validateStore(providePackageHash: string) { + const dataDir = this.getDataDir(); + const packageHashPath = path.join(dataDir, providePackageHash); + const manifestFile = path.join(packageHashPath, manifestFilename); + const contentPath = path.join(packageHashPath, contentsName); + if (!this.hasPackageStoreSync(providePackageHash)) { + logger.debug(`validateStore providePackageHash not exist`); + return Promise.resolve(false); + } + return calcAllFileSha256(contentPath).then((manifestJson) => { + const packageHash = packageHashSync(manifestJson); + let manifestJsonLocal; + try { + manifestJsonLocal = JSON.parse(fs.readFileSync(manifestFile, { encoding: 'utf8' })); + } catch (e) { + logger.debug(`validateStore manifestFile contents invilad`); + return false; + } + const packageHashLocal = packageHashSync(manifestJsonLocal); + if ( + _.eq(providePackageHash, packageHash) && + _.eq(providePackageHash, packageHashLocal) + ) { + logger.debug(`validateStore store files is ok`); + return true; + } + logger.debug(`validateStore store files broken`); + return false; + }); + } + + storePackage(sourceDst: string, force = false) { + return calcAllFileSha256(sourceDst).then((manifestJson) => { + const packageHash = packageHashSync(manifestJson); + const dataDir = this.getDataDir(); + const packageHashPath = path.join(dataDir, packageHash); + const manifestFile = path.join(packageHashPath, manifestFilename); + const contentPath = path.join(packageHashPath, contentsName); + return this.validateStore(packageHash).then((isValidate) => { + if (!force && isValidate) { + return this.buildPackageInfo( + packageHash, + packageHashPath, + contentPath, + manifestFile, + ); + } + return createEmptyFolder(packageHashPath).then(() => { + return copy(sourceDst, contentPath).then(() => { + const manifestString = JSON.stringify(manifestJson); + fs.writeFileSync(manifestFile, manifestString); + return this.buildPackageInfo( + packageHash, + packageHashPath, + contentPath, + manifestFile, + ); + }); + }); + }); + }); + } +} + +export const dataCenterManager = new DataCenterManager(); diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index 4f128f7d..b061023a 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -8,7 +8,6 @@ import _ from 'lodash'; import { Op } from 'sequelize'; import slash from 'slash'; import yazl from 'yazl'; - import { Apps } from '../../models/apps'; import { Deployments, generateDeploymentsLabelId } from '../../models/deployments'; import { DeploymentsHistory } from '../../models/deployments_history'; @@ -41,8 +40,7 @@ import { sequelize } from '../utils/connections'; import { qetag } from '../utils/qetag'; import { randToken, uploadPackageType } from '../utils/security'; import { uploadFileToStorage } from '../utils/storage'; - -const dataCenterManager = require('./datacenter-manager')(); +import { dataCenterManager } from './datacenter-manager'; class PackageManager { getMetricsbyPackageId(packageId) { From 67384977a2bd1631b11422dd62d71123a49dd693 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 18 Feb 2022 14:09:05 +0800 Subject: [PATCH 191/347] refactor: turn email manager to ts --- src/core/config.ts | 2 +- src/core/services/account-manager.ts | 7 ++--- src/core/services/email-manager.js | 47 ---------------------------- src/core/services/email-manager.ts | 45 ++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 53 deletions(-) delete mode 100644 src/core/services/email-manager.js create mode 100644 src/core/services/email-manager.ts diff --git a/src/core/config.ts b/src/core/config.ts index d123124c..9ffdf088 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -114,7 +114,7 @@ export const config = { // Config for smtp email,register module need validate user email project source https://github.com/nodemailer/nodemailer smtpConfig: { host: process.env.SMTP_HOST, - port: process.env.SMTP_PORT || 465, + port: toNumber(process.env.SMTP_PORT, 465), secure: true, auth: { user: process.env.SMTP_USERNAME, diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts index 81266476..67621a09 100644 --- a/src/core/services/account-manager.ts +++ b/src/core/services/account-manager.ts @@ -2,7 +2,6 @@ import { logger } from 'kv-logger'; import _ from 'lodash'; import moment from 'moment'; import validator from 'validator'; - import { findCollaboratorsByAppNameAndUid } from '../../models/collaborators'; import { UserTokens } from '../../models/user_tokens'; import { Users } from '../../models/users'; @@ -10,8 +9,7 @@ import { AppError } from '../app-error'; import { config } from '../config'; import { redisClient } from '../utils/connections'; import { passwordVerifySync, randToken, md5, passwordHashSync } from '../utils/security'; - -const EmailManager = require('./email-manager'); +import { emailManager } from './email-manager'; const loginLimitPre = 'LOGIN_LIMIT_PRE_'; const registerCode = 'REGISTER_CODE_'; @@ -172,8 +170,7 @@ class AccountManager { }) .then((token) => { // 将token发送到用户邮箱 - const emailManager = new EmailManager(); - return emailManager.sendRegisterCode(email, token); + return emailManager.sendRegisterCodeMail(email, token); }); } diff --git a/src/core/services/email-manager.js b/src/core/services/email-manager.js deleted file mode 100644 index 01a32956..00000000 --- a/src/core/services/email-manager.js +++ /dev/null @@ -1,47 +0,0 @@ -import _ from 'lodash'; -import nodemailer from 'nodemailer'; - -import { config } from '../config'; -import { AppError } from '../app-error'; - -var proto = (module.exports = function () { - function EmailManager() {} - EmailManager.__proto__ = proto; - return EmailManager; -}); - -proto.sendMail = function (options) { - return new Promise((resolve, reject) => { - if (!_.get(options, 'to')) { - reject(new AppError('to是必传参数')); - return; - } - var smtpConfig = _.get(config, 'smtpConfig'); - if (!smtpConfig || !smtpConfig.host) { - resolve({}); - } - var transporter = nodemailer.createTransport(smtpConfig); - var sendEmailAddress = _.get(smtpConfig, 'auth.user'); - var defaultMailOptions = { - from: `"CodePush Server" <${sendEmailAddress}>`, // sender address - to: '', // list of receivers 必传参数 - subject: 'CodePush Server', // Subject line - html: '', // html body - }; - var mailOptions = _.assign(defaultMailOptions, options); - transporter.sendMail(mailOptions, function (error, info) { - if (error) { - reject(error); - return; - } - resolve(info); - }); - }); -}; - -proto.sendRegisterCode = function (email, code) { - return proto.sendMail({ - to: email, - html: `
您接收的验证码为: ${code} 20分钟内有效
`, - }); -}; diff --git a/src/core/services/email-manager.ts b/src/core/services/email-manager.ts new file mode 100644 index 00000000..06082b78 --- /dev/null +++ b/src/core/services/email-manager.ts @@ -0,0 +1,45 @@ +import _ from 'lodash'; +import nodemailer from 'nodemailer'; +import { AppError } from '../app-error'; +import { config } from '../config'; + +class EmailManager { + sendMail(options: { to: string; html: string; subject?: string; from?: string }) { + return new Promise((resolve, reject) => { + if (!_.get(options, 'to')) { + reject(new AppError('to是必传参数')); + return; + } + const { smtpConfig } = config; + if (!smtpConfig || !smtpConfig.host) { + resolve({}); + return; + } + const transporter = nodemailer.createTransport(smtpConfig); + const sendEmailAddress = smtpConfig.auth.user; + const defaultMailOptions = { + from: `"CodePush Server" <${sendEmailAddress}>`, // sender address + to: '', // list of receivers 必传参数 + subject: 'CodePush Server', // Subject line + html: '', // html body + }; + const mailOptions = _.assign(defaultMailOptions, options); + transporter.sendMail(mailOptions, (error, info) => { + if (error) { + reject(error); + return; + } + resolve(info); + }); + }); + } + + sendRegisterCodeMail(email: string, code: string) { + return this.sendMail({ + to: email, + html: `
您接收的验证码为: ${code} 20分钟内有效
`, + }); + } +} + +export const emailManager = new EmailManager(); From 4a9e9dfb50ed8f12ed453db3ee17dd2ef6281345 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 18 Feb 2022 14:43:24 +0800 Subject: [PATCH 192/347] refactor: turn deployments manager to ts --- src/core/services/account-manager.ts | 4 +- src/core/services/deployments-manager.ts | 278 +++++++++++++++++++++++ src/core/services/deployments.js | 278 ----------------------- src/models/deployments_versions.ts | 2 +- src/models/users.ts | 2 +- src/routes/apps.js | 49 ++-- 6 files changed, 301 insertions(+), 312 deletions(-) create mode 100644 src/core/services/deployments-manager.ts delete mode 100644 src/core/services/deployments.js diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts index 67621a09..650d7840 100644 --- a/src/core/services/account-manager.ts +++ b/src/core/services/account-manager.ts @@ -59,9 +59,9 @@ class AccountManager { return _.map(tokens, (v) => { return { name: '(hidden)', - createdTime: moment(v.created_at).unix(), + createdTime: moment(v.created_at).valueOf(), createdBy: v.created_by, - expires: moment(v.expires_at).unix(), + expires: moment(v.expires_at).valueOf(), friendlyName: v.name, description: v.description, }; diff --git a/src/core/services/deployments-manager.ts b/src/core/services/deployments-manager.ts new file mode 100644 index 00000000..b41e2f4a --- /dev/null +++ b/src/core/services/deployments-manager.ts @@ -0,0 +1,278 @@ +import { logger } from 'kv-logger'; +import _ from 'lodash'; +import moment from 'moment'; +import { Deployments } from '../../models/deployments'; +import { DeploymentsHistory } from '../../models/deployments_history'; +import { + DeploymentsVersions, + DeploymentsVersionsInterface, +} from '../../models/deployments_versions'; +import { Packages, PackagesInterface } from '../../models/packages'; +import { PackagesDiff } from '../../models/packages_diff'; +import { PackagesMetrics } from '../../models/packages_metrics'; +import { Users, UsersInterface } from '../../models/users'; +import { AppError } from '../app-error'; +import { getBlobDownloadUrl } from '../utils/common'; +import { sequelize } from '../utils/connections'; +import { randToken } from '../utils/security'; + +class DeploymentsManager { + getAllPackageIdsByDeploymentsId(deploymentsId: number) { + return Packages.findAll({ where: { deployment_id: deploymentsId } }); + } + + existDeloymentName(appId: number, name: string) { + return Deployments.findOne({ + where: { appid: appId, name }, + }).then((data) => { + if (!_.isEmpty(data)) { + throw new AppError(`${name} name does Exist!`); + } else { + return data; + } + }); + } + + addDeloyment(name: string, appId: number, uid: number) { + return Users.findByPk(uid).then((user) => { + if (_.isEmpty(user)) { + throw new AppError("can't find user"); + } + return this.existDeloymentName(appId, name).then(() => { + const { identical } = user; + const deploymentKey = randToken(28) + identical; + return Deployments.create({ + appid: appId, + name, + deployment_key: deploymentKey, + last_deployment_version_id: 0, + label_id: 0, + }); + }); + }); + } + + renameDeloymentByName(deploymentName: string, appId: number, newName: string) { + return this.existDeloymentName(appId, newName).then(() => { + return Deployments.update( + { name: newName }, + { where: { name: deploymentName, appid: appId } }, + ).then(([affectedCount]) => { + if (_.gt(affectedCount, 0)) { + return { name: newName }; + } + throw new AppError(`does not find the deployment "${deploymentName}"`); + }); + }); + } + + deleteDeloymentByName(deploymentName: string, appId: number) { + return Deployments.destroy({ + where: { name: deploymentName, appid: appId }, + }).then((rowNum) => { + if (_.gt(rowNum, 0)) { + return { name: `${deploymentName}` }; + } + throw new AppError(`does not find the deployment "${deploymentName}"`); + }); + } + + findDeloymentByName(deploymentName: string, appId: number) { + logger.debug('findDeloymentByName', { + name: deploymentName, + appId, + }); + return Deployments.findOne({ + where: { name: deploymentName, appid: appId }, + }); + } + + findPackagesAndOtherInfos(packageId: number) { + return Packages.findOne({ + where: { id: packageId }, + }) + .then((packageInfo) => { + if (!packageInfo) { + return null; + } + return Promise.all([ + Promise.resolve(packageInfo), + PackagesDiff.findAll({ + where: { package_id: packageId }, + }).then((diffs) => { + if (diffs.length > 0) { + return _.reduce( + diffs, + (result, v) => { + // eslint-disable-next-line no-param-reassign + result[v.diff_against_package_hash] = { + size: v.diff_size, + url: getBlobDownloadUrl(v.diff_blob_url), + }; + return result; + }, + {} as Record, + ); + } + return null; + }), + Users.findOne({ + where: { id: packageInfo.released_by }, + }), + DeploymentsVersions.findByPk(packageInfo.deployment_version_id), + ]); + }) + .then(([packageInfo, packageDiffMap, userInfo, deploymentsVersions]) => { + return { + packageInfo, + packageDiffMap, + userInfo, + deploymentsVersions, + }; + }); + } + + findDeloymentsPackages(deploymentsVersionsId) { + return DeploymentsVersions.findOne({ + where: { id: deploymentsVersionsId }, + }).then((deploymentsVersionsInfo) => { + if (deploymentsVersionsInfo) { + return this.findPackagesAndOtherInfos(deploymentsVersionsInfo.current_package_id); + } + return null; + }); + } + + formatPackage(packageVersion: { + packageInfo: PackagesInterface; + userInfo: UsersInterface; + packageDiffMap: Record; + deploymentsVersions: DeploymentsVersionsInterface; + }) { + if (!packageVersion) { + return null; + } + return { + description: packageVersion.packageInfo.description, + isDisabled: false, + isMandatory: packageVersion.packageInfo.is_mandatory === 1, + rollout: 100, + appVersion: packageVersion.deploymentsVersions.app_version, + packageHash: packageVersion.packageInfo.package_hash, + blobUrl: getBlobDownloadUrl(packageVersion.packageInfo.blob_url), + size: packageVersion.packageInfo.size, + manifestBlobUrl: getBlobDownloadUrl(packageVersion.packageInfo.manifest_blob_url), + diffPackageMap: packageVersion.packageDiffMap, + releaseMethod: packageVersion.packageInfo.release_method, + uploadTime: moment(packageVersion.packageInfo.updated_at).valueOf(), + originalLabel: packageVersion.packageInfo.original_label, + originalDeployment: packageVersion.packageInfo.original_deployment, + label: packageVersion.packageInfo.label, + releasedBy: packageVersion.userInfo.email, + }; + } + + listDeloyments(appId: number) { + return Deployments.findAll({ where: { appid: appId } }).then((deploymentsInfos) => { + if (_.isEmpty(deploymentsInfos)) { + return []; + } + return Promise.all( + deploymentsInfos.map((v) => { + return this.listDeloyment(v); + }), + ); + }); + } + + listDeloyment(deploymentInfo) { + return this.findDeloymentsPackages([deploymentInfo.last_deployment_version_id]) + .then(this.formatPackage) + .then((packageInfo) => { + return { + createdTime: moment(deploymentInfo.created_at).valueOf(), + id: `${deploymentInfo.id}`, + key: deploymentInfo.deployment_key, + name: deploymentInfo.name, + package: packageInfo, + }; + }); + } + + getDeploymentHistory(deploymentId) { + return DeploymentsHistory.findAll({ + where: { deployment_id: deploymentId }, + order: [['id', 'desc']], + limit: 15, + }) + .then((history) => { + return _.map(history, (v) => { + return v.package_id; + }); + }) + .then((packageIds) => { + return Promise.all( + packageIds.map((v) => { + return this.findPackagesAndOtherInfos(v).then(this.formatPackage); + }), + ); + }); + } + + deleteDeploymentHistory(deploymentId) { + return sequelize.transaction((t) => { + return Promise.all([ + Deployments.update( + { last_deployment_version_id: 0, label_id: 0 }, + { where: { id: deploymentId }, transaction: t }, + ), + DeploymentsHistory.findAll({ + where: { deployment_id: deploymentId }, + order: [['id', 'desc']], + limit: 1000, + }).then((rs) => { + return Promise.all( + rs.map((v) => { + return v.destroy({ transaction: t }); + }), + ); + }), + DeploymentsVersions.findAll({ + where: { deployment_id: deploymentId }, + order: [['id', 'desc']], + limit: 1000, + }).then((rs) => { + return Promise.all( + rs.map((v) => { + return v.destroy({ transaction: t }); + }), + ); + }), + Packages.findAll({ + where: { deployment_id: deploymentId }, + order: [['id', 'desc']], + limit: 1000, + }).then((rs) => { + return Promise.all( + rs.map((v) => { + return v.destroy({ transaction: t }).then(() => { + return Promise.all([ + PackagesMetrics.destroy({ + where: { package_id: v.get('id') }, + transaction: t, + }), + PackagesDiff.destroy({ + where: { package_id: v.get('id') }, + transaction: t, + }), + ]); + }); + }), + ); + }), + ]); + }); + } +} + +export const deploymentsManager = new DeploymentsManager(); diff --git a/src/core/services/deployments.js b/src/core/services/deployments.js deleted file mode 100644 index ca4ae2b6..00000000 --- a/src/core/services/deployments.js +++ /dev/null @@ -1,278 +0,0 @@ -import _ from 'lodash'; -import moment from 'moment'; -import { logger } from 'kv-logger'; - -import { Deployments } from '../../models/deployments'; -import { DeploymentsVersions } from '../../models/deployments_versions'; -import { DeploymentsHistory } from '../../models/deployments_history'; -import { Packages } from '../../models/packages'; -import { PackagesDiff } from '../../models/packages_diff'; -import { PackagesMetrics } from '../../models/packages_metrics'; -import { Users } from '../../models/users'; -import { sequelize } from '../utils/connections'; -import { AppError } from '../app-error'; -import { randToken } from '../../core/utils/security'; -import { getBlobDownloadUrl } from '../../core/utils/common'; - -var proto = (module.exports = function () { - function Deployments() {} - Deployments.__proto__ = proto; - return Deployments; -}); - -proto.getAllPackageIdsByDeploymentsId = function (deploymentsId) { - return Packages.findAll({ where: { deployment_id: deploymentsId } }); -}; - -proto.existDeloymentName = function (appId, name) { - return Deployments.findOne({ - where: { appid: appId, name: name }, - }).then((data) => { - if (!_.isEmpty(data)) { - throw new AppError(name + ' name does Exist!'); - } else { - return data; - } - }); -}; - -proto.addDeloyment = function (name, appId, uid) { - var self = this; - return Users.findByPk(uid).then((user) => { - if (_.isEmpty(user)) { - throw new AppError("can't find user"); - } - return self.existDeloymentName(appId, name).then(() => { - var identical = user.identical; - var deploymentKey = randToken(28) + identical; - return Deployments.create({ - appid: appId, - name: name, - deployment_key: deploymentKey, - last_deployment_version_id: 0, - label_id: 0, - }); - }); - }); -}; - -proto.renameDeloymentByName = function (deploymentName, appId, newName) { - return this.existDeloymentName(appId, newName).then(() => { - return Deployments.update( - { name: newName }, - { where: { name: deploymentName, appid: appId } }, - ).then(([affectedCount, affectedRow]) => { - if (_.gt(affectedCount, 0)) { - return { name: newName }; - } else { - throw new AppError(`does not find the deployment "${deploymentName}"`); - } - }); - }); -}; - -proto.deleteDeloymentByName = function (deploymentName, appId) { - return Deployments.destroy({ - where: { name: deploymentName, appid: appId }, - }).then((rowNum) => { - if (_.gt(rowNum, 0)) { - return { name: `${deploymentName}` }; - } else { - throw new AppError(`does not find the deployment "${deploymentName}"`); - } - }); -}; - -proto.findDeloymentByName = function (deploymentName, appId) { - logger.debug('findDeloymentByName', { - name: deploymentName, - appId, - }); - return Deployments.findOne({ - where: { name: deploymentName, appid: appId }, - }); -}; - -proto.findPackagesAndOtherInfos = function (packageId) { - return Packages.findOne({ - where: { id: packageId }, - }) - .then((packageInfo) => { - if (!packageInfo) { - return null; - } - return Promise.all([ - Promise.resolve(packageInfo), - PackagesDiff.findAll({ - where: { package_id: packageId }, - }).then((diffs) => { - if (diffs.length > 0) { - return _.reduce( - diffs, - (result, v) => { - result[_.get(v, 'diff_against_package_hash')] = { - size: _.get(v, 'diff_size'), - url: getBlobDownloadUrl(_.get(v, 'diff_blob_url')), - }; - return result; - }, - {}, - ); - } - return null; - }), - Users.findOne({ - where: { id: packageInfo.released_by }, - }), - DeploymentsVersions.findByPk(packageInfo.deployment_version_id), - ]); - }) - .then(([packageInfo, packageDiffMap, userInfo, deploymentsVersions]) => { - return { - packageInfo, - packageDiffMap, - userInfo, - deploymentsVersions, - }; - }); -}; - -proto.findDeloymentsPackages = function (deploymentsVersionsId) { - var self = this; - return DeploymentsVersions.findOne({ - where: { id: deploymentsVersionsId }, - }).then((deploymentsVersionsInfo) => { - if (deploymentsVersionsInfo) { - return self.findPackagesAndOtherInfos(deploymentsVersionsInfo.current_package_id); - } - return null; - }); -}; - -proto.formatPackage = function (packageVersion) { - if (!packageVersion) { - return null; - } - return { - description: _.get(packageVersion, 'packageInfo.description'), - isDisabled: false, - isMandatory: _.get(packageVersion, 'packageInfo.is_mandatory') == 1 ? true : false, - rollout: 100, - appVersion: _.get(packageVersion, 'deploymentsVersions.app_version'), - packageHash: _.get(packageVersion, 'packageInfo.package_hash'), - blobUrl: getBlobDownloadUrl(_.get(packageVersion, 'packageInfo.blob_url')), - size: _.get(packageVersion, 'packageInfo.size'), - manifestBlobUrl: getBlobDownloadUrl(_.get(packageVersion, 'packageInfo.manifest_blob_url')), - diffPackageMap: _.get(packageVersion, 'packageDiffMap'), - releaseMethod: _.get(packageVersion, 'packageInfo.release_method'), - uploadTime: parseInt(moment(_.get(packageVersion, 'packageInfo.updated_at')).format('x')), - originalLabel: _.get(packageVersion, 'packageInfo.original_label'), - originalDeployment: _.get(packageVersion, 'packageInfo.original_deployment'), - label: _.get(packageVersion, 'packageInfo.label'), - releasedBy: _.get(packageVersion, 'userInfo.email'), - }; -}; - -proto.listDeloyments = function (appId) { - var self = this; - return Deployments.findAll({ where: { appid: appId } }).then((deploymentsInfos) => { - if (_.isEmpty(deploymentsInfos)) { - return []; - } - return Promise.all( - deploymentsInfos.map((v) => { - return self.listDeloyment(v); - }), - ); - }); -}; - -proto.listDeloyment = function (deploymentInfo) { - return this.findDeloymentsPackages([deploymentInfo.last_deployment_version_id]) - .then(this.formatPackage) - .then((packageInfo) => { - return { - createdTime: parseInt(moment(deploymentInfo.created_at).format('x')), - id: `${deploymentInfo.id}`, - key: deploymentInfo.deployment_key, - name: deploymentInfo.name, - package: packageInfo, - }; - }); -}; - -proto.getDeploymentHistory = function (deploymentId) { - var self = this; - return DeploymentsHistory.findAll({ - where: { deployment_id: deploymentId }, - order: [['id', 'desc']], - limit: 15, - }) - .then((history) => { - return _.map(history, (v) => { - return v.package_id; - }); - }) - .then((packageIds) => { - return Promise.all( - packageIds.map((v) => { - return self.findPackagesAndOtherInfos(v).then(self.formatPackage); - }), - ); - }); -}; - -proto.deleteDeploymentHistory = function (deploymentId) { - return sequelize.transaction((t) => { - return Promise.all([ - Deployments.update( - { last_deployment_version_id: 0, label_id: 0 }, - { where: { id: deploymentId }, transaction: t }, - ), - DeploymentsHistory.findAll({ - where: { deployment_id: deploymentId }, - order: [['id', 'desc']], - limit: 1000, - }).then((rs) => { - return Promise.all( - rs.map((v) => { - return v.destroy({ transaction: t }); - }), - ); - }), - DeploymentsVersions.findAll({ - where: { deployment_id: deploymentId }, - order: [['id', 'desc']], - limit: 1000, - }).then((rs) => { - return Promise.all( - rs.map((v) => { - return v.destroy({ transaction: t }); - }), - ); - }), - Packages.findAll({ - where: { deployment_id: deploymentId }, - order: [['id', 'desc']], - limit: 1000, - }).then((rs) => { - return Promise.all( - rs.map((v) => { - return v.destroy({ transaction: t }).then(() => { - return Promise.all([ - PackagesMetrics.destroy({ - where: { package_id: v.get('id') }, - transaction: t, - }), - PackagesDiff.destroy({ - where: { package_id: v.get('id') }, - transaction: t, - }), - ]); - }); - }), - ); - }), - ]); - }); -}; diff --git a/src/models/deployments_versions.ts b/src/models/deployments_versions.ts index 9baaf601..af45c387 100644 --- a/src/models/deployments_versions.ts +++ b/src/models/deployments_versions.ts @@ -1,7 +1,7 @@ import { DataTypes, Model } from 'sequelize'; import { sequelize } from '../core/utils/connections'; -interface DeploymentsVersionsInterface extends Model { +export interface DeploymentsVersionsInterface extends Model { id: number; deployment_id: number; app_version: string; diff --git a/src/models/users.ts b/src/models/users.ts index 9bc148b1..9228b4a5 100644 --- a/src/models/users.ts +++ b/src/models/users.ts @@ -1,7 +1,7 @@ import { DataTypes, Model } from 'sequelize'; import { sequelize } from '../core/utils/connections'; -interface UsersInterface extends Model { +export interface UsersInterface extends Model { id: number; username: string; password: string; diff --git a/src/routes/apps.js b/src/routes/apps.js index 7bc56f4f..4a77c0ff 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -23,9 +23,9 @@ import { import { deleteFolderSync } from '../core/utils/common'; import { appManager } from '../core/services/app-manager'; import { collaboratorsManager } from '../core/services/collaborators-manager'; +import { deploymentsManager } from '../core/services/deployments-manager'; var middleware = require('../core/middleware'); -var Deployments = require('../core/services/deployments'); const router = express.Router(); @@ -54,11 +54,10 @@ router.get('/', middleware.checkToken, (req, res, next) => { router.get('/:appName/deployments', middleware.checkToken, (req, res, next) => { var uid = req.users.id; var appName = _.trim(req.params.appName); - var deployments = new Deployments(); accountManager .collaboratorCan(uid, appName) .then((col) => { - return deployments.listDeloyments(col.appid); + return deploymentsManager.listDeloyments(col.appid); }) .then((data) => { res.send({ deployments: data }); @@ -76,17 +75,17 @@ router.get('/:appName/deployments/:deploymentName', middleware.checkToken, (req, var uid = req.users.id; var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); - var deployments = new Deployments(); accountManager .collaboratorCan(uid, appName) .then((col) => { - return deployments.findDeloymentByName(deploymentName, col.appid); + return deploymentsManager.findDeloymentByName(deploymentName, col.appid); }) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { throw new AppError('does not find the deployment'); } - res.send({ deployment: deployments.listDeloyment(deploymentInfo) }); + // TODO: check if this works as expected + res.send({ deployment: deploymentsManager.listDeloyment(deploymentInfo) }); return true; }) .catch((e) => { @@ -102,11 +101,10 @@ router.post('/:appName/deployments', middleware.checkToken, (req, res, next) => var uid = req.users.id; var appName = _.trim(req.params.appName); var name = req.body.name; - var deployments = new Deployments(); accountManager .ownerCan(uid, appName) .then((col) => { - return deployments.addDeloyment(name, col.appid, uid); + return deploymentsManager.addDeloyment(name, col.appid, uid); }) .then((data) => { res.send({ deployment: { name: data.name, key: data.deployment_key } }); @@ -127,11 +125,10 @@ router.get( var uid = req.users.id; var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); - var deployments = new Deployments(); accountManager .collaboratorCan(uid, appName) .then((col) => { - return deployments + return deploymentsManager .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { @@ -141,7 +138,7 @@ router.get( }); }) .then((deploymentInfo) => { - return deployments.getAllPackageIdsByDeploymentsId(deploymentInfo.id); + return deploymentsManager.getAllPackageIdsByDeploymentsId(deploymentInfo.id); }) .then((packagesInfos) => { return packagesInfos.reduce((prev, v) => { @@ -180,11 +177,10 @@ router.get( var uid = req.users.id; var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); - var deployments = new Deployments(); accountManager .collaboratorCan(uid, appName) .then((col) => { - return deployments + return deploymentsManager .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { @@ -194,7 +190,7 @@ router.get( }); }) .then((deploymentInfo) => { - return deployments.getDeploymentHistory(deploymentInfo.id); + return deploymentsManager.getDeploymentHistory(deploymentInfo.id); }) .then((rs) => { res.send({ history: _.pullAll(rs, [null, false]) }); @@ -216,11 +212,10 @@ router.delete( var uid = req.users.id; var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); - var deployments = new Deployments(); accountManager .ownerCan(uid, appName) .then((col) => { - return deployments + return deploymentsManager .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { @@ -230,7 +225,7 @@ router.delete( }); }) .then((deploymentInfo) => { - return deployments.deleteDeploymentHistory(deploymentInfo.id); + return deploymentsManager.deleteDeploymentHistory(deploymentInfo.id); }) .then((rs) => { res.send('ok'); @@ -250,11 +245,10 @@ router.patch('/:appName/deployments/:deploymentName', middleware.checkToken, (re var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); var uid = req.users.id; - var deployments = new Deployments(); accountManager .ownerCan(uid, appName) .then((col) => { - return deployments.renameDeloymentByName(deploymentName, col.appid, name); + return deploymentsManager.renameDeloymentByName(deploymentName, col.appid, name); }) .then((data) => { res.send({ deployment: data }); @@ -272,11 +266,10 @@ router.delete('/:appName/deployments/:deploymentName', middleware.checkToken, (r var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); var uid = req.users.id; - var deployments = new Deployments(); accountManager .ownerCan(uid, appName) .then((col) => { - return deployments.deleteDeloymentByName(deploymentName, col.appid); + return deploymentsManager.deleteDeloymentByName(deploymentName, col.appid); }) .then((data) => { res.send({ deployment: data }); @@ -303,7 +296,6 @@ router.post( appName, deploymentName, }); - var deployments = new Deployments(); accountManager .collaboratorCan(uid, appName) .then((col) => { @@ -313,7 +305,7 @@ router.post( deploymentName, }); - return deployments + return deploymentsManager .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { @@ -408,12 +400,11 @@ router.patch( var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); var uid = req.users.id; - var deployments = new Deployments(); var label = _.get(req, 'body.packageInfo.label'); accountManager .collaboratorCan(uid, appName) .then((col) => { - return deployments + return deploymentsManager .findDeloymentByName(deploymentName, col.appid) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { @@ -477,14 +468,13 @@ router.post( var sourceDeploymentName = _.trim(req.params.sourceDeploymentName); var destDeploymentName = _.trim(req.params.destDeploymentName); var uid = req.users.id; - var deployments = new Deployments(); accountManager .collaboratorCan(uid, appName) .then((col) => { var appId = col.appid; return Promise.all([ - deployments.findDeloymentByName(sourceDeploymentName, appId), - deployments.findDeloymentByName(destDeploymentName, appId), + deploymentsManager.findDeloymentByName(sourceDeploymentName, appId), + deploymentsManager.findDeloymentByName(destDeploymentName, appId), ]) .then(([sourceDeploymentInfo, destDeploymentInfo]) => { if (!sourceDeploymentInfo) { @@ -559,11 +549,10 @@ var rollbackCb = function (req, res, next) { deploymentName, targetLabel, }); - var deployments = new Deployments(); accountManager .collaboratorCan(uid, appName) .then((col) => { - return deployments.findDeloymentByName(deploymentName, col.appid); + return deploymentsManager.findDeloymentByName(deploymentName, col.appid); }) .then((dep) => { return packageManager From 275cf611fe21436c49aa725f42e782d3881d31a5 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 18 Feb 2022 15:01:36 +0800 Subject: [PATCH 193/347] refactor: turn middleware to ts --- src/core/{middleware.js => middleware.ts} | 64 +-- src/routes/accessKeys.js | 9 +- src/routes/account.js | 11 +- src/routes/apps.js | 583 +++++++++++----------- src/routes/index.js | 6 +- src/routes/users.js | 8 +- 6 files changed, 326 insertions(+), 355 deletions(-) rename src/core/{middleware.js => middleware.ts} (70%) diff --git a/src/core/middleware.js b/src/core/middleware.ts similarity index 70% rename from src/core/middleware.js rename to src/core/middleware.ts index bad1afb9..ec996588 100644 --- a/src/core/middleware.js +++ b/src/core/middleware.ts @@ -1,16 +1,15 @@ -import { Op } from 'sequelize'; +import jwt from 'jsonwebtoken'; import _ from 'lodash'; import moment from 'moment'; +import { Op } from 'sequelize'; import { UserTokens } from '../models/user_tokens'; import { Users } from '../models/users'; -import { config } from '../core/config'; import { AppError, Unauthorized } from './app-error'; -import { parseToken, md5 } from '../core/utils/security'; +import { config } from './config'; +import { parseToken, md5 } from './utils/security'; -var middleware = module.exports; - -var checkAuthToken = function (authToken) { - var objToken = parseToken(authToken); +function checkAuthToken(authToken) { + const objToken = parseToken(authToken); return Users.findOne({ where: { identical: objToken.identical }, }) @@ -36,24 +35,25 @@ var checkAuthToken = function (authToken) { .then((users) => { return users; }); -}; +} -var checkAccessToken = function (accessToken) { +function checkAccessToken(accessToken) { return new Promise((resolve, reject) => { if (_.isEmpty(accessToken)) { - return reject(new Unauthorized()); + reject(new Unauthorized()); + return; } - var tokenSecret = _.get(config, 'jwt.tokenSecret'); - var jwt = require('jsonwebtoken'); + let authData; try { - var authData = jwt.verify(accessToken, tokenSecret); + authData = jwt.verify(accessToken, config.jwt.tokenSecret); } catch (e) { - return reject(new Unauthorized()); + reject(new Unauthorized()); + return; } - var uid = _.get(authData, 'uid', null); - var hash = _.get(authData, 'hash', null); - if (parseInt(uid) > 0) { - return Users.findOne({ + const uid = _.get(authData, 'uid', null); + const hash = _.get(authData, 'hash', null); + if (parseInt(uid, 10) > 0) { + Users.findOne({ where: { id: uid }, }) .then((users) => { @@ -68,18 +68,18 @@ var checkAccessToken = function (accessToken) { .catch((e) => { reject(e); }); - } else { - reject(new Unauthorized()); + return; } + reject(new Unauthorized()); }); -}; +} -middleware.checkToken = function (req, res, next) { - var authArr = _.split(req.get('Authorization'), ' '); - var authType = 1; - var authToken = null; +export function checkToken(req, res, next) { + const authArr = _.split(req.get('Authorization'), ' '); + let authType = 1; + let authToken = ''; if (_.eq(authArr[0], 'Bearer')) { - authToken = authArr[1]; //Bearer + [, authToken] = authArr; // Bearer if (authToken && authToken.length > 64) { authType = 2; } else { @@ -87,11 +87,11 @@ middleware.checkToken = function (req, res, next) { } } else if (_.eq(authArr[0], 'Basic')) { authType = 2; - var b = Buffer.from(authArr[1], 'base64'); - var user = _.split(b.toString(), ':'); - authToken = _.get(user, '1'); + const b = Buffer.from(authArr[1], 'base64'); + const user = _.split(b.toString(), ':'); + [, authToken] = user; } - if (authToken && authType == 1) { + if (authToken && authType === 1) { checkAuthToken(authToken) .then((users) => { req.users = users; @@ -105,7 +105,7 @@ middleware.checkToken = function (req, res, next) { next(e); } }); - } else if (authToken && authType == 2) { + } else if (authToken && authType === 2) { checkAccessToken(authToken) .then((users) => { req.users = users; @@ -122,4 +122,4 @@ middleware.checkToken = function (req, res, next) { } else { res.send(new Unauthorized(`Auth type not supported.`)); } -}; +} diff --git a/src/routes/accessKeys.js b/src/routes/accessKeys.js index 76af58e0..85eb2fb5 100644 --- a/src/routes/accessKeys.js +++ b/src/routes/accessKeys.js @@ -5,12 +5,11 @@ import { UserTokens } from '../models/user_tokens'; import { AppError } from '../core/app-error'; import { accountManager } from '../core/services/account-manager'; import { randToken } from '../core/utils/security'; - -var middleware = require('../core/middleware'); +import { checkToken } from '../core/middleware'; const router = express.Router(); -router.get('/', middleware.checkToken, (req, res, next) => { +router.get('/', checkToken, (req, res, next) => { logger.debug('request get acceesKeys'); var uid = req.users.id; accountManager @@ -24,7 +23,7 @@ router.get('/', middleware.checkToken, (req, res, next) => { }); }); -router.post('/', middleware.checkToken, (req, res, next) => { +router.post('/', checkToken, (req, res, next) => { var uid = req.users.id; var identical = req.users.identical; var createdBy = _.trim(req.body.createdBy); @@ -83,7 +82,7 @@ router.post('/', middleware.checkToken, (req, res, next) => { }); }); -router.delete('/:name', middleware.checkToken, (req, res, next) => { +router.delete('/:name', checkToken, (req, res, next) => { var name = _.trim(decodeURI(req.params.name)); var uid = req.users.id; return UserTokens.destroy({ where: { name: name, uid: uid } }) diff --git a/src/routes/account.js b/src/routes/account.js index 6df21c38..7c47998f 100644 --- a/src/routes/account.js +++ b/src/routes/account.js @@ -1,9 +1,10 @@ -var express = require('express'); -var router = express.Router(); -var middleware = require('../core/middleware'); -var { logger } = require('kv-logger'); +import express from 'express'; +import { logger } from 'kv-logger'; +import { checkToken } from '../core/middleware'; -router.get('/', middleware.checkToken, (req, res) => { +const router = express.Router(); + +router.get('/', checkToken, (req, res) => { var userInfo = { email: req.users.email, linkedProviders: [], diff --git a/src/routes/apps.js b/src/routes/apps.js index 4a77c0ff..6a1e33ca 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -24,8 +24,7 @@ import { deleteFolderSync } from '../core/utils/common'; import { appManager } from '../core/services/app-manager'; import { collaboratorsManager } from '../core/services/collaborators-manager'; import { deploymentsManager } from '../core/services/deployments-manager'; - -var middleware = require('../core/middleware'); +import { checkToken } from '../core/middleware'; const router = express.Router(); @@ -35,7 +34,7 @@ function delay(ms) { }); } -router.get('/', middleware.checkToken, (req, res, next) => { +router.get('/', checkToken, (req, res, next) => { var uid = req.users.id; appManager .listApps(uid) @@ -51,7 +50,7 @@ router.get('/', middleware.checkToken, (req, res, next) => { }); }); -router.get('/:appName/deployments', middleware.checkToken, (req, res, next) => { +router.get('/:appName/deployments', checkToken, (req, res, next) => { var uid = req.users.id; var appName = _.trim(req.params.appName); accountManager @@ -71,7 +70,7 @@ router.get('/:appName/deployments', middleware.checkToken, (req, res, next) => { }); }); -router.get('/:appName/deployments/:deploymentName', middleware.checkToken, (req, res, next) => { +router.get('/:appName/deployments/:deploymentName', checkToken, (req, res, next) => { var uid = req.users.id; var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); @@ -97,7 +96,7 @@ router.get('/:appName/deployments/:deploymentName', middleware.checkToken, (req, }); }); -router.post('/:appName/deployments', middleware.checkToken, (req, res, next) => { +router.post('/:appName/deployments', checkToken, (req, res, next) => { var uid = req.users.id; var appName = _.trim(req.params.appName); var name = req.body.name; @@ -118,129 +117,117 @@ router.post('/:appName/deployments', middleware.checkToken, (req, res, next) => }); }); -router.get( - '/:appName/deployments/:deploymentName/metrics', - middleware.checkToken, - (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError('does not find the deployment'); +router.get('/:appName/deployments/:deploymentName/metrics', checkToken, (req, res, next) => { + var uid = req.users.id; + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deploymentsManager + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError('does not find the deployment'); + } + return deploymentInfo; + }); + }) + .then((deploymentInfo) => { + return deploymentsManager.getAllPackageIdsByDeploymentsId(deploymentInfo.id); + }) + .then((packagesInfos) => { + return packagesInfos.reduce((prev, v) => { + return prev.then((result) => { + return packageManager.getMetricsbyPackageId(v.get('id')).then((metrics) => { + if (metrics) { + result[v.get('label')] = { + active: metrics.get('active'), + downloaded: metrics.get('downloaded'), + failed: metrics.get('failed'), + installed: metrics.get('installed'), + }; } - return deploymentInfo; - }); - }) - .then((deploymentInfo) => { - return deploymentsManager.getAllPackageIdsByDeploymentsId(deploymentInfo.id); - }) - .then((packagesInfos) => { - return packagesInfos.reduce((prev, v) => { - return prev.then((result) => { - return packageManager.getMetricsbyPackageId(v.get('id')).then((metrics) => { - if (metrics) { - result[v.get('label')] = { - active: metrics.get('active'), - downloaded: metrics.get('downloaded'), - failed: metrics.get('failed'), - installed: metrics.get('installed'), - }; - } - return result; - }); + return result; }); - }, Promise.resolve({})); - }) - .then((rs) => { - res.send({ metrics: rs }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.send({ metrics: null }); - } else { - next(e); - } - }); - }, -); + }); + }, Promise.resolve({})); + }) + .then((rs) => { + res.send({ metrics: rs }); + }) + .catch((e) => { + if (e instanceof AppError) { + res.send({ metrics: null }); + } else { + next(e); + } + }); +}); -router.get( - '/:appName/deployments/:deploymentName/history', - middleware.checkToken, - (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError('does not find the deployment'); - } - return deploymentInfo; - }); - }) - .then((deploymentInfo) => { - return deploymentsManager.getDeploymentHistory(deploymentInfo.id); - }) - .then((rs) => { - res.send({ history: _.pullAll(rs, [null, false]) }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); - }, -); +router.get('/:appName/deployments/:deploymentName/history', checkToken, (req, res, next) => { + var uid = req.users.id; + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deploymentsManager + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError('does not find the deployment'); + } + return deploymentInfo; + }); + }) + .then((deploymentInfo) => { + return deploymentsManager.getDeploymentHistory(deploymentInfo.id); + }) + .then((rs) => { + res.send({ history: _.pullAll(rs, [null, false]) }); + }) + .catch((e) => { + if (e instanceof AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); +}); -router.delete( - '/:appName/deployments/:deploymentName/history', - middleware.checkToken, - (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - accountManager - .ownerCan(uid, appName) - .then((col) => { - return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError('does not find the deployment'); - } - return deploymentInfo; - }); - }) - .then((deploymentInfo) => { - return deploymentsManager.deleteDeploymentHistory(deploymentInfo.id); - }) - .then((rs) => { - res.send('ok'); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); - }, -); +router.delete('/:appName/deployments/:deploymentName/history', checkToken, (req, res, next) => { + var uid = req.users.id; + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + accountManager + .ownerCan(uid, appName) + .then((col) => { + return deploymentsManager + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError('does not find the deployment'); + } + return deploymentInfo; + }); + }) + .then((deploymentInfo) => { + return deploymentsManager.deleteDeploymentHistory(deploymentInfo.id); + }) + .then((rs) => { + res.send('ok'); + }) + .catch((e) => { + if (e instanceof AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); +}); -router.patch('/:appName/deployments/:deploymentName', middleware.checkToken, (req, res, next) => { +router.patch('/:appName/deployments/:deploymentName', checkToken, (req, res, next) => { var name = req.body.name; var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); @@ -262,7 +249,7 @@ router.patch('/:appName/deployments/:deploymentName', middleware.checkToken, (re }); }); -router.delete('/:appName/deployments/:deploymentName', middleware.checkToken, (req, res, next) => { +router.delete('/:appName/deployments/:deploymentName', checkToken, (req, res, next) => { var appName = _.trim(req.params.appName); var deploymentName = _.trim(req.params.deploymentName); var uid = req.users.id; @@ -283,185 +270,177 @@ router.delete('/:appName/deployments/:deploymentName', middleware.checkToken, (r }); }); -router.post( - '/:appName/deployments/:deploymentName/release', - middleware.checkToken, - (req, res, next) => { - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - - logger.info('try to release', { - uid, - appName, - deploymentName, - }); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - logger.debug('release user check pass', { - uid, - appName, - deploymentName, - }); - - return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - logger.debug(`does not find the deployment`); - throw new AppError('does not find the deployment'); - } - logger.debug('release deployment check ok', { - uid, - appName, - deploymentName, - }); +router.post('/:appName/deployments/:deploymentName/release', checkToken, (req, res, next) => { + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + var uid = req.users.id; - return packageManager - .parseReqFile(req) - .then((data) => { - if (data.package.mimetype != 'application/zip') { - logger.debug(`upload file type is invlidate`, data.package); - throw new AppError('upload file type is invalidate'); - } - logger.debug('release packagee parse ok', { - uid, - appName, - deploymentName, - }); + logger.info('try to release', { + uid, + appName, + deploymentName, + }); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + logger.debug('release user check pass', { + uid, + appName, + deploymentName, + }); - return packageManager - .releasePackage( - deploymentInfo.appid, - deploymentInfo.id, - data.packageInfo, - data.package.filepath, - uid, - ) - .finally(() => { - deleteFolderSync(data.package.filepath); - }); - }) - .then((packages) => { - if (packages) { - delay(1000).then(() => { - packageManager - .createDiffPackagesByLastNums( - deploymentInfo.appid, - packages, - _.get(config, 'common.diffNums', 1), - ) - .catch((e) => { - logger.error(e); - }); - }); - } - //clear cache if exists. - if (_.get(config, 'common.updateCheckCache', false) !== false) { - delay(2500).then(() => { - clientManager.clearUpdateCheckCache( - deploymentInfo.deployment_key, - '*', - '*', - '*', - ); - }); - } - return null; - }); + return deploymentsManager + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + logger.debug(`does not find the deployment`); + throw new AppError('does not find the deployment'); + } + logger.debug('release deployment check ok', { + uid, + appName, + deploymentName, }); - }) - .then(() => { - logger.info('release success', { - uid, - appName, - deploymentName, - }); - res.send('{"msg": "succeed"}'); - }) - .catch((e) => { - if (e instanceof AppError) { - logger.warn(e.message); - res.status(406).send(e.message); - } else { - next(e); - } - }); - }, -); + return packageManager + .parseReqFile(req) + .then((data) => { + if (data.package.mimetype != 'application/zip') { + logger.debug(`upload file type is invlidate`, data.package); + throw new AppError('upload file type is invalidate'); + } + logger.debug('release packagee parse ok', { + uid, + appName, + deploymentName, + }); -router.patch( - '/:appName/deployments/:deploymentName/release', - middleware.checkToken, - (req, res, next) => { - logger.debug('req.body', req.body); - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - var label = _.get(req, 'body.packageInfo.label'); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError('does not find the deployment'); - } - if (label) { return packageManager - .findPackageInfoByDeploymentIdAndLabel(deploymentInfo.id, label) - .then((data) => { - return [deploymentInfo, data]; + .releasePackage( + deploymentInfo.appid, + deploymentInfo.id, + data.packageInfo, + data.package.filepath, + uid, + ) + .finally(() => { + deleteFolderSync(data.package.filepath); }); - } else { - var deploymentVersionId = deploymentInfo.last_deployment_version_id; - return packageManager - .findLatestPackageInfoByDeployVersion(deploymentVersionId) - .then((data) => { - return [deploymentInfo, data]; + }) + .then((packages) => { + if (packages) { + delay(1000).then(() => { + packageManager + .createDiffPackagesByLastNums( + deploymentInfo.appid, + packages, + _.get(config, 'common.diffNums', 1), + ) + .catch((e) => { + logger.error(e); + }); }); - } - }) - .then(([deploymentInfo, packageInfo]) => { - if (!packageInfo) { - throw new AppError('does not find the packageInfo'); - } + } + //clear cache if exists. + if (_.get(config, 'common.updateCheckCache', false) !== false) { + delay(2500).then(() => { + clientManager.clearUpdateCheckCache( + deploymentInfo.deployment_key, + '*', + '*', + '*', + ); + }); + } + return null; + }); + }); + }) + .then(() => { + logger.info('release success', { + uid, + appName, + deploymentName, + }); + + res.send('{"msg": "succeed"}'); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.warn(e.message); + res.status(406).send(e.message); + } else { + next(e); + } + }); +}); + +router.patch('/:appName/deployments/:deploymentName/release', checkToken, (req, res, next) => { + logger.debug('req.body', req.body); + var appName = _.trim(req.params.appName); + var deploymentName = _.trim(req.params.deploymentName); + var uid = req.users.id; + var label = _.get(req, 'body.packageInfo.label'); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deploymentsManager + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError('does not find the deployment'); + } + if (label) { return packageManager - .modifyReleasePackage(packageInfo.id, _.get(req, 'body.packageInfo')) - .then(() => { - //clear cache if exists. - if (_.get(config, 'common.updateCheckCache', false) !== false) { - delay(2500).then(() => { - clientManager.clearUpdateCheckCache( - deploymentInfo.deployment_key, - '*', - '*', - '*', - ); - }); - } + .findPackageInfoByDeploymentIdAndLabel(deploymentInfo.id, label) + .then((data) => { + return [deploymentInfo, data]; }); - }); - }) - .then((data) => { - res.send(''); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); - }, -); + } else { + var deploymentVersionId = deploymentInfo.last_deployment_version_id; + return packageManager + .findLatestPackageInfoByDeployVersion(deploymentVersionId) + .then((data) => { + return [deploymentInfo, data]; + }); + } + }) + .then(([deploymentInfo, packageInfo]) => { + if (!packageInfo) { + throw new AppError('does not find the packageInfo'); + } + return packageManager + .modifyReleasePackage(packageInfo.id, _.get(req, 'body.packageInfo')) + .then(() => { + //clear cache if exists. + if (_.get(config, 'common.updateCheckCache', false) !== false) { + delay(2500).then(() => { + clientManager.clearUpdateCheckCache( + deploymentInfo.deployment_key, + '*', + '*', + '*', + ); + }); + } + }); + }); + }) + .then((data) => { + res.send(''); + }) + .catch((e) => { + if (e instanceof AppError) { + res.status(406).send(e.message); + } else { + next(e); + } + }); +}); router.post( '/:appName/deployments/:sourceDeploymentName/promote/:destDeploymentName', - middleware.checkToken, + checkToken, (req, res, next) => { logger.debug('req.body:', req.body); var appName = _.trim(req.params.appName); @@ -595,15 +574,11 @@ var rollbackCb = function (req, res, next) { }); }; -router.post('/:appName/deployments/:deploymentName/rollback', middleware.checkToken, rollbackCb); +router.post('/:appName/deployments/:deploymentName/rollback', checkToken, rollbackCb); -router.post( - '/:appName/deployments/:deploymentName/rollback/:label', - middleware.checkToken, - rollbackCb, -); +router.post('/:appName/deployments/:deploymentName/rollback/:label', checkToken, rollbackCb); -router.get('/:appName/collaborators', middleware.checkToken, (req, res, next) => { +router.get('/:appName/collaborators', checkToken, (req, res, next) => { var appName = _.trim(req.params.appName); var uid = req.users.id; accountManager @@ -636,7 +611,7 @@ router.get('/:appName/collaborators', middleware.checkToken, (req, res, next) => }); }); -router.post('/:appName/collaborators/:email', middleware.checkToken, (req, res, next) => { +router.post('/:appName/collaborators/:email', checkToken, (req, res, next) => { var appName = _.trim(req.params.appName); var email = _.trim(req.params.email); var uid = req.users.id; @@ -662,7 +637,7 @@ router.post('/:appName/collaborators/:email', middleware.checkToken, (req, res, }); }); -router.delete('/:appName/collaborators/:email', middleware.checkToken, (req, res, next) => { +router.delete('/:appName/collaborators/:email', checkToken, (req, res, next) => { var appName = _.trim(req.params.appName); var email = _.trim(decodeURI(req.params.email)); var uid = req.users.id; @@ -692,7 +667,7 @@ router.delete('/:appName/collaborators/:email', middleware.checkToken, (req, res }); }); -router.delete('/:appName', middleware.checkToken, (req, res, next) => { +router.delete('/:appName', checkToken, (req, res, next) => { var appName = _.trim(req.params.appName); var uid = req.users.id; logger.info('try remove app', { @@ -722,7 +697,7 @@ router.delete('/:appName', middleware.checkToken, (req, res, next) => { }); }); -router.patch('/:appName', middleware.checkToken, (req, res, next) => { +router.patch('/:appName', checkToken, (req, res, next) => { var newAppName = _.trim(req.body.name); var appName = _.trim(req.params.appName); var uid = req.users.id; @@ -763,7 +738,7 @@ router.patch('/:appName', middleware.checkToken, (req, res, next) => { } }); -router.post('/:appName/transfer/:email', middleware.checkToken, (req, res, next) => { +router.post('/:appName/transfer/:email', checkToken, (req, res, next) => { var appName = _.trim(req.params.appName); var email = _.trim(req.params.email); var uid = req.users.id; @@ -792,7 +767,7 @@ router.post('/:appName/transfer/:email', middleware.checkToken, (req, res, next) }); }); -router.post('/', middleware.checkToken, (req, res, next) => { +router.post('/', checkToken, (req, res, next) => { var uid = req.users.id; logger.info('try add app', { uid, diff --git a/src/routes/index.js b/src/routes/index.js index cea2daa2..4948d399 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -1,11 +1,9 @@ import express from 'express'; import _ from 'lodash'; import { logger } from 'kv-logger'; - import { AppError } from '../core/app-error'; import { clientManager } from '../core/services/client-manager'; - -var middleware = require('../core/middleware'); +import { checkToken } from '../core/middleware'; const router = express.Router(); @@ -86,7 +84,7 @@ router.post('/reportStatus/deploy', (req, res) => { res.send('OK'); }); -router.get('/authenticated', middleware.checkToken, (req, res) => { +router.get('/authenticated', checkToken, (req, res) => { return res.send({ authenticated: true }); }); diff --git a/src/routes/users.js b/src/routes/users.js index bba6d849..8fd6d4dc 100644 --- a/src/routes/users.js +++ b/src/routes/users.js @@ -1,16 +1,14 @@ import express from 'express'; import { logger } from 'kv-logger'; import _ from 'lodash'; - import { Users } from '../models/users'; import { AppError } from '../core/app-error'; import { accountManager } from '../core/services/account-manager'; - -var middleware = require('../core/middleware'); +import { checkToken } from '../core/middleware'; const router = express.Router(); -router.get('/', middleware.checkToken, (req, res) => { +router.get('/', checkToken, (req, res) => { res.send({ title: 'CodePushServer' }); }); @@ -93,7 +91,7 @@ router.get('/registerCode/exists', (req, res, next) => { }); //修改密码 -router.patch('/password', middleware.checkToken, (req, res, next) => { +router.patch('/password', checkToken, (req, res, next) => { var oldPassword = _.trim(_.get(req, 'body.oldPassword')); var newPassword = _.trim(_.get(req, 'body.newPassword')); var uid = req.users.id; From e90193c9a7692f54428978951f2560737e07a7a6 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 18 Feb 2022 20:21:54 +0800 Subject: [PATCH 194/347] chore: add test coverage back using nyc --- .gitignore | 1 + Makefile | 6 + package-lock.json | 897 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 4 +- 4 files changed, 906 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 46b2fa01..c91f3f9a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ pids *.seed *.DS_Store bin/ +.nyc_output/ # deps node_modules/ diff --git a/Makefile b/Makefile index 3ae52091..6fca7254 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,12 @@ test: @mocha tests/api/init --exit @mocha tests/api/users tests/api/auth tests/api/account tests/api/accessKeys tests/api/apps tests/api/index --exit --recursive --timeout 30000 +.PHONY: coverage +coverage: + @echo "\nCheck test coverage..." + @mocha tests/api/init --exit + @nyc mocha tests/api/users tests/api/auth tests/api/account tests/api/accessKeys tests/api/apps tests/api/index --exit --recursive --timeout 30000 + .PHONY: release-docker release-docker: @echo "\nBuilding docker image..." diff --git a/package-lock.json b/package-lock.json index 17597a11..5b8fa48e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,15 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, "@babel/code-frame": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", @@ -13,6 +22,67 @@ "@babel/highlight": "^7.16.7" } }, + "@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "dev": true + }, + "@babel/core": { + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "@babel/generator": { "version": "7.17.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", @@ -32,6 +102,26 @@ } } }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "@babel/helper-environment-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", @@ -70,6 +160,40 @@ "@babel/types": "^7.16.7" } }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, "@babel/helper-split-export-declaration": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", @@ -84,6 +208,23 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + } + }, "@babel/highlight": { "version": "7.16.10", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", @@ -281,6 +422,114 @@ "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@node-redis/bloom": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@node-redis/bloom/-/bloom-1.0.1.tgz", @@ -991,6 +1240,16 @@ } } }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "7.2.4", "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", @@ -1061,6 +1320,21 @@ "picomatch": "^2.0.4" } }, + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1377,6 +1651,19 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, "buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -1408,6 +1695,18 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" }, + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1448,6 +1747,12 @@ } } }, + "caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -1514,6 +1819,12 @@ "readdirp": "~3.6.0" } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -1550,6 +1861,12 @@ "delayed-stream": "~1.0.0" } }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -1918,6 +2235,23 @@ "q": "^1.5.1" } }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, "cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", @@ -2096,6 +2430,23 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + } + } + }, "default-user-agent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", @@ -2257,6 +2608,12 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "electron-to-chromium": { + "version": "1.4.71", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", + "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2328,6 +2685,12 @@ "is-symbol": "^1.0.2" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3197,6 +3560,17 @@ "unpipe": "~1.0.0" } }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -3227,6 +3601,16 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3287,6 +3671,12 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, "fs-access": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", @@ -3375,6 +3765,12 @@ "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz", "integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==" }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3390,6 +3786,12 @@ "has-symbols": "^1.0.1" } }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "get-pkg-repo": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", @@ -3730,6 +4132,24 @@ "has-symbols": "^1.0.2" } }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -3755,6 +4175,12 @@ "lru-cache": "^6.0.0" } }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "http-errors": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", @@ -4070,6 +4496,12 @@ "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -4117,6 +4549,12 @@ "call-bind": "^1.0.2" } }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4133,7 +4571,131 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "jmespath": { + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jmespath": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" @@ -4394,6 +4956,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -5012,6 +5580,21 @@ "whatwg-url": "^5.0.0" } }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "dev": true + }, "node_memcached": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/node_memcached/-/node_memcached-1.1.3.tgz", @@ -5049,6 +5632,152 @@ "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", "dev": true }, + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -5203,6 +5932,15 @@ "p-limit": "^2.0.0" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -5249,6 +5987,18 @@ "netmask": "^2.0.1" } }, + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5331,6 +6081,12 @@ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -5343,6 +6099,51 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, "pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -5382,6 +6183,15 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -5894,6 +6704,15 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -5938,6 +6757,12 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -6122,6 +6947,12 @@ "send": "0.17.2" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -6207,6 +7038,12 @@ "object-inspect": "^1.9.0" } }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -6262,6 +7099,20 @@ "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", "dev": true }, + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + } + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -6312,6 +7163,12 @@ "readable-stream": "^3.0.0" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, "sqlstring": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", @@ -6608,6 +7465,17 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -6788,6 +7656,15 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typescript": { "version": "4.5.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", @@ -6997,6 +7874,12 @@ "is-symbol": "^1.0.3" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "win-release": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", @@ -7063,6 +7946,18 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "xml2js": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", diff --git a/package.json b/package.json index fa3da5ce..af05f183 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,8 @@ "build": "rm -rf bin && tsc", "release": "npm run build && npm test && standard-version && git push --follow-tags origin master && npm publish", "release-docker": "make release-docker", - "test": "make test" + "test": "make test", + "coverage": "make coverage" }, "dependencies": { "aliyun-oss-upload-stream": "1.3.0", @@ -82,6 +83,7 @@ "@types/yazl": "2.4.2", "concurrently": "7.0.0", "mocha": "9.2.0", + "nyc": "15.1.0", "should": "13.2.3", "standard-version": "9.3.2", "supertest": "6.2.2", From 1cce29138b480dbe43e55a62bd5490b62ae86eed Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 18 Feb 2022 20:07:31 +0800 Subject: [PATCH 195/347] refactor: simplify the middleware checkToken --- src/app.ts | 30 ++++--- src/core/middleware.ts | 198 ++++++++++++++++++++++------------------- src/www.ts | 2 +- 3 files changed, 124 insertions(+), 106 deletions(-) diff --git a/src/app.ts b/src/app.ts index 34cc5b61..3c432a99 100644 --- a/src/app.ts +++ b/src/app.ts @@ -2,13 +2,12 @@ import fs from 'fs'; import path from 'path'; import bodyParser from 'body-parser'; import cookieParser from 'cookie-parser'; -import express from 'express'; +import express, { NextFunction } from 'express'; import helmet from 'helmet'; import { logger } from 'kv-logger'; -import _ from 'lodash'; - import { AppError, NotFound } from './core/app-error'; import { config } from './core/config'; +import { Req, Res, withLogger } from './core/middleware'; const accessKeys = require('./routes/accessKeys'); const account = require('./routes/account'); @@ -33,22 +32,23 @@ app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, '../public'))); +app.use(withLogger); -logger.debug('use set Access-Control Header'); app.all('*', (req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header( 'Access-Control-Allow-Headers', - 'Origin, X-Requested-With, Content-Type, Accept, Authorization, X-CodePush-Plugin-Version, X-CodePush-Plugin-Name, X-CodePush-SDK-Version', + 'Origin, X-Requested-With, Content-Type, Accept, Authorization, X-CodePush-Plugin-Version, X-CodePush-Plugin-Name, X-CodePush-SDK-Version, X-Request-Id', ); res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,PATCH,DELETE,OPTIONS'); next(); }); -logger.debug(`config common.storageType value: ${_.get(config, 'common.storageType')}`); +logger.debug(`config common.storageType value: ${config.common.storageType}`); -if (_.get(config, 'common.storageType') === 'local') { - const localStorageDir = _.get(config, 'local.storageDir'); +// config local storage +if (config.common.storageType === 'local') { + const localStorageDir = config.local.storageDir; if (localStorageDir) { logger.debug(`config common.storageDir value: ${localStorageDir}`); @@ -66,13 +66,14 @@ if (_.get(config, 'common.storageType') === 'local') { logger.error(e); throw e; } - logger.debug(`static download uri value: ${_.get(config, 'local.public', '/download')}`); - app.use(_.get(config, 'local.public', '/download'), express.static(localStorageDir)); + logger.debug(`static download uri value: ${config.local.public}`); + app.use(config.local.public, express.static(localStorageDir)); } else { logger.error('please config local storageDir'); } } +// config routes app.use('/', routes); app.use('/v0.1/public/codepush', indexV1); app.use('/auth', auth); @@ -89,12 +90,13 @@ app.use((req, res, next) => { // error handler // eslint-disable-next-line @typescript-eslint/no-unused-vars -app.use((err, req, res, next) => { +app.use((err: Error, req: Req, res: Res, next: NextFunction) => { + const thisLogger = req.logger || logger; if (err instanceof AppError) { res.status(err.status).send(err.message); - logger.debug(err); + thisLogger.debug(err); } else { - res.status(err.status || 500).send(err.message); - logger.error(err); + res.status(500).send(err.message); + thisLogger.error(err); } }); diff --git a/src/core/middleware.ts b/src/core/middleware.ts index ec996588..336d9090 100644 --- a/src/core/middleware.ts +++ b/src/core/middleware.ts @@ -1,125 +1,141 @@ +import { randomUUID } from 'crypto'; +import type { Request, Response, NextFunction } from 'express'; import jwt from 'jsonwebtoken'; +import { logger, Logger } from 'kv-logger'; import _ from 'lodash'; import moment from 'moment'; import { Op } from 'sequelize'; import { UserTokens } from '../models/user_tokens'; -import { Users } from '../models/users'; +import { Users, UsersInterface } from '../models/users'; import { AppError, Unauthorized } from './app-error'; import { config } from './config'; import { parseToken, md5 } from './utils/security'; -function checkAuthToken(authToken) { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export interface Req

, B = any, Q = Record> + // eslint-disable-next-line @typescript-eslint/no-explicit-any + extends Request { + users: UsersInterface; + logger: Logger; +} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface, @typescript-eslint/no-explicit-any +export interface Res extends Response {} + +/** + * bind logger to request + */ +export function withLogger(req: Req, res: Res, next: NextFunction) { + const { method, path, headers } = req; + req.logger = logger.bindContext({ + path, + method, + requestId: headers['x-request-id'] || randomUUID(), + }); + next(); +} + +async function checkAuthToken(authToken: string) { const objToken = parseToken(authToken); - return Users.findOne({ + const users = await Users.findOne({ where: { identical: objToken.identical }, - }) - .then((users) => { - if (_.isEmpty(users)) { - throw new Unauthorized(); - } - return UserTokens.findOne({ - where: { - tokens: authToken, - uid: users.id, - expires_at: { - [Op.gt]: moment().format('YYYY-MM-DD HH:mm:ss'), - }, - }, - }).then((tokenInfo) => { - if (_.isEmpty(tokenInfo)) { - throw new Unauthorized(); - } - return users; - }); - }) - .then((users) => { - return users; - }); + }); + if (_.isEmpty(users)) { + throw new Unauthorized(); + } + + const tokenInfo = await UserTokens.findOne({ + where: { + tokens: authToken, + uid: users.id, + expires_at: { + [Op.gt]: moment().format('YYYY-MM-DD HH:mm:ss'), + }, + }, + }); + if (_.isEmpty(tokenInfo)) { + throw new Unauthorized(); + } + + return users; } -function checkAccessToken(accessToken) { - return new Promise((resolve, reject) => { - if (_.isEmpty(accessToken)) { - reject(new Unauthorized()); - return; - } - let authData; - try { - authData = jwt.verify(accessToken, config.jwt.tokenSecret); - } catch (e) { - reject(new Unauthorized()); - return; - } - const uid = _.get(authData, 'uid', null); - const hash = _.get(authData, 'hash', null); - if (parseInt(uid, 10) > 0) { - Users.findOne({ - where: { id: uid }, - }) - .then((users) => { - if (_.isEmpty(users)) { - throw new Unauthorized(); - } - if (!_.eq(hash, md5(users.get('ack_code')))) { - throw new Unauthorized(); - } - resolve(users); - }) - .catch((e) => { - reject(e); - }); - return; - } - reject(new Unauthorized()); +async function checkAccessToken(accessToken: string) { + if (_.isEmpty(accessToken)) { + throw new Unauthorized(); + } + + let authData: { uid: number; hash: string }; + try { + authData = jwt.verify(accessToken, config.jwt.tokenSecret) as { + uid: number; + hash: string; + }; + } catch (e) { + throw new Unauthorized(); + } + + const { uid, hash } = authData; + if (uid <= 0) { + throw new Unauthorized(); + } + + const users = await Users.findOne({ + where: { id: uid }, }); + if (_.isEmpty(users)) { + throw new Unauthorized(); + } + + if (hash !== md5(users.get('ack_code'))) { + throw new Unauthorized(); + } + return users; } -export function checkToken(req, res, next) { - const authArr = _.split(req.get('Authorization'), ' '); - let authType = 1; +/** + * check user token and bind user to request + */ +export function checkToken(req: Req, res: Res, next: NextFunction) { + // get token and type + let authType: 1 | 2 = 1; let authToken = ''; - if (_.eq(authArr[0], 'Bearer')) { + const authArr = _.split(req.get('Authorization'), ' '); + if (authArr[0] === 'Bearer') { [, authToken] = authArr; // Bearer if (authToken && authToken.length > 64) { authType = 2; } else { authType = 1; } - } else if (_.eq(authArr[0], 'Basic')) { + } else if (authArr[0] === 'Basic') { authType = 2; const b = Buffer.from(authArr[1], 'base64'); const user = _.split(b.toString(), ':'); [, authToken] = user; } + + // do check token + let checkTokenResult: Promise; if (authToken && authType === 1) { - checkAuthToken(authToken) - .then((users) => { - req.users = users; - next(); - return users; - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(e.status || 404).send(e.message); - } else { - next(e); - } - }); + checkTokenResult = checkAuthToken(authToken); } else if (authToken && authType === 2) { - checkAccessToken(authToken) - .then((users) => { - req.users = users; - next(); - return users; - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(e.status || 404).send(e.message); - } else { - next(e); - } - }); + checkTokenResult = checkAccessToken(authToken); } else { res.send(new Unauthorized(`Auth type not supported.`)); + return; } + + checkTokenResult + .then((users) => { + req.users = users; + next(); + }) + .catch((e) => { + if (e instanceof AppError) { + res.status(e.status || 404).send(e.message); + } else { + next(e); + } + }); } diff --git a/src/www.ts b/src/www.ts index c5cf8fcd..fb829392 100755 --- a/src/www.ts +++ b/src/www.ts @@ -77,7 +77,7 @@ Versions.findOne({ where: { type: 1 } }) server.on('listening', () => { const addr = server.address(); - logger.info(`server is listening on ${addr}`); + logger.info(`server is listening on ${JSON.stringify(addr)}`); }); }) .catch((e) => { From ceb3e3ebac22983805d5dfa992c27c03f3da2f1f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 18 Feb 2022 20:25:45 +0000 Subject: [PATCH 196/347] fix(deps): update dependency sequelize to v6.16.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5b8fa48e..dd0d56f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6881,9 +6881,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "6.16.1", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.16.1.tgz", - "integrity": "sha512-YFGqrwkmEhSbpZBxay5+PRKMiZNNUJzgIixCyFkLm9+/5Rqq5jBADEjTAC8RYHzwsOGNboYh18imXrYNCjBZCQ==", + "version": "6.16.2", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.16.2.tgz", + "integrity": "sha512-0fCdO4qrkuMWizq3blDVHPC4NvrDkRnrFucoJKlaukdatrDpluBw2GXQ53rBQeizbHGefdgehhFiyFzyo0COKg==", "requires": { "@types/debug": "^4.1.7", "debug": "^4.3.3", diff --git a/package.json b/package.json index af05f183..47352bda 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "4.0.3", - "sequelize": "6.16.1", + "sequelize": "6.16.2", "slash": "3.0.0", "validator": "13.7.0", "yargs": "17.3.1", From fd22283882e2462423bc25efa27c6b707957b41e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 18 Feb 2022 20:26:41 +0000 Subject: [PATCH 197/347] fix(deps): update dependency aws-sdk to v2.1077.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5b8fa48e..d57230b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1457,9 +1457,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.1072.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1072.0.tgz", - "integrity": "sha512-b0gEHuC6xTGduPTS+ZCScurw9RTyOned9gf6H0rDagW8hdSMebsFQy84ZreeiZHHChyKyWrNUbUFugOYdw+WXw==", + "version": "2.1077.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1077.0.tgz", + "integrity": "sha512-orJvJROs8hJaQRfHsX7Zl5PxEgrD/uTXyqXz9Yu9Io5VVxzvnOty9oHmvEMSlgTIf1qd01gnev/vpvP1HgzKtw==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index af05f183..e23638f2 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1072.0", + "aws-sdk": "2.1077.0", "bcryptjs": "2.4.3", "body-parser": "1.19.2", "cookie-parser": "1.4.6", From d0ab5bbecabf4edba45d94e460734f0a257a0a78 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 19 Feb 2022 10:51:43 +0000 Subject: [PATCH 198/347] chore(deps): update dependency mocha to v9.2.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5b8fa48e..6e8fe31a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5320,9 +5320,9 @@ } }, "mocha": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", - "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", + "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", diff --git a/package.json b/package.json index af05f183..1dc794b4 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "@types/validator": "13.7.1", "@types/yazl": "2.4.2", "concurrently": "7.0.0", - "mocha": "9.2.0", + "mocha": "9.2.1", "nyc": "15.1.0", "should": "13.2.3", "standard-version": "9.3.2", From 65e456da2b87a20c6fda10f6a51993fa9fc3dfdf Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Sun, 20 Feb 2022 22:22:12 +0800 Subject: [PATCH 199/347] refactor: turn index routes to ts --- src/app.ts | 4 +- src/core/middleware.ts | 2 +- src/core/services/client-manager.ts | 70 +++++++++++--- src/routes/apps.js | 11 ++- src/routes/index.js | 91 ------------------ src/routes/index.ts | 140 +++++++++++++++++++++++++++ src/routes/indexV1.js | 89 ----------------- src/routes/indexV1.ts | 144 ++++++++++++++++++++++++++++ 8 files changed, 352 insertions(+), 199 deletions(-) delete mode 100644 src/routes/index.js create mode 100644 src/routes/index.ts delete mode 100644 src/routes/indexV1.js create mode 100644 src/routes/indexV1.ts diff --git a/src/app.ts b/src/app.ts index 3c432a99..551471a4 100644 --- a/src/app.ts +++ b/src/app.ts @@ -8,13 +8,13 @@ import { logger } from 'kv-logger'; import { AppError, NotFound } from './core/app-error'; import { config } from './core/config'; import { Req, Res, withLogger } from './core/middleware'; +import routes from './routes/index'; +import indexV1 from './routes/indexV1'; const accessKeys = require('./routes/accessKeys'); const account = require('./routes/account'); const apps = require('./routes/apps'); const auth = require('./routes/auth'); -const routes = require('./routes/index'); -const indexV1 = require('./routes/indexV1'); const users = require('./routes/users'); export const app = express(); diff --git a/src/core/middleware.ts b/src/core/middleware.ts index 336d9090..33fa9912 100644 --- a/src/core/middleware.ts +++ b/src/core/middleware.ts @@ -14,7 +14,7 @@ import { parseToken, md5 } from './utils/security'; // eslint-disable-next-line @typescript-eslint/no-explicit-any export interface Req

, B = any, Q = Record> // eslint-disable-next-line @typescript-eslint/no-explicit-any - extends Request { + extends Request> { users: UsersInterface; logger: Logger; } diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index d6d78756..5758cabe 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -1,4 +1,4 @@ -import { logger } from 'kv-logger'; +import { Logger } from 'kv-logger'; import _ from 'lodash'; import { Op } from 'sequelize'; import { Deployments } from '../../models/deployments'; @@ -18,12 +18,30 @@ const updateCheck = 'UPDATE_CHECK'; const chosenMan = 'CHOSEN_MAN'; const expired = 600; +interface UpdateCheckInfo { + packageId: number; + downloadURL: string; + downloadUrl: string; + description: string; + isAvailable: boolean; + isDisabled: boolean; + isMandatory: boolean; + appVersion: string; + targetBinaryRange: string; + packageHash: string; + label: string; + packageSize: number; + updateAppVersion: boolean; + shouldRunBinaryVersion: boolean; + rollout: number; +} + class ClientManager { - getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash) { + private getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash) { return [updateCheck, deploymentKey, appVersion, label, packageHash].join(':'); } - clearUpdateCheckCache(deploymentKey, appVersion, label, packageHash) { + clearUpdateCheckCache(deploymentKey, appVersion, label, packageHash, logger: Logger) { logger.debug('clear cache Deployments key:', { key: deploymentKey, }); @@ -45,10 +63,23 @@ class ClientManager { }); } - updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) { - const updateCheckCache = _.get(config, 'common.updateCheckCache', false); - if (updateCheckCache === false) { - return this.updateCheck(deploymentKey, appVersion, label, packageHash, clientUniqueId); + updateCheckFromCache( + deploymentKey: string, + appVersion: string, + label: string, + packageHash: string, + clientUniqueId: string, + logger: Logger, + ) { + if (!config.common.updateCheckCache) { + return this.updateCheck( + deploymentKey, + appVersion, + label, + packageHash, + clientUniqueId, + logger, + ); } const redisCacheKey = this.getUpdateCheckCacheKey( deploymentKey, @@ -59,8 +90,8 @@ class ClientManager { return redisClient.get(redisCacheKey).then((data) => { if (data) { try { - logger.debug('updateCheckFromCache read from catch'); - const obj = JSON.parse(data); + logger.debug('updateCheckFromCache read from cache'); + const obj = JSON.parse(data) as UpdateCheckInfo; return obj; } catch (e) { // do nothing @@ -72,6 +103,7 @@ class ClientManager { label, packageHash, clientUniqueId, + logger, ).then((rs) => { try { logger.debug('updateCheckFromCache read from db'); @@ -85,11 +117,11 @@ class ClientManager { }); } - getChosenManCacheKey(packageId, rollout, clientUniqueId) { + private getChosenManCacheKey(packageId, rollout, clientUniqueId) { return [chosenMan, packageId, rollout, clientUniqueId].join(':'); } - random(rollout) { + private random(rollout) { const r = Math.ceil(Math.random() * 10000); if (r < rollout * 100) { return Promise.resolve(true); @@ -127,9 +159,17 @@ class ClientManager { }); } - // eslint-disable-next-line max-lines-per-function, @typescript-eslint/no-unused-vars - updateCheck(deploymentKey: string, appVersion, label, packageHash, clientUniqueId: string) { - const rs = { + // eslint-disable-next-line max-lines-per-function + private updateCheck( + deploymentKey: string, + appVersion: string, + label: string, + packageHash: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + clientUniqueId: string, + logger: Logger, + ) { + const rs: UpdateCheckInfo = { packageId: 0, downloadURL: '', downloadUrl: '', @@ -239,7 +279,7 @@ class ClientManager { }); } - getPackagesInfo(deploymentKey, label) { + private getPackagesInfo(deploymentKey, label) { if (_.isEmpty(deploymentKey) || _.isEmpty(label)) { return Promise.reject(new AppError('please input deploymentKey and label')); } diff --git a/src/routes/apps.js b/src/routes/apps.js index 6a1e33ca..a5a340e5 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -349,6 +349,7 @@ router.post('/:appName/deployments/:deploymentName/release', checkToken, (req, r '*', '*', '*', + logger, ); }); } @@ -420,6 +421,7 @@ router.patch('/:appName/deployments/:deploymentName/release', checkToken, (req, '*', '*', '*', + logger, ); }); } @@ -498,6 +500,7 @@ router.post( '*', '*', '*', + logger, ); }); } @@ -549,7 +552,13 @@ var rollbackCb = function (req, res, next) { //clear cache if exists. if (_.get(config, 'common.updateCheckCache', false) !== false) { delay(2500).then(() => { - clientManager.clearUpdateCheckCache(dep.deployment_key, '*', '*', '*'); + clientManager.clearUpdateCheckCache( + dep.deployment_key, + '*', + '*', + '*', + logger, + ); }); } return packageInfo; diff --git a/src/routes/index.js b/src/routes/index.js deleted file mode 100644 index 4948d399..00000000 --- a/src/routes/index.js +++ /dev/null @@ -1,91 +0,0 @@ -import express from 'express'; -import _ from 'lodash'; -import { logger } from 'kv-logger'; -import { AppError } from '../core/app-error'; -import { clientManager } from '../core/services/client-manager'; -import { checkToken } from '../core/middleware'; - -const router = express.Router(); - -router.get('/', (req, res, next) => { - res.render('index', { title: 'CodePushServer' }); -}); - -router.get('/tokens', (req, res) => { - res.render('tokens', { title: '获取token' }); -}); - -router.get('/updateCheck', (req, res, next) => { - var deploymentKey = _.get(req, 'query.deploymentKey'); - var appVersion = _.get(req, 'query.appVersion'); - var label = _.get(req, 'query.label'); - var packageHash = _.get(req, 'query.packageHash'); - var clientUniqueId = _.get(req, 'query.clientUniqueId'); - logger.debug('/updateCheck', { - query: req.query, - }); - clientManager - .updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) - .then((rs) => { - //灰度检测 - return clientManager - .chosenMan(rs.packageId, rs.rollout, clientUniqueId) - .then((data) => { - if (!data) { - rs.isAvailable = false; - return rs; - } - return rs; - }); - }) - .then((rs) => { - delete rs.packageId; - delete rs.rollout; - res.send({ updateInfo: rs }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(404).send(e.message); - } else { - next(e); - } - }); -}); - -router.post('/reportStatus/download', (req, res) => { - logger.debug('/reportStatus/download', { - body: req.body, - }); - var clientUniqueId = _.get(req, 'body.clientUniqueId'); - var label = _.get(req, 'body.label'); - var deploymentKey = _.get(req, 'body.deploymentKey'); - clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { - if (!err instanceof AppError) { - logger.error(err); - } - }); - res.send('OK'); -}); - -router.post('/reportStatus/deploy', (req, res) => { - logger.debug('/reportStatus/deploy', { - body: req.body, - }); - var clientUniqueId = _.get(req, 'body.clientUniqueId'); - var label = _.get(req, 'body.label'); - var deploymentKey = _.get(req, 'body.deploymentKey'); - clientManager - .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) - .catch((err) => { - if (!err instanceof AppError) { - logger.error(err); - } - }); - res.send('OK'); -}); - -router.get('/authenticated', checkToken, (req, res) => { - return res.send({ authenticated: true }); -}); - -module.exports = router; diff --git a/src/routes/index.ts b/src/routes/index.ts new file mode 100644 index 00000000..444bf16a --- /dev/null +++ b/src/routes/index.ts @@ -0,0 +1,140 @@ +import express from 'express'; +import { AppError } from '../core/app-error'; +import { checkToken, Req } from '../core/middleware'; +import { clientManager } from '../core/services/client-manager'; + +const router = express.Router(); + +router.get('/', (req, res) => { + res.render('index', { title: 'CodePushServer' }); +}); + +router.get('/tokens', (req, res) => { + res.render('tokens', { title: '获取token' }); +}); + +router.get( + '/updateCheck', + ( + req: Req< + void, + void, + { + deploymentKey: string; + appVersion: string; + label: string; + packageHash: string; + clientUniqueId: string; + } + >, + res, + next, + ) => { + const { logger, query } = req; + logger.debug('/updateCheck', { + query: JSON.stringify(query), + }); + const { deploymentKey, appVersion, label, packageHash, clientUniqueId } = query; + clientManager + .updateCheckFromCache( + deploymentKey, + appVersion, + label, + packageHash, + clientUniqueId, + logger, + ) + .then((rs) => { + // 灰度检测 + return clientManager + .chosenMan(rs.packageId, rs.rollout, clientUniqueId) + .then((data) => { + if (!data) { + // eslint-disable-next-line no-param-reassign + rs.isAvailable = false; + return rs; + } + return rs; + }); + }) + .then((rs) => { + // eslint-disable-next-line no-param-reassign + delete rs.packageId; + // eslint-disable-next-line no-param-reassign + delete rs.rollout; + res.send({ updateInfo: rs }); + }) + .catch((e) => { + if (e instanceof AppError) { + res.status(404).send(e.message); + } else { + next(e); + } + }); + }, +); + +router.post( + '/reportStatus/download', + ( + req: Req< + void, + { + clientUniqueId: string; + label: string; + deploymentKey: string; + }, + void + >, + res, + ) => { + const { logger, body } = req; + logger.debug('/reportStatus/download', { + body: JSON.stringify(body), + }); + const { clientUniqueId, label, deploymentKey } = body; + clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { + if (!(err instanceof AppError)) { + logger.error(err); + } + }); + res.send('OK'); + }, +); + +router.post( + '/reportStatus/deploy', + ( + req: Req< + void, + { + clientUniqueId: string; + label: string; + deploymentKey: string; + }, + void + >, + res, + ) => { + const { logger, body } = req; + logger.debug('/reportStatus/deploy', { + body: JSON.stringify(body), + }); + const { clientUniqueId, label, deploymentKey } = body; + clientManager + .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) + .catch((err) => { + if (!(err instanceof AppError)) { + logger.error(err); + } + }); + res.send('OK'); + }, +); + +router.get('/authenticated', checkToken, (req, res) => { + return res.send({ authenticated: true }); +}); + +// eslint-disable-next-line import/no-default-export +export default router; diff --git a/src/routes/indexV1.js b/src/routes/indexV1.js deleted file mode 100644 index 19b935fc..00000000 --- a/src/routes/indexV1.js +++ /dev/null @@ -1,89 +0,0 @@ -import express from 'express'; -import _ from 'lodash'; -import { logger } from 'kv-logger'; - -import { AppError } from '../core/app-error'; -import { clientManager } from '../core/services/client-manager'; - -const router = express.Router(); - -router.get('/update_check', (req, res, next) => { - var deploymentKey = _.get(req, 'query.deployment_key'); - var appVersion = _.get(req, 'query.app_version'); - var label = _.get(req, 'query.label'); - var packageHash = _.get(req, 'query.package_hash'); - var isCompanion = _.get(req, 'query.is_companion'); - var clientUniqueId = _.get(req, 'query.client_unique_id'); - logger.debug('/update_check req.query', req.query); - clientManager - .updateCheckFromCache(deploymentKey, appVersion, label, packageHash, clientUniqueId) - .then((rs) => { - //灰度检测 - return clientManager - .chosenMan(rs.packageId, rs.rollout, clientUniqueId) - .then((data) => { - if (!data) { - rs.isAvailable = false; - return rs; - } - return rs; - }); - }) - .then((rs) => { - delete rs.packageId; - delete rs.rollout; - var update_info = { - download_url: rs.downloadUrl, - description: rs.description, - is_available: rs.isAvailable, - is_disabled: rs.isDisabled, - // Note: need to use appVersion here to get it compatible with client side change... - // https://github.com/microsoft/code-push/commit/7d2ffff395cc54db98aefba7c67889f509e8c249#diff-a937c637a47cbd31cbb52c89bef7d197R138 - target_binary_range: rs.appVersion, - label: rs.label, - package_hash: rs.packageHash, - package_size: rs.packageSize, - should_run_binary_version: rs.shouldRunBinaryVersion, - update_app_version: rs.updateAppVersion, - is_mandatory: rs.isMandatory, - }; - res.send({ update_info: update_info }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(404).send(e.message); - } else { - next(e); - } - }); -}); - -router.post('/report_status/download', (req, res) => { - logger.debug('/report_status/download req.body', req.body); - var clientUniqueId = _.get(req, 'body.client_unique_id'); - var label = _.get(req, 'body.label'); - var deploymentKey = _.get(req, 'body.deployment_key'); - clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { - if (!err instanceof AppError) { - logger.error(err); - } - }); - res.send('OK'); -}); - -router.post('/report_status/deploy', (req, res) => { - logger.debug('/report_status/deploy req.body', req.body); - var clientUniqueId = _.get(req, 'body.client_unique_id'); - var label = _.get(req, 'body.label'); - var deploymentKey = _.get(req, 'body.deployment_key'); - clientManager - .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) - .catch((err) => { - if (!err instanceof AppError) { - logger.error(err); - } - }); - res.send('OK'); -}); - -module.exports = router; diff --git a/src/routes/indexV1.ts b/src/routes/indexV1.ts new file mode 100644 index 00000000..b9e8e00a --- /dev/null +++ b/src/routes/indexV1.ts @@ -0,0 +1,144 @@ +import express from 'express'; +import { AppError } from '../core/app-error'; +import { Req } from '../core/middleware'; +import { clientManager } from '../core/services/client-manager'; + +// routes for latest code push client +const router = express.Router(); + +router.get( + '/update_check', + ( + req: Req< + void, + void, + { + deployment_key: string; + app_version: string; + label: string; + package_hash: string; + is_companion: unknown; + client_unique_id: string; + } + >, + res, + next, + ) => { + const { logger, query } = req; + logger.debug('/update_check', { + query: JSON.stringify(query), + }); + const { + deployment_key: deploymentKey, + app_version: appVersion, + label, + package_hash: packageHash, + client_unique_id: clientUniqueId, + } = query; + clientManager + .updateCheckFromCache( + deploymentKey, + appVersion, + label, + packageHash, + clientUniqueId, + logger, + ) + .then((rs) => { + // 灰度检测 + return clientManager + .chosenMan(rs.packageId, rs.rollout, clientUniqueId) + .then((data) => { + if (!data) { + // eslint-disable-next-line no-param-reassign + rs.isAvailable = false; + return rs; + } + return rs; + }); + }) + .then((rs) => { + res.send({ + update_info: { + download_url: rs.downloadUrl, + description: rs.description, + is_available: rs.isAvailable, + is_disabled: rs.isDisabled, + // Note: need to use appVersion here to get it compatible with client side change... + // https://github.com/microsoft/code-push/commit/7d2ffff395cc54db98aefba7c67889f509e8c249#diff-a937c637a47cbd31cbb52c89bef7d197R138 + target_binary_range: rs.appVersion, + label: rs.label, + package_hash: rs.packageHash, + package_size: rs.packageSize, + should_run_binary_version: rs.shouldRunBinaryVersion, + update_app_version: rs.updateAppVersion, + is_mandatory: rs.isMandatory, + }, + }); + }) + .catch((e) => { + if (e instanceof AppError) { + res.status(404).send(e.message); + } else { + next(e); + } + }); + }, +); + +router.post( + '/report_status/download', + ( + req: Req< + void, + { + client_unique_id: string; + label: string; + deployment_key: string; + }, + void + >, + res, + ) => { + const { logger, body } = req; + logger.debug('/report_status/download', { body: JSON.stringify(body) }); + const { client_unique_id: clientUniqueId, label, deployment_key: deploymentKey } = body; + clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { + if (!(err instanceof AppError)) { + logger.error(err); + } + }); + res.send('OK'); + }, +); + +router.post( + '/report_status/deploy', + ( + req: Req< + void, + { + client_unique_id: string; + label: string; + deployment_key: string; + }, + void + >, + res, + ) => { + const { logger, body } = req; + logger.debug('/report_status/deploy', { body: JSON.stringify(body) }); + const { client_unique_id: clientUniqueId, label, deployment_key: deploymentKey } = body; + clientManager + .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) + .catch((err) => { + if (!(err instanceof AppError)) { + logger.error(err); + } + }); + res.send('OK'); + }, +); + +// eslint-disable-next-line import/no-default-export +export default router; From e6b94ab474b846b9f97fc239019742bcd9f76b73 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 21 Feb 2022 10:30:47 +0800 Subject: [PATCH 200/347] refactor: turn account, auth, users router to ts, /auth/login returns `message` instead of `errorMessage` --- src/app.ts | 20 ++-- src/routes/{account.js => account.ts} | 12 +- src/routes/auth.js | 78 ------------- src/routes/auth.ts | 80 ++++++++++++++ src/routes/index.ts | 17 ++- src/routes/indexV1.ts | 11 +- src/routes/users.js | 112 ------------------- src/routes/users.ts | 152 ++++++++++++++++++++++++++ tests/api/auth/auth.test.js | 6 +- views/auth/login.pug | 2 +- 10 files changed, 262 insertions(+), 228 deletions(-) rename src/routes/{account.js => account.ts} (51%) delete mode 100644 src/routes/auth.js create mode 100644 src/routes/auth.ts delete mode 100644 src/routes/users.js create mode 100644 src/routes/users.ts diff --git a/src/app.ts b/src/app.ts index 551471a4..949e9604 100644 --- a/src/app.ts +++ b/src/app.ts @@ -8,14 +8,14 @@ import { logger } from 'kv-logger'; import { AppError, NotFound } from './core/app-error'; import { config } from './core/config'; import { Req, Res, withLogger } from './core/middleware'; -import routes from './routes/index'; -import indexV1 from './routes/indexV1'; +import { accountRouter } from './routes/account'; +import { authRouter } from './routes/auth'; +import { indexRouter } from './routes/index'; +import { indexV1Router } from './routes/indexV1'; +import { usersRouter } from './routes/users'; const accessKeys = require('./routes/accessKeys'); -const account = require('./routes/account'); const apps = require('./routes/apps'); -const auth = require('./routes/auth'); -const users = require('./routes/users'); export const app = express(); @@ -74,12 +74,12 @@ if (config.common.storageType === 'local') { } // config routes -app.use('/', routes); -app.use('/v0.1/public/codepush', indexV1); -app.use('/auth', auth); +app.use('/', indexRouter); +app.use('/v0.1/public/codepush', indexV1Router); +app.use('/auth', authRouter); app.use('/accessKeys', accessKeys); -app.use('/account', account); -app.use('/users', users); +app.use('/account', accountRouter); +app.use('/users', usersRouter); app.use('/apps', apps); // 404 handler diff --git a/src/routes/account.js b/src/routes/account.ts similarity index 51% rename from src/routes/account.js rename to src/routes/account.ts index 7c47998f..ab896f4b 100644 --- a/src/routes/account.js +++ b/src/routes/account.ts @@ -1,11 +1,11 @@ import express from 'express'; -import { logger } from 'kv-logger'; -import { checkToken } from '../core/middleware'; +import { checkToken, Req } from '../core/middleware'; -const router = express.Router(); +export const accountRouter = express.Router(); -router.get('/', checkToken, (req, res) => { - var userInfo = { +accountRouter.get('/', checkToken, (req: Req, res) => { + const { logger } = req; + const userInfo = { email: req.users.email, linkedProviders: [], name: req.users.username, @@ -13,5 +13,3 @@ router.get('/', checkToken, (req, res) => { logger.info('check account info', userInfo); res.send({ account: userInfo }); }); - -module.exports = router; diff --git a/src/routes/auth.js b/src/routes/auth.js deleted file mode 100644 index 8cebd0ca..00000000 --- a/src/routes/auth.js +++ /dev/null @@ -1,78 +0,0 @@ -import express from 'express'; -import _ from 'lodash'; -import { logger } from 'kv-logger'; -import jwt from 'jsonwebtoken'; - -import { config } from '../core/config'; -import { AppError } from '../core/app-error'; -import { accountManager } from '../core/services/account-manager'; -import { md5 } from '../core/utils/security'; - -const router = express.Router(); - -router.get('/password', (req, res) => { - res.render('auth/password', { title: 'CodePushServer' }); -}); - -router.get('/login', (req, res) => { - res.render('auth/login', { title: 'CodePushServer', email: req.query.email || '' }); -}); - -router.get('/link', (req, res) => { - res.redirect(`/auth/login`); -}); - -router.get('/register', (req, res) => { - if (_.get(config, 'common.allowRegistration')) { - res.render('auth/register', { title: 'CodePushServer', email: req.query.email || '' }); - } else { - res.redirect(`/auth/login`); - } -}); - -router.get('/confirm', (req, res) => { - logger.debug(`confirmation form`); - res.render('auth/confirm', { title: 'CodePushServer', email: req.query.email || '' }); -}); - -router.post('/logout', (req, res) => { - res.send('ok'); -}); - -router.post('/login', (req, res, next) => { - var account = _.trim(req.body.account); - var password = _.trim(req.body.password); - var tokenSecret = _.get(config, 'jwt.tokenSecret'); - logger.info('try login', { - account, - }); - accountManager - .login(account, password) - .then((users) => { - logger.info('login success', { - account, - uid: users.id, - }); - return jwt.sign( - { uid: users.id, hash: md5(users.ack_code), expiredIn: 7200 }, - tokenSecret, - ); - }) - .then((token) => { - logger.debug('login jwt token', { - account, - token, - }); - res.send({ status: 'OK', results: { tokens: token } }); - }) - .catch((e) => { - if (e instanceof AppError) { - logger.debug(e); - res.send({ status: 'ERROR', errorMessage: e.message }); - } else { - next(e); - } - }); -}); - -module.exports = router; diff --git a/src/routes/auth.ts b/src/routes/auth.ts new file mode 100644 index 00000000..a72030ed --- /dev/null +++ b/src/routes/auth.ts @@ -0,0 +1,80 @@ +import express from 'express'; +import jwt from 'jsonwebtoken'; +import _ from 'lodash'; +import { AppError } from '../core/app-error'; +import { config } from '../core/config'; +import { Req } from '../core/middleware'; +import { accountManager } from '../core/services/account-manager'; +import { md5 } from '../core/utils/security'; + +// route for auth web pages +export const authRouter = express.Router(); + +authRouter.get('/password', (req: Req, res) => { + res.render('auth/password', { title: 'CodePushServer' }); +}); + +authRouter.get('/login', (req: Req, res) => { + res.render('auth/login', { title: 'CodePushServer', email: req.query.email || '' }); +}); + +authRouter.get('/link', (req: Req, res) => { + res.redirect(`/auth/login`); +}); + +authRouter.get('/register', (req: Req, res) => { + if (config.common.allowRegistration) { + res.render('auth/register', { title: 'CodePushServer', email: req.query.email || '' }); + } else { + res.redirect(`/auth/login`); + } +}); + +authRouter.get('/confirm', (req: Req, res) => { + res.render('auth/confirm', { title: 'CodePushServer', email: req.query.email || '' }); +}); + +authRouter.post('/logout', (req: Req, res) => { + res.send('ok'); +}); + +authRouter.post( + '/login', + (req: Req, res, next) => { + const { logger, body } = req; + const account = _.trim(body.account); + const password = _.trim(body.password); + logger.info('try login', { + account, + }); + accountManager + .login(account, password) + .then((users) => { + logger.info('login success', { + account, + uid: users.id, + }); + return jwt.sign( + { uid: users.id, hash: md5(users.ack_code), expiredIn: 7200 }, + config.jwt.tokenSecret, + ); + }) + .then((token) => { + logger.info('jwt token signed', { + account, + }); + res.send({ status: 'OK', results: { tokens: token } }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('login failed', { + account, + error: e.message, + }); + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); + }, +); diff --git a/src/routes/index.ts b/src/routes/index.ts index 444bf16a..5215d24c 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -3,17 +3,17 @@ import { AppError } from '../core/app-error'; import { checkToken, Req } from '../core/middleware'; import { clientManager } from '../core/services/client-manager'; -const router = express.Router(); +export const indexRouter = express.Router(); -router.get('/', (req, res) => { +indexRouter.get('/', (req, res) => { res.render('index', { title: 'CodePushServer' }); }); -router.get('/tokens', (req, res) => { +indexRouter.get('/tokens', (req, res) => { res.render('tokens', { title: '获取token' }); }); -router.get( +indexRouter.get( '/updateCheck', ( req: Req< @@ -74,7 +74,7 @@ router.get( }, ); -router.post( +indexRouter.post( '/reportStatus/download', ( req: Req< @@ -102,7 +102,7 @@ router.post( }, ); -router.post( +indexRouter.post( '/reportStatus/deploy', ( req: Req< @@ -132,9 +132,6 @@ router.post( }, ); -router.get('/authenticated', checkToken, (req, res) => { +indexRouter.get('/authenticated', checkToken, (req, res) => { return res.send({ authenticated: true }); }); - -// eslint-disable-next-line import/no-default-export -export default router; diff --git a/src/routes/indexV1.ts b/src/routes/indexV1.ts index b9e8e00a..4fa7b689 100644 --- a/src/routes/indexV1.ts +++ b/src/routes/indexV1.ts @@ -4,9 +4,9 @@ import { Req } from '../core/middleware'; import { clientManager } from '../core/services/client-manager'; // routes for latest code push client -const router = express.Router(); +export const indexV1Router = express.Router(); -router.get( +indexV1Router.get( '/update_check', ( req: Req< @@ -86,7 +86,7 @@ router.get( }, ); -router.post( +indexV1Router.post( '/report_status/download', ( req: Req< @@ -112,7 +112,7 @@ router.post( }, ); -router.post( +indexV1Router.post( '/report_status/deploy', ( req: Req< @@ -139,6 +139,3 @@ router.post( res.send('OK'); }, ); - -// eslint-disable-next-line import/no-default-export -export default router; diff --git a/src/routes/users.js b/src/routes/users.js deleted file mode 100644 index 8fd6d4dc..00000000 --- a/src/routes/users.js +++ /dev/null @@ -1,112 +0,0 @@ -import express from 'express'; -import { logger } from 'kv-logger'; -import _ from 'lodash'; -import { Users } from '../models/users'; -import { AppError } from '../core/app-error'; -import { accountManager } from '../core/services/account-manager'; -import { checkToken } from '../core/middleware'; - -const router = express.Router(); - -router.get('/', checkToken, (req, res) => { - res.send({ title: 'CodePushServer' }); -}); - -router.post('/', (req, res, next) => { - var email = _.trim(_.get(req, 'body.email')); - var token = _.trim(_.get(req, 'body.token')); - var password = _.trim(_.get(req, 'body.password')); - return accountManager - .checkRegisterCode(email, token) - .then((u) => { - if (_.isString(password) && password.length < 6) { - throw new AppError('请您输入6~20位长度的密码'); - } - return accountManager.register(email, password); - }) - .then(() => { - res.send({ status: 'OK' }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.send({ status: 'ERROR', message: e.message }); - } else { - next(e); - } - }); -}); - -router.get('/exists', (req, res, next) => { - var email = _.trim(_.get(req, 'query.email')); - Users.findOne({ where: { email: email } }) - .then((u) => { - if (!email) { - throw new AppError(`请您输入邮箱地址`); - } - res.send({ status: 'OK', exists: u ? true : false }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.send({ status: 'ERROR', message: e.message }); - } else { - next(e); - } - }); -}); - -router.post('/registerCode', (req, res, next) => { - var email = _.get(req, 'body.email'); - logger.info('try send register code', { email }); - return accountManager - .sendRegisterCode(email) - .then(() => { - logger.info('send register code success', { email }); - res.send({ status: 'OK' }); - }) - .catch((e) => { - if (e instanceof AppError) { - logger.warn('send register code error', { email, message: e.message }); - res.send({ status: 'ERROR', message: e.message }); - } else { - next(e); - } - }); -}); - -router.get('/registerCode/exists', (req, res, next) => { - var email = _.trim(_.get(req, 'query.email')); - var token = _.trim(_.get(req, 'query.token')); - return accountManager - .checkRegisterCode(email, token) - .then(() => { - res.send({ status: 'OK' }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.send({ status: 'ERROR', message: e.message }); - } else { - next(e); - } - }); -}); - -//修改密码 -router.patch('/password', checkToken, (req, res, next) => { - var oldPassword = _.trim(_.get(req, 'body.oldPassword')); - var newPassword = _.trim(_.get(req, 'body.newPassword')); - var uid = req.users.id; - return accountManager - .changePassword(uid, oldPassword, newPassword) - .then(() => { - res.send({ status: 'OK' }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.send({ status: 'ERROR', message: e.message }); - } else { - next(e); - } - }); -}); - -module.exports = router; diff --git a/src/routes/users.ts b/src/routes/users.ts new file mode 100644 index 00000000..8c218bd9 --- /dev/null +++ b/src/routes/users.ts @@ -0,0 +1,152 @@ +import express from 'express'; +import _ from 'lodash'; +import { AppError } from '../core/app-error'; +import { checkToken, Req } from '../core/middleware'; +import { accountManager } from '../core/services/account-manager'; +import { Users } from '../models/users'; + +export const usersRouter = express.Router(); + +usersRouter.get('/', checkToken, (req: Req, res) => { + res.send({ title: 'CodePushServer' }); +}); + +usersRouter.post( + '/', + ( + req: Req< + void, + { + email: string; + token: string; + password: string; + }, + void + >, + res, + next, + ) => { + const { logger, body } = req; + const email = _.trim(body.email); + const token = _.trim(body.token); + const password = _.trim(body.password); + logger.info('try register account', { email, token }); + return accountManager + .checkRegisterCode(email, token) + .then(() => { + if (_.isString(password) && password.length < 6) { + throw new AppError('请您输入6~20位长度的密码'); + } + return accountManager.register(email, password); + }) + .then(() => { + logger.info('register account success', { email }); + res.send({ status: 'OK' }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('register account failed', { email, error: e.message }); + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); + }, +); + +usersRouter.get('/exists', (req: Req, res, next) => { + const email = _.trim(req.query.email); + if (!email) { + res.send({ status: 'ERROR', message: '请您输入邮箱地址' }); + return; + } + Users.findOne({ where: { email } }) + .then((u) => { + res.send({ status: 'OK', exists: !!u }); + }) + .catch((e) => { + if (e instanceof AppError) { + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); +}); + +usersRouter.post('/registerCode', (req: Req, res, next) => { + const { logger, body } = req; + const { email } = body; + logger.info('try send register code', { email }); + return accountManager + .sendRegisterCode(email) + .then(() => { + logger.info('send register code success', { email }); + res.send({ status: 'OK' }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('send register code error', { email, error: e.message }); + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); +}); + +usersRouter.get( + '/registerCode/exists', + (req: Req, res, next) => { + const { query } = req; + const email = _.trim(query.email); + const token = _.trim(query.token); + return accountManager + .checkRegisterCode(email, token) + .then(() => { + res.send({ status: 'OK' }); + }) + .catch((e) => { + if (e instanceof AppError) { + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); + }, +); + +// 修改密码 +usersRouter.patch( + '/password', + checkToken, + ( + req: Req< + Record, + { + oldPassword: string; + newPassword: string; + } + >, + res, + next, + ) => { + const { logger, body } = req; + const oldPassword = _.trim(body.oldPassword); + const newPassword = _.trim(body.newPassword); + const uid = req.users.id; + logger.info('try change password', { uid }); + return accountManager + .changePassword(uid, oldPassword, newPassword) + .then(() => { + logger.info('change password success', { uid }); + res.send({ status: 'OK' }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('change password failed', { uid }); + res.send({ status: 'ERROR', message: e.message }); + } else { + next(e); + } + }); + }, +); diff --git a/tests/api/auth/auth.test.js b/tests/api/auth/auth.test.js index 98ae71d6..37af3eb8 100644 --- a/tests/api/auth/auth.test.js +++ b/tests/api/auth/auth.test.js @@ -60,7 +60,7 @@ describe('api/auth/test.js', function () { should.not.exist(err); JSON.parse(res.text).should.containEql({ status: 'ERROR', - errorMessage: '请您输入邮箱地址', + message: '请您输入邮箱地址', }); done(); }); @@ -76,7 +76,7 @@ describe('api/auth/test.js', function () { should.not.exist(err); JSON.parse(res.text).should.containEql({ status: 'ERROR', - errorMessage: '您输入的邮箱或密码有误', + message: '您输入的邮箱或密码有误', }); done(); }); @@ -92,7 +92,7 @@ describe('api/auth/test.js', function () { should.not.exist(err); JSON.parse(res.text).should.containEql({ status: 'ERROR', - errorMessage: '您输入的邮箱或密码有误', + message: '您输入的邮箱或密码有误', }); done(); }); diff --git a/views/auth/login.pug b/views/auth/login.pug index c47c8da9..57537beb 100644 --- a/views/auth/login.pug +++ b/views/auth/login.pug @@ -35,7 +35,7 @@ block js submit = false; location.href = '/tokens/' + location.search; } else { - alert(data.errorMessage); + alert(data.message); submit = false; } } From 60a3b007a429e997e99d581414a5387b2a376601 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 21 Feb 2022 10:46:44 +0800 Subject: [PATCH 201/347] refactor: turn accessKeys router to ts --- src/app.ts | 4 +- src/routes/accessKeys.js | 102 -------------------------------- src/routes/accessKeys.ts | 122 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+), 104 deletions(-) delete mode 100644 src/routes/accessKeys.js create mode 100644 src/routes/accessKeys.ts diff --git a/src/app.ts b/src/app.ts index 949e9604..37b34baa 100644 --- a/src/app.ts +++ b/src/app.ts @@ -8,13 +8,13 @@ import { logger } from 'kv-logger'; import { AppError, NotFound } from './core/app-error'; import { config } from './core/config'; import { Req, Res, withLogger } from './core/middleware'; +import { accessKeysRouter } from './routes/accessKeys'; import { accountRouter } from './routes/account'; import { authRouter } from './routes/auth'; import { indexRouter } from './routes/index'; import { indexV1Router } from './routes/indexV1'; import { usersRouter } from './routes/users'; -const accessKeys = require('./routes/accessKeys'); const apps = require('./routes/apps'); export const app = express(); @@ -77,7 +77,7 @@ if (config.common.storageType === 'local') { app.use('/', indexRouter); app.use('/v0.1/public/codepush', indexV1Router); app.use('/auth', authRouter); -app.use('/accessKeys', accessKeys); +app.use('/accessKeys', accessKeysRouter); app.use('/account', accountRouter); app.use('/users', usersRouter); app.use('/apps', apps); diff --git a/src/routes/accessKeys.js b/src/routes/accessKeys.js deleted file mode 100644 index 85eb2fb5..00000000 --- a/src/routes/accessKeys.js +++ /dev/null @@ -1,102 +0,0 @@ -import express from 'express'; -import _ from 'lodash'; -import { logger } from 'kv-logger'; -import { UserTokens } from '../models/user_tokens'; -import { AppError } from '../core/app-error'; -import { accountManager } from '../core/services/account-manager'; -import { randToken } from '../core/utils/security'; -import { checkToken } from '../core/middleware'; - -const router = express.Router(); - -router.get('/', checkToken, (req, res, next) => { - logger.debug('request get acceesKeys'); - var uid = req.users.id; - accountManager - .getAllAccessKeyByUid(uid) - .then((accessKeys) => { - logger.debug('acceesKeys:', accessKeys); - res.send({ accessKeys: accessKeys }); - }) - .catch((e) => { - next(e); - }); -}); - -router.post('/', checkToken, (req, res, next) => { - var uid = req.users.id; - var identical = req.users.identical; - var createdBy = _.trim(req.body.createdBy); - var friendlyName = _.trim(req.body.friendlyName); - var ttl = parseInt(req.body.ttl); - var description = _.trim(req.body.description); - logger.info('try to generate access key', { - uid, - ...req.body, - }); - var newAccessKey = randToken(28).concat(identical); - return accountManager - .isExsitAccessKeyName(uid, friendlyName) - .then((data) => { - if (!_.isEmpty(data)) { - throw new AppError(`The access key "${friendlyName}" already exists.`); - } - }) - .then(() => { - return accountManager.createAccessKey( - uid, - newAccessKey, - ttl, - friendlyName, - createdBy, - description, - ); - }) - .then((newToken) => { - var moment = require('moment'); - var info = { - name: newToken.tokens, - createdTime: parseInt(moment(newToken.created_at).format('x')), - createdBy: newToken.created_by, - expires: parseInt(moment(newToken.expires_at).format('x')), - description: newToken.description, - friendlyName: newToken.name, - }; - logger.info('access key created', { - uid, - friendlyName: newToken.name, - }); - logger.debug('access key', { - uid, - ...info, - }); - res.send({ accessKey: info }); - }) - .catch((e) => { - if (e instanceof AppError) { - logger.debug(e); - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.delete('/:name', checkToken, (req, res, next) => { - var name = _.trim(decodeURI(req.params.name)); - var uid = req.users.id; - return UserTokens.destroy({ where: { name: name, uid: uid } }) - .then((rowNum) => { - logger.debug('delete acceesKey:', name); - res.send({ friendlyName: name }); - }) - .catch((e) => { - if (e instanceof AppError) { - logger.debug(e); - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); -module.exports = router; diff --git a/src/routes/accessKeys.ts b/src/routes/accessKeys.ts new file mode 100644 index 00000000..917df23d --- /dev/null +++ b/src/routes/accessKeys.ts @@ -0,0 +1,122 @@ +import express from 'express'; +import _ from 'lodash'; +import moment from 'moment'; +import { AppError } from '../core/app-error'; +import { checkToken, Req } from '../core/middleware'; +import { accountManager } from '../core/services/account-manager'; +import { randToken } from '../core/utils/security'; +import { UserTokens } from '../models/user_tokens'; + +export const accessKeysRouter = express.Router(); + +accessKeysRouter.get('/', checkToken, (req: Req, res, next) => { + const { logger } = req; + const uid = req.users.id; + logger.info('try get acceesKeys', { uid }); + accountManager + .getAllAccessKeyByUid(uid) + .then((accessKeys) => { + logger.info('get acceesKeys success', { uid }); + res.send({ accessKeys }); + }) + .catch((e) => { + next(e); + }); +}); + +accessKeysRouter.post( + '/', + checkToken, + ( + req: Req< + Record, + { + createdBy: string; + friendlyName: string; + ttl: string; + description: string; + } + >, + res, + next, + ) => { + const { logger, body } = req; + const uid = req.users.id; + const createdBy = _.trim(body.createdBy); + const friendlyName = _.trim(body.friendlyName); + const ttl = parseInt(body.ttl, 10); + const description = _.trim(body.description); + logger.info('try to generate access key', { + uid, + name: friendlyName, + body: JSON.stringify(body), + }); + return accountManager + .isExsitAccessKeyName(uid, friendlyName) + .then((data) => { + if (!_.isEmpty(data)) { + throw new AppError(`The access key "${friendlyName}" already exists.`); + } + }) + .then(() => { + const { identical } = req.users; + const newAccessKey = randToken(28).concat(identical); + return accountManager.createAccessKey( + uid, + newAccessKey, + ttl, + friendlyName, + createdBy, + description, + ); + }) + .then((newToken) => { + const info = { + name: newToken.tokens, + createdTime: moment(newToken.created_at).valueOf(), + createdBy: newToken.created_by, + expires: moment(newToken.expires_at).valueOf(), + description: newToken.description, + friendlyName: newToken.name, + }; + logger.info('create access key success', { + uid, + name: newToken.name, + }); + res.send({ accessKey: info }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('create access key failed', { + uid, + name: friendlyName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +accessKeysRouter.delete('/:name', checkToken, (req: Req<{ name: string }>, res, next) => { + const { logger, params } = req; + const name = _.trim(decodeURI(params.name)); + const uid = req.users.id; + logger.info('try to delete access key', { uid, name }); + return UserTokens.destroy({ where: { name, uid } }) + .then(() => { + logger.info('delete acceesKey success', { uid, name }); + res.send({ friendlyName: name }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('delete acceesKey failed', { uid, name }); + res.status(406).send(e.message); + } else { + next(e); + } + }); +}); From e9c13a5ea6cb48e8338cb3314312fce51587b631 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 21 Feb 2022 11:54:59 +0800 Subject: [PATCH 202/347] fix: put x-request-id to res header --- src/core/middleware.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/middleware.ts b/src/core/middleware.ts index 33fa9912..b405f149 100644 --- a/src/core/middleware.ts +++ b/src/core/middleware.ts @@ -27,11 +27,13 @@ export interface Res extends Response {} */ export function withLogger(req: Req, res: Res, next: NextFunction) { const { method, path, headers } = req; + const requestId = headers['x-request-id'] || randomUUID(); req.logger = logger.bindContext({ path, method, - requestId: headers['x-request-id'] || randomUUID(), + requestId, }); + res.header('X-Request-Id', requestId); next(); } From 1ef9d0f92ea706cd229933ffe3b0cf9d7662aa62 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 21 Feb 2022 14:53:21 +0800 Subject: [PATCH 203/347] refactor: turn apps route to ts --- package-lock.json | 9 + package.json | 1 + src/app.ts | 10 +- src/core/const.ts | 1 + src/core/services/client-manager.ts | 2 +- src/core/services/package-manager.ts | 41 +- src/models/packages.ts | 4 +- src/routes/accessKeys.ts | 2 +- src/routes/apps.js | 840 ----------------- src/routes/apps.ts | 1260 ++++++++++++++++++++++++++ 10 files changed, 1304 insertions(+), 866 deletions(-) delete mode 100644 src/routes/apps.js create mode 100644 src/routes/apps.ts diff --git a/package-lock.json b/package-lock.json index 6e8fe31a..b6c31bd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -740,6 +740,15 @@ "@types/range-parser": "*" } }, + "@types/formidable": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-2.0.4.tgz", + "integrity": "sha512-6HYcnmBCeby/nNGgX9kq1DxUpK2UcB3yoHCr3GzFjjqkpivOdcBSbsXP9NbxLcPEi11Fl/L41rbFCIsteF9sbg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", diff --git a/package.json b/package.json index 1dc794b4..eb48f0f2 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", + "@types/formidable": "2.0.4", "@types/fs-extra": "9.0.13", "@types/jsonwebtoken": "8.5.8", "@types/lodash": "4.14.178", diff --git a/src/app.ts b/src/app.ts index 37b34baa..db0818ae 100644 --- a/src/app.ts +++ b/src/app.ts @@ -10,13 +10,12 @@ import { config } from './core/config'; import { Req, Res, withLogger } from './core/middleware'; import { accessKeysRouter } from './routes/accessKeys'; import { accountRouter } from './routes/account'; +import { appsRouter } from './routes/apps'; import { authRouter } from './routes/auth'; import { indexRouter } from './routes/index'; import { indexV1Router } from './routes/indexV1'; import { usersRouter } from './routes/users'; -const apps = require('./routes/apps'); - export const app = express(); app.use( @@ -74,13 +73,16 @@ if (config.common.storageType === 'local') { } // config routes +// code-push-client routes app.use('/', indexRouter); app.use('/v0.1/public/codepush', indexV1Router); -app.use('/auth', authRouter); +// code-push-cli routes app.use('/accessKeys', accessKeysRouter); +app.use('/apps', appsRouter); app.use('/account', accountRouter); +// code-push-server routes +app.use('/auth', authRouter); app.use('/users', usersRouter); -app.use('/apps', apps); // 404 handler // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/src/core/const.ts b/src/core/const.ts index 8f4373e5..70764831 100644 --- a/src/core/const.ts +++ b/src/core/const.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/naming-convention */ // supported platforms +// TODO: refactor to enums and put name mapping into util method export const IOS = 1; export const IOS_NAME = 'iOS'; export const ANDROID = 2; diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index 5758cabe..1e367d29 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -42,7 +42,7 @@ class ClientManager { } clearUpdateCheckCache(deploymentKey, appVersion, label, packageHash, logger: Logger) { - logger.debug('clear cache Deployments key:', { + logger.info('clear cache Deployments key', { key: deploymentKey, }); const redisCacheKey = this.getUpdateCheckCacheKey( diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index b061023a..44f0074d 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -2,6 +2,7 @@ import fs from 'fs'; import os from 'os'; import path from 'path'; +import { Request } from 'express'; import formidable from 'formidable'; import { logger } from 'kv-logger'; import _ from 'lodash'; @@ -62,28 +63,27 @@ class PackageManager { }); } - parseReqFile(req) { + parseReqFile(req: Request) { logger.debug('parseReqFile'); - return new Promise((resolve, reject) => { + return new Promise<{ packageInfo: string; package: formidable.File }>((resolve, reject) => { const form = formidable(); form.parse(req, (err, fields, files) => { if (err) { - logger.debug('parseReqFile:', err); reject(new AppError('upload error')); - } else { - logger.debug('parseReqFile fields:', fields); - logger.debug('parseReqFile file location:', _.get(files, 'package.filepath')); - if (_.isEmpty(fields.packageInfo) || _.isEmpty(_.get(files, 'package'))) { - logger.debug('parseReqFile upload info lack'); - reject(new AppError('upload info lack')); - } else { - logger.debug('parseReqFile is ok'); - resolve({ - packageInfo: JSON.parse(fields.packageInfo), - package: files.package, - }); - } + return; + } + + if (_.isEmpty(fields.packageInfo) || _.isEmpty(_.get(files, 'package'))) { + logger.debug('parseReqFile upload info lack'); + reject(new AppError('upload info lack')); + return; } + + logger.debug('parseReqFile is ok'); + resolve({ + packageInfo: JSON.parse(fields.packageInfo as string), + package: files.package as formidable.File, + }); }); }); } @@ -300,7 +300,7 @@ class PackageManager { }); } - createDiffPackagesByLastNums(appId, originalPackage, num) { + createDiffPackagesByLastNums(appId, originalPackage: PackagesInterface, num: number) { const packageId = originalPackage.id; return Promise.all([ Packages.findAll({ @@ -621,6 +621,7 @@ class PackageManager { logger.debug(`targetBinaryVersion ${appVersion} not support.`); throw new AppError(`targetBinaryVersion ${appVersion} not support.`); } + const createParams = { releaseMethod: RELEASE_METHOD_PROMOTE, releaseUid: params.promoteUid || 0, @@ -657,7 +658,11 @@ class PackageManager { }); } - rollbackPackage(deploymentVersionId, targetLabel, rollbackUid) { + rollbackPackage( + deploymentVersionId: number, + targetLabel: string | undefined, + rollbackUid: number, + ) { return DeploymentsVersions.findByPk(deploymentVersionId).then((deploymentsVersions) => { if (!deploymentsVersions) { throw new AppError('您之前还没有发布过版本'); diff --git a/src/models/packages.ts b/src/models/packages.ts index 011d66d4..5d66b644 100644 --- a/src/models/packages.ts +++ b/src/models/packages.ts @@ -14,7 +14,7 @@ export interface PackagesInterface extends Model { label: string; original_label: string; original_deployment: string; - released_by: string; + released_by: number; is_mandatory: number; is_disabled: number; rollout: number; @@ -42,7 +42,7 @@ export const Packages = sequelize.define( label: DataTypes.STRING, original_label: DataTypes.STRING, original_deployment: DataTypes.STRING, - released_by: DataTypes.STRING, + released_by: DataTypes.BIGINT({ length: 20 }), is_mandatory: DataTypes.INTEGER({ length: 3 }), is_disabled: DataTypes.INTEGER({ length: 3 }), rollout: DataTypes.INTEGER({ length: 3 }), diff --git a/src/routes/accessKeys.ts b/src/routes/accessKeys.ts index 917df23d..8f739972 100644 --- a/src/routes/accessKeys.ts +++ b/src/routes/accessKeys.ts @@ -103,7 +103,7 @@ accessKeysRouter.post( accessKeysRouter.delete('/:name', checkToken, (req: Req<{ name: string }>, res, next) => { const { logger, params } = req; - const name = _.trim(decodeURI(params.name)); + const name = _.trim(params.name); const uid = req.users.id; logger.info('try to delete access key', { uid, name }); return UserTokens.destroy({ where: { name, uid } }) diff --git a/src/routes/apps.js b/src/routes/apps.js deleted file mode 100644 index a5a340e5..00000000 --- a/src/routes/apps.js +++ /dev/null @@ -1,840 +0,0 @@ -import express from 'express'; -import _ from 'lodash'; -import validator from 'validator'; -import { config } from '../core/config'; -import { logger } from 'kv-logger'; - -import { AppError } from '../core/app-error'; -import { accountManager } from '../core/services/account-manager'; -import { clientManager } from '../core/services/client-manager'; -import { packageManager } from '../core/services/package-manager'; -import { - IOS, - IOS_NAME, - ANDROID, - ANDROID_NAME, - WINDOWS, - WINDOWS_NAME, - REACT_NATIVE, - REACT_NATIVE_NAME, - CORDOVA, - CORDOVA_NAME, -} from '../core/const'; -import { deleteFolderSync } from '../core/utils/common'; -import { appManager } from '../core/services/app-manager'; -import { collaboratorsManager } from '../core/services/collaborators-manager'; -import { deploymentsManager } from '../core/services/deployments-manager'; -import { checkToken } from '../core/middleware'; - -const router = express.Router(); - -function delay(ms) { - return new Promise(function (resolve) { - setTimeout(resolve, ms); - }); -} - -router.get('/', checkToken, (req, res, next) => { - var uid = req.users.id; - appManager - .listApps(uid) - .then((data) => { - res.send({ apps: data }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.get('/:appName/deployments', checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - return deploymentsManager.listDeloyments(col.appid); - }) - .then((data) => { - res.send({ deployments: data }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.get('/:appName/deployments/:deploymentName', checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - return deploymentsManager.findDeloymentByName(deploymentName, col.appid); - }) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError('does not find the deployment'); - } - // TODO: check if this works as expected - res.send({ deployment: deploymentsManager.listDeloyment(deploymentInfo) }); - return true; - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.post('/:appName/deployments', checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var name = req.body.name; - accountManager - .ownerCan(uid, appName) - .then((col) => { - return deploymentsManager.addDeloyment(name, col.appid, uid); - }) - .then((data) => { - res.send({ deployment: { name: data.name, key: data.deployment_key } }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.get('/:appName/deployments/:deploymentName/metrics', checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError('does not find the deployment'); - } - return deploymentInfo; - }); - }) - .then((deploymentInfo) => { - return deploymentsManager.getAllPackageIdsByDeploymentsId(deploymentInfo.id); - }) - .then((packagesInfos) => { - return packagesInfos.reduce((prev, v) => { - return prev.then((result) => { - return packageManager.getMetricsbyPackageId(v.get('id')).then((metrics) => { - if (metrics) { - result[v.get('label')] = { - active: metrics.get('active'), - downloaded: metrics.get('downloaded'), - failed: metrics.get('failed'), - installed: metrics.get('installed'), - }; - } - return result; - }); - }); - }, Promise.resolve({})); - }) - .then((rs) => { - res.send({ metrics: rs }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.send({ metrics: null }); - } else { - next(e); - } - }); -}); - -router.get('/:appName/deployments/:deploymentName/history', checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError('does not find the deployment'); - } - return deploymentInfo; - }); - }) - .then((deploymentInfo) => { - return deploymentsManager.getDeploymentHistory(deploymentInfo.id); - }) - .then((rs) => { - res.send({ history: _.pullAll(rs, [null, false]) }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.delete('/:appName/deployments/:deploymentName/history', checkToken, (req, res, next) => { - var uid = req.users.id; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - accountManager - .ownerCan(uid, appName) - .then((col) => { - return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError('does not find the deployment'); - } - return deploymentInfo; - }); - }) - .then((deploymentInfo) => { - return deploymentsManager.deleteDeploymentHistory(deploymentInfo.id); - }) - .then((rs) => { - res.send('ok'); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.patch('/:appName/deployments/:deploymentName', checkToken, (req, res, next) => { - var name = req.body.name; - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - accountManager - .ownerCan(uid, appName) - .then((col) => { - return deploymentsManager.renameDeloymentByName(deploymentName, col.appid, name); - }) - .then((data) => { - res.send({ deployment: data }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.delete('/:appName/deployments/:deploymentName', checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - accountManager - .ownerCan(uid, appName) - .then((col) => { - return deploymentsManager.deleteDeloymentByName(deploymentName, col.appid); - }) - .then((data) => { - res.send({ deployment: data }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.post('/:appName/deployments/:deploymentName/release', checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - - logger.info('try to release', { - uid, - appName, - deploymentName, - }); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - logger.debug('release user check pass', { - uid, - appName, - deploymentName, - }); - - return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - logger.debug(`does not find the deployment`); - throw new AppError('does not find the deployment'); - } - logger.debug('release deployment check ok', { - uid, - appName, - deploymentName, - }); - - return packageManager - .parseReqFile(req) - .then((data) => { - if (data.package.mimetype != 'application/zip') { - logger.debug(`upload file type is invlidate`, data.package); - throw new AppError('upload file type is invalidate'); - } - logger.debug('release packagee parse ok', { - uid, - appName, - deploymentName, - }); - - return packageManager - .releasePackage( - deploymentInfo.appid, - deploymentInfo.id, - data.packageInfo, - data.package.filepath, - uid, - ) - .finally(() => { - deleteFolderSync(data.package.filepath); - }); - }) - .then((packages) => { - if (packages) { - delay(1000).then(() => { - packageManager - .createDiffPackagesByLastNums( - deploymentInfo.appid, - packages, - _.get(config, 'common.diffNums', 1), - ) - .catch((e) => { - logger.error(e); - }); - }); - } - //clear cache if exists. - if (_.get(config, 'common.updateCheckCache', false) !== false) { - delay(2500).then(() => { - clientManager.clearUpdateCheckCache( - deploymentInfo.deployment_key, - '*', - '*', - '*', - logger, - ); - }); - } - return null; - }); - }); - }) - .then(() => { - logger.info('release success', { - uid, - appName, - deploymentName, - }); - - res.send('{"msg": "succeed"}'); - }) - .catch((e) => { - if (e instanceof AppError) { - logger.warn(e.message); - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.patch('/:appName/deployments/:deploymentName/release', checkToken, (req, res, next) => { - logger.debug('req.body', req.body); - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - var label = _.get(req, 'body.packageInfo.label'); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) - .then((deploymentInfo) => { - if (_.isEmpty(deploymentInfo)) { - throw new AppError('does not find the deployment'); - } - if (label) { - return packageManager - .findPackageInfoByDeploymentIdAndLabel(deploymentInfo.id, label) - .then((data) => { - return [deploymentInfo, data]; - }); - } else { - var deploymentVersionId = deploymentInfo.last_deployment_version_id; - return packageManager - .findLatestPackageInfoByDeployVersion(deploymentVersionId) - .then((data) => { - return [deploymentInfo, data]; - }); - } - }) - .then(([deploymentInfo, packageInfo]) => { - if (!packageInfo) { - throw new AppError('does not find the packageInfo'); - } - return packageManager - .modifyReleasePackage(packageInfo.id, _.get(req, 'body.packageInfo')) - .then(() => { - //clear cache if exists. - if (_.get(config, 'common.updateCheckCache', false) !== false) { - delay(2500).then(() => { - clientManager.clearUpdateCheckCache( - deploymentInfo.deployment_key, - '*', - '*', - '*', - logger, - ); - }); - } - }); - }); - }) - .then((data) => { - res.send(''); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.post( - '/:appName/deployments/:sourceDeploymentName/promote/:destDeploymentName', - checkToken, - (req, res, next) => { - logger.debug('req.body:', req.body); - var appName = _.trim(req.params.appName); - var sourceDeploymentName = _.trim(req.params.sourceDeploymentName); - var destDeploymentName = _.trim(req.params.destDeploymentName); - var uid = req.users.id; - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - var appId = col.appid; - return Promise.all([ - deploymentsManager.findDeloymentByName(sourceDeploymentName, appId), - deploymentsManager.findDeloymentByName(destDeploymentName, appId), - ]) - .then(([sourceDeploymentInfo, destDeploymentInfo]) => { - if (!sourceDeploymentInfo) { - throw new AppError(`${sourceDeploymentName} does not exist.`); - } - if (!destDeploymentInfo) { - throw new AppError(`${destDeploymentName} does not exist.`); - } - return [sourceDeploymentInfo, destDeploymentInfo]; - }) - .then(([sourceDeploymentInfo, destDeploymentInfo]) => { - var params = _.get(req.body, 'packageInfo', {}); - _.set(params, 'promoteUid', uid); - return [ - packageManager.promotePackage( - sourceDeploymentInfo, - destDeploymentInfo, - params, - ), - destDeploymentInfo, - ]; - }) - .then(([packages, destDeploymentInfo]) => { - if (packages) { - delay(1000).then(() => { - packageManager - .createDiffPackagesByLastNums( - destDeploymentInfo.appid, - packages, - _.get(config, 'common.diffNums', 1), - ) - .catch((e) => { - logger.error(e); - }); - }); - } - //clear cache if exists. - if (_.get(config, 'common.updateCheckCache', false) !== false) { - delay(2500).then(() => { - clientManager.clearUpdateCheckCache( - destDeploymentInfo.deployment_key, - '*', - '*', - '*', - logger, - ); - }); - } - return packages; - }); - }) - .then((packages) => { - res.send({ package: packages }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); - }, -); - -var rollbackCb = function (req, res, next) { - var appName = _.trim(req.params.appName); - var deploymentName = _.trim(req.params.deploymentName); - var uid = req.users.id; - var targetLabel = _.trim(_.get(req, 'params.label')); - logger.info('try to rollback', { - uid, - appName, - deploymentName, - targetLabel, - }); - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - return deploymentsManager.findDeloymentByName(deploymentName, col.appid); - }) - .then((dep) => { - return packageManager - .rollbackPackage(dep.last_deployment_version_id, targetLabel, uid) - .then((packageInfo) => { - if (packageInfo) { - delay(1000).then(() => { - packageManager - .createDiffPackagesByLastNums(dep.appid, packageInfo, 1) - .catch((e) => { - logger.error(e); - }); - }); - } - //clear cache if exists. - if (_.get(config, 'common.updateCheckCache', false) !== false) { - delay(2500).then(() => { - clientManager.clearUpdateCheckCache( - dep.deployment_key, - '*', - '*', - '*', - logger, - ); - }); - } - return packageInfo; - }); - }) - .then(() => { - logger.info('rollback success', { - uid, - appName, - deploymentName, - targetLabel, - }); - - res.send('ok'); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}; - -router.post('/:appName/deployments/:deploymentName/rollback', checkToken, rollbackCb); - -router.post('/:appName/deployments/:deploymentName/rollback/:label', checkToken, rollbackCb); - -router.get('/:appName/collaborators', checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var uid = req.users.id; - accountManager - .collaboratorCan(uid, appName) - .then((col) => { - return collaboratorsManager.listCollaborators(col.appid); - }) - .then((data) => { - const rs = _.reduce( - data, - (result, value, key) => { - if (_.eq(key, req.users.email)) { - value.isCurrentAccount = true; - } else { - value.isCurrentAccount = false; - } - result[key] = value; - return result; - }, - {}, - ); - res.send({ collaborators: rs }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.post('/:appName/collaborators/:email', checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var email = _.trim(req.params.email); - var uid = req.users.id; - if (!validator.isEmail(email)) { - return res.status(406).send('Invalid Email!'); - } - accountManager - .ownerCan(uid, appName) - .then((col) => { - return accountManager.findUserByEmail(email).then((data) => { - return collaboratorsManager.addCollaborator(col.appid, data.id); - }); - }) - .then((data) => { - res.send(data); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.delete('/:appName/collaborators/:email', checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var email = _.trim(decodeURI(req.params.email)); - var uid = req.users.id; - if (!validator.isEmail(email)) { - return res.status(406).send('Invalid Email!'); - } - accountManager - .ownerCan(uid, appName) - .then((col) => { - return accountManager.findUserByEmail(email).then((data) => { - if (_.eq(data.id, uid)) { - throw new AppError("can't delete yourself!"); - } else { - return collaboratorsManager.deleteCollaborator(col.appid, data.id); - } - }); - }) - .then(() => { - res.send(''); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.delete('/:appName', checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var uid = req.users.id; - logger.info('try remove app', { - uid, - appName, - }); - - accountManager - .ownerCan(uid, appName) - .then((col) => { - return appManager.deleteApp(col.appid); - }) - .then((data) => { - logger.info('remove app success', { - uid, - appName, - }); - - res.send(data); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.patch('/:appName', checkToken, (req, res, next) => { - var newAppName = _.trim(req.body.name); - var appName = _.trim(req.params.appName); - var uid = req.users.id; - logger.info('try rename app', { - uid, - appName, - newAppName, - }); - if (_.isEmpty(newAppName)) { - return res.status(406).send('Please input name!'); - } else { - return accountManager - .ownerCan(uid, appName) - .then((col) => { - return appManager.findAppByName(uid, newAppName).then((appInfo) => { - if (!_.isEmpty(appInfo)) { - throw new AppError(newAppName + ' Exist!'); - } - return appManager.modifyApp(col.appid, { name: newAppName }); - }); - }) - .then(() => { - logger.info('rename app success', { - uid, - appName, - newAppName, - }); - - res.send(''); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); - } -}); - -router.post('/:appName/transfer/:email', checkToken, (req, res, next) => { - var appName = _.trim(req.params.appName); - var email = _.trim(req.params.email); - var uid = req.users.id; - if (!validator.isEmail(email)) { - return res.status(406).send('Invalid Email!'); - } - return accountManager - .ownerCan(uid, appName) - .then((col) => { - return accountManager.findUserByEmail(email).then((data) => { - if (_.eq(data.id, uid)) { - throw new AppError("You can't transfer to yourself!"); - } - return appManager.transferApp(col.appid, uid, data.id); - }); - }) - .then((data) => { - res.send(data); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -router.post('/', checkToken, (req, res, next) => { - var uid = req.users.id; - logger.info('try add app', { - uid, - ...req.body, - }); - var appName = req.body.name; - if (_.isEmpty(appName)) { - return res.status(406).send('Please input name!'); - } - var osName = _.toLower(req.body.os); - var os; - if (osName == _.toLower(IOS_NAME)) { - os = IOS; - } else if (osName == _.toLower(ANDROID_NAME)) { - os = ANDROID; - } else if (osName == _.toLower(WINDOWS_NAME)) { - os = WINDOWS; - } else { - return res.status(406).send('Please input os [iOS|Android|Windows]!'); - } - var platformName = _.toLower(req.body.platform); - var platform; - if (platformName == _.toLower(REACT_NATIVE_NAME)) { - platform = REACT_NATIVE; - } else if (platformName == _.toLower(CORDOVA_NAME)) { - platform = CORDOVA; - } else { - return res.status(406).send('Please input platform [React-Native|Cordova]!'); - } - var manuallyProvisionDeployments = req.body.manuallyProvisionDeployments; - - appManager - .findAppByName(uid, appName) - .then((appInfo) => { - if (!_.isEmpty(appInfo)) { - throw new AppError(appName + ' Exist!'); - } - return appManager.addApp(uid, appName, os, platform, req.users.identical).then(() => { - return { - name: appName, - collaborators: { [req.users.email]: { permission: 'Owner' } }, - }; - }); - }) - .then((data) => { - logger.info('add app success', { - uid, - name: appName, - }); - res.send({ app: data }); - }) - .catch((e) => { - if (e instanceof AppError) { - res.status(406).send(e.message); - } else { - next(e); - } - }); -}); - -module.exports = router; diff --git a/src/routes/apps.ts b/src/routes/apps.ts new file mode 100644 index 00000000..935e1bba --- /dev/null +++ b/src/routes/apps.ts @@ -0,0 +1,1260 @@ +/* eslint-disable max-lines */ +import express from 'express'; +import _ from 'lodash'; +import validator from 'validator'; +import { AppError } from '../core/app-error'; +import { config } from '../core/config'; + +import { + IOS, + IOS_NAME, + ANDROID, + ANDROID_NAME, + WINDOWS, + WINDOWS_NAME, + REACT_NATIVE, + REACT_NATIVE_NAME, + CORDOVA, + CORDOVA_NAME, +} from '../core/const'; +import { checkToken, Req } from '../core/middleware'; +import { accountManager } from '../core/services/account-manager'; +import { appManager } from '../core/services/app-manager'; +import { clientManager } from '../core/services/client-manager'; +import { collaboratorsManager } from '../core/services/collaborators-manager'; +import { deploymentsManager } from '../core/services/deployments-manager'; +import { packageManager } from '../core/services/package-manager'; +import { deleteFolderSync } from '../core/utils/common'; +import { PackagesInterface } from '../models/packages'; + +function delay(ms: number) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +export const appsRouter = express.Router(); + +appsRouter.get('/', checkToken, (req: Req, res, next) => { + const { logger } = req; + const uid = req.users.id; + logger.info('try list apps', { uid }); + appManager + .listApps(uid) + .then((data) => { + logger.info('list apps success', { uid }); + res.send({ apps: data }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('list apps failed', { uid, error: e.message }); + res.status(406).send(e.message); + } else { + next(e); + } + }); +}); + +appsRouter.get('/:appName/deployments', checkToken, (req: Req<{ appName: string }>, res, next) => { + const { logger, params } = req; + const uid = req.users.id; + const appName = _.trim(params.appName); + logger.info('try list deployments', { + uid, + appName, + }); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deploymentsManager.listDeloyments(col.appid); + }) + .then((data) => { + logger.info('list deployments success', { + uid, + appName, + }); + res.send({ deployments: data }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('list deployments failed', { + uid, + appName, + error: e.message, + }); + res.status(406).send(e.message); + } else { + next(e); + } + }); +}); + +appsRouter.get( + '/:appName/deployments/:deploymentName', + checkToken, + (req: Req<{ appName: string; deploymentName: string }>, res, next) => { + const { logger, params } = req; + const uid = req.users.id; + const appName = _.trim(params.appName); + const deploymentName = _.trim(params.deploymentName); + logger.info('try to get deployment', { + uid, + appName, + deploymentName, + }); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deploymentsManager.findDeloymentByName(deploymentName, col.appid); + }) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError('does not find the deployment'); + } + logger.info('get deployment success', { + uid, + appName, + deploymentName, + }); + + // TODO: check if this works as expected + res.send({ deployment: deploymentsManager.listDeloyment(deploymentInfo) }); + return true; + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('get deployment failed', { + uid, + appName, + deploymentName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.post( + '/:appName/deployments', + checkToken, + (req: Req<{ appName: string }, { name: string }>, res, next) => { + const { logger, params, body } = req; + const uid = req.users.id; + const appName = _.trim(params.appName); + const { name } = body; + logger.info('try to create deployment', { + uid, + appName, + deploymentName: name, + }); + accountManager + .ownerCan(uid, appName) + .then((col) => { + return deploymentsManager.addDeloyment(name, col.appid, uid); + }) + .then((data) => { + logger.info('create deployment success', { + uid, + appName, + deploymentName: data.name, + }); + + res.send({ deployment: { name: data.name, key: data.deployment_key } }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('create deployment failed', { + uid, + appName, + deploymentName: name, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.get( + '/:appName/deployments/:deploymentName/metrics', + checkToken, + (req: Req<{ appName: string; deploymentName: string }>, res, next) => { + const { logger, params } = req; + const uid = req.users.id; + const appName = _.trim(params.appName); + const deploymentName = _.trim(params.deploymentName); + logger.info('try to get deployment metrics', { + uid, + appName, + deploymentName, + }); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deploymentsManager + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError('does not find the deployment'); + } + return deploymentInfo; + }); + }) + .then((deploymentInfo) => { + return deploymentsManager.getAllPackageIdsByDeploymentsId(deploymentInfo.id); + }) + .then((packagesInfos) => { + return packagesInfos.reduce( + (prev, v) => { + return prev.then((result) => { + return packageManager + .getMetricsbyPackageId(v.get('id')) + .then((metrics) => { + if (metrics) { + // eslint-disable-next-line no-param-reassign + result[v.get('label')] = { + active: metrics.get('active'), + downloaded: metrics.get('downloaded'), + failed: metrics.get('failed'), + installed: metrics.get('installed'), + }; + } + return result; + }); + }); + }, + Promise.resolve( + {} as Record< + string, + { + active: number; + downloaded: number; + failed: number; + installed: number; + } + >, + ), + ); + }) + .then((rs) => { + logger.info('get deployment metrics success', { + uid, + appName, + deploymentName, + }); + + res.send({ metrics: rs }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('get deployment metrics failed', { + uid, + appName, + deploymentName, + error: e.message, + }); + + res.send({ metrics: null }); + } else { + next(e); + } + }); + }, +); + +appsRouter.get( + '/:appName/deployments/:deploymentName/history', + checkToken, + (req: Req<{ appName: string; deploymentName: string }>, res, next) => { + const { logger, params } = req; + const uid = req.users.id; + const appName = _.trim(params.appName); + const deploymentName = _.trim(params.deploymentName); + logger.info('try to get deployment history', { + uid, + appName, + deploymentName, + }); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deploymentsManager + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError('does not find the deployment'); + } + return deploymentInfo; + }); + }) + .then((deploymentInfo) => { + return deploymentsManager.getDeploymentHistory(deploymentInfo.id); + }) + .then((rs) => { + logger.info('get deployment history success', { + uid, + appName, + deploymentName, + }); + + res.send({ history: _.pull(rs, null) }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('get deployment history failed', { + uid, + appName, + deploymentName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.delete( + '/:appName/deployments/:deploymentName/history', + checkToken, + (req: Req<{ appName: string; deploymentName: string }>, res, next) => { + const { logger, params } = req; + const uid = req.users.id; + const appName = _.trim(params.appName); + const deploymentName = _.trim(params.deploymentName); + logger.info('try to delete deployment history', { + uid, + appName, + deploymentName, + }); + accountManager + .ownerCan(uid, appName) + .then((col) => { + return deploymentsManager + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError('does not find the deployment'); + } + return deploymentInfo; + }); + }) + .then((deploymentInfo) => { + return deploymentsManager.deleteDeploymentHistory(deploymentInfo.id); + }) + .then(() => { + logger.info('delete deployment history success', { + uid, + appName, + deploymentName, + }); + + res.send('ok'); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('delete deployment history failed', { + uid, + appName, + deploymentName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.patch( + '/:appName/deployments/:deploymentName', + checkToken, + (req: Req<{ appName: string; deploymentName: string }, { name: string }>, res, next) => { + const { logger, params, body } = req; + const { name } = body; + const appName = _.trim(params.appName); + const deploymentName = _.trim(params.deploymentName); + const uid = req.users.id; + logger.info('try to update deployment', { + uid, + appName, + deploymentName, + newName: name, + }); + accountManager + .ownerCan(uid, appName) + .then((col) => { + return deploymentsManager.renameDeloymentByName(deploymentName, col.appid, name); + }) + .then((data) => { + logger.info('update deployment success', { + uid, + appName, + deploymentName, + newName: name, + }); + + res.send({ deployment: data }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('update deployment failed', { + uid, + appName, + deploymentName, + newName: name, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.delete( + '/:appName/deployments/:deploymentName', + checkToken, + (req: Req<{ appName: string; deploymentName: string }>, res, next) => { + const { logger, params } = req; + const appName = _.trim(params.appName); + const deploymentName = _.trim(params.deploymentName); + const uid = req.users.id; + logger.info('try to delete deployment', { + uid, + appName, + deploymentName, + }); + accountManager + .ownerCan(uid, appName) + .then((col) => { + return deploymentsManager.deleteDeloymentByName(deploymentName, col.appid); + }) + .then((data) => { + logger.info('delete deployment success', { + uid, + appName, + deploymentName, + }); + + res.send({ deployment: data }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('delete deployment failed', { + uid, + appName, + deploymentName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.post( + '/:appName/deployments/:deploymentName/release', + checkToken, + // eslint-disable-next-line max-lines-per-function + (req: Req<{ appName: string; deploymentName: string }>, res, next) => { + const { logger, params } = req; + const appName = _.trim(params.appName); + const deploymentName = _.trim(params.deploymentName); + const uid = req.users.id; + logger.info('try to release', { + uid, + appName, + deploymentName, + }); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + logger.info('release user check ok', { + uid, + appName, + deploymentName, + }); + + return deploymentsManager + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError('does not find the deployment'); + } + logger.info('release deployment check ok', { + uid, + appName, + deploymentName, + }); + + return packageManager + .parseReqFile(req) + .then((data) => { + if (data.package.mimetype !== 'application/zip') { + throw new AppError( + `upload file type is invalidate: ${data.package.mimetype}`, + ); + } + logger.info('release packagee parse ok', { + uid, + appName, + deploymentName, + }); + + return packageManager + .releasePackage( + deploymentInfo.appid, + deploymentInfo.id, + data.packageInfo, + data.package.filepath, + uid, + ) + .finally(() => { + deleteFolderSync(data.package.filepath); + }); + }) + .then((packages) => { + if (packages) { + delay(1000).then(() => { + packageManager + .createDiffPackagesByLastNums( + deploymentInfo.appid, + packages, + config.common.diffNums, + ) + .catch((e) => { + logger.error(e); + }); + }); + } + // clear cache if exists. + if (config.common.updateCheckCache) { + delay(2500).then(() => { + clientManager.clearUpdateCheckCache( + deploymentInfo.deployment_key, + '*', + '*', + '*', + logger, + ); + }); + } + return null; + }); + }); + }) + .then(() => { + logger.info('release success', { + uid, + appName, + deploymentName, + }); + + res.send('{"msg": "succeed"}'); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('release failed', { + uid, + appName, + deploymentName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.patch( + '/:appName/deployments/:deploymentName/release', + checkToken, + // eslint-disable-next-line max-lines-per-function + ( + req: Req<{ appName: string; deploymentName: string }, { packageInfo: { label: string } }>, + res, + next, + ) => { + const { logger, params, body } = req; + const appName = _.trim(params.appName); + const deploymentName = _.trim(params.deploymentName); + const uid = req.users.id; + logger.info('try modify release package', { + uid, + appName, + deploymentName, + body: JSON.stringify(body), + }); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deploymentsManager + .findDeloymentByName(deploymentName, col.appid) + .then((deploymentInfo) => { + if (_.isEmpty(deploymentInfo)) { + throw new AppError('does not find the deployment'); + } + const label = _.get(body, 'packageInfo.label'); + if (label) { + return packageManager + .findPackageInfoByDeploymentIdAndLabel(deploymentInfo.id, label) + .then((data) => { + return [deploymentInfo, data] as const; + }); + } + const deploymentVersionId = deploymentInfo.last_deployment_version_id; + return packageManager + .findLatestPackageInfoByDeployVersion(deploymentVersionId) + .then((data) => { + return [deploymentInfo, data] as const; + }); + }) + .then(([deploymentInfo, packageInfo]) => { + if (!packageInfo) { + throw new AppError('does not find the packageInfo'); + } + return packageManager + .modifyReleasePackage(packageInfo.id, body.packageInfo) + .then(() => { + // clear cache if exists. + if (config.common.updateCheckCache) { + delay(2500).then(() => { + clientManager.clearUpdateCheckCache( + deploymentInfo.deployment_key, + '*', + '*', + '*', + logger, + ); + }); + } + }); + }); + }) + .then(() => { + logger.info('modify release package success', { + uid, + appName, + deploymentName, + }); + + res.send(''); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('modify release package failed', { + uid, + appName, + deploymentName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.post( + '/:appName/deployments/:sourceDeploymentName/promote/:destDeploymentName', + checkToken, + // eslint-disable-next-line max-lines-per-function + ( + req: Req< + { appName: string; sourceDeploymentName: string; destDeploymentName: string }, + { packageInfo: unknown } + >, + res, + next, + ) => { + const { logger, params, body } = req; + const appName = _.trim(params.appName); + const sourceDeploymentName = _.trim(params.sourceDeploymentName); + const destDeploymentName = _.trim(params.destDeploymentName); + const uid = req.users.id; + + logger.info('try promote package', { + uid, + appName, + sourceDeploymentName, + destDeploymentName, + body: JSON.stringify(body), + }); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + const appId = col.appid; + return Promise.all([ + deploymentsManager.findDeloymentByName(sourceDeploymentName, appId), + deploymentsManager.findDeloymentByName(destDeploymentName, appId), + ]) + .then(([sourceDeploymentInfo, destDeploymentInfo]) => { + if (!sourceDeploymentInfo) { + throw new AppError(`${sourceDeploymentName} does not exist.`); + } + if (!destDeploymentInfo) { + throw new AppError(`${destDeploymentName} does not exist.`); + } + return [sourceDeploymentInfo, destDeploymentInfo]; + }) + .then(([sourceDeploymentInfo, destDeploymentInfo]) => { + const promoteParams = _.get(body, 'packageInfo', {}); + // TODO: define packageInfo interface in packageManager + _.set(promoteParams as any, 'promoteUid', uid); + return packageManager + .promotePackage(sourceDeploymentInfo, destDeploymentInfo, promoteParams) + .then((packages) => { + return [packages, destDeploymentInfo] as const; + }); + }) + .then(([packages, destDeploymentInfo]) => { + if (packages) { + delay(1000).then(() => { + packageManager + .createDiffPackagesByLastNums( + destDeploymentInfo.appid, + packages, + config.common.diffNums, + ) + .catch((e) => { + logger.error(e); + }); + }); + } + // clear cache if exists. + if (config.common.updateCheckCache) { + delay(2500).then(() => { + clientManager.clearUpdateCheckCache( + destDeploymentInfo.deployment_key, + '*', + '*', + '*', + logger, + ); + }); + } + return packages; + }); + }) + .then((packages) => { + logger.info('promote package success', { + uid, + appName, + sourceDeploymentName, + destDeploymentName, + }); + + res.send({ package: packages }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('promote package failed', { + uid, + appName, + sourceDeploymentName, + destDeploymentName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +function rollbackCb( + req: Req<{ appName: string; deploymentName: string; label?: string }>, + res, + next, +) { + const { logger, params } = req; + const appName = _.trim(params.appName); + const deploymentName = _.trim(params.deploymentName); + const targetLabel = _.trim(params.label); + const uid = req.users.id; + logger.info('try to rollback', { + uid, + appName, + deploymentName, + targetLabel, + }); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return deploymentsManager.findDeloymentByName(deploymentName, col.appid); + }) + .then((dep) => { + return packageManager + .rollbackPackage(dep.last_deployment_version_id, targetLabel, uid) + .then((packageInfo: PackagesInterface) => { + if (packageInfo) { + delay(1000).then(() => { + packageManager + .createDiffPackagesByLastNums(dep.appid, packageInfo, 1) + .catch((e) => { + logger.error(e); + }); + }); + } + // clear cache if exists. + if (config.common.updateCheckCache) { + delay(2500).then(() => { + logger.info('try clear update check cache'); + clientManager.clearUpdateCheckCache( + dep.deployment_key, + '*', + '*', + '*', + logger, + ); + }); + } + return packageInfo; + }); + }) + .then(() => { + logger.info('rollback success', { + uid, + appName, + deploymentName, + targetLabel, + }); + + res.send('ok'); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('rollback failed', { + uid, + appName, + deploymentName, + targetLabel, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); +} + +appsRouter.post('/:appName/deployments/:deploymentName/rollback', checkToken, rollbackCb); + +appsRouter.post('/:appName/deployments/:deploymentName/rollback/:label', checkToken, rollbackCb); + +appsRouter.get( + '/:appName/collaborators', + checkToken, + (req: Req<{ appName: string }>, res, next) => { + const { logger, params } = req; + const appName = _.trim(params.appName); + const uid = req.users.id; + logger.info('try list collaborators', { + uid, + appName, + }); + accountManager + .collaboratorCan(uid, appName) + .then((col) => { + return collaboratorsManager.listCollaborators(col.appid); + }) + .then((data) => { + const rs = _.reduce( + data, + (result, value, key) => { + let isCurrentAccount = false; + if (_.eq(key, req.users.email)) { + isCurrentAccount = true; + } + + // eslint-disable-next-line no-param-reassign + result[key] = { + ...value, + isCurrentAccount, + }; + return result; + }, + {} as Record, + ); + + logger.info('list collaborators success', { + uid, + appName, + }); + + res.send({ collaborators: rs }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('list collaborators failed', { + uid, + appName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.post( + '/:appName/collaborators/:email', + checkToken, + (req: Req<{ appName: string; email: string }>, res, next) => { + const { logger, params } = req; + const appName = _.trim(params.appName); + const email = _.trim(params.email); + const uid = req.users.id; + logger.info('try to add collaborator', { + uid, + appName, + email, + }); + if (!validator.isEmail(email)) { + res.status(406).send('Invalid Email!'); + return; + } + accountManager + .ownerCan(uid, appName) + .then((col) => { + return accountManager.findUserByEmail(email).then((data) => { + return collaboratorsManager.addCollaborator(col.appid, data.id); + }); + }) + .then((data) => { + logger.info('add collaborator success', { + uid, + appName, + email, + }); + + res.send(data); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('add collaborator failed', { + uid, + appName, + email, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.delete( + '/:appName/collaborators/:email', + checkToken, + (req: Req<{ appName: string; email: string }>, res, next) => { + const { logger, params } = req; + const appName = _.trim(params.appName); + const email = _.trim(params.email); + const uid = req.users.id; + logger.info('try remove app collaborator', { + uid, + appName, + email, + }); + + if (!validator.isEmail(email)) { + res.status(406).send('Invalid Email!'); + return; + } + accountManager + .ownerCan(uid, appName) + .then((col) => { + return accountManager.findUserByEmail(email).then((data) => { + if (_.eq(data.id, uid)) { + throw new AppError("can't delete yourself!"); + } else { + return collaboratorsManager.deleteCollaborator(col.appid, data.id); + } + }); + }) + .then(() => { + logger.info('remove app collaborator success', { + uid, + appName, + email, + }); + + res.send(''); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('remove app collaborator failed', { + uid, + appName, + email, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.delete('/:appName', checkToken, (req: Req<{ appName: string }>, res, next) => { + const { logger, params } = req; + const appName = _.trim(params.appName); + const uid = req.users.id; + logger.info('try remove app', { + uid, + appName, + }); + + accountManager + .ownerCan(uid, appName) + .then((col) => { + return appManager.deleteApp(col.appid); + }) + .then((data) => { + logger.info('remove app success', { + uid, + appName, + }); + + res.send(data); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('remove app failed', { + uid, + appName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); +}); + +appsRouter.patch('/:appName', checkToken, (req: Req<{ appName }, { name }>, res, next) => { + const { logger, params, body } = req; + const appName = _.trim(params.appName); + const newAppName = _.trim(body.name); + const uid = req.users.id; + logger.info('try rename app', { + uid, + appName, + newAppName, + }); + if (_.isEmpty(newAppName)) { + res.status(406).send('Please input name!'); + return; + } + accountManager + .ownerCan(uid, appName) + .then((col) => { + return appManager.findAppByName(uid, newAppName).then((appInfo) => { + if (!_.isEmpty(appInfo)) { + throw new AppError(`${newAppName} Exist!`); + } + return appManager.modifyApp(col.appid, { name: newAppName }); + }); + }) + .then(() => { + logger.info('rename app success', { + uid, + appName, + newAppName, + }); + + res.send(''); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('rename app failed', { + uid, + appName, + newAppName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); +}); + +appsRouter.post( + '/:appName/transfer/:email', + checkToken, + (req: Req<{ appName: string; email: string }>, res, next) => { + const { logger, params } = req; + const appName = _.trim(params.appName); + const email = _.trim(params.email); + const uid = req.users.id; + logger.info('try transfer app', { + uid, + appName, + to: email, + }); + if (!validator.isEmail(email)) { + res.status(406).send('Invalid Email!'); + return; + } + accountManager + .ownerCan(uid, appName) + .then((col) => { + return accountManager.findUserByEmail(email).then((data) => { + if (_.eq(data.id, uid)) { + throw new AppError("You can't transfer to yourself!"); + } + return appManager.transferApp(col.appid, uid, data.id); + }); + }) + .then((data) => { + logger.info('transfer app success', { + uid, + appName, + to: email, + }); + + res.send(data); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('transfer app failed', { + uid, + appName, + to: email, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); + +appsRouter.post( + '/', + checkToken, + // eslint-disable-next-line max-lines-per-function + ( + req: Req< + Record, + { + name: string; + os: string; + platform: string; + manuallyProvisionDeployments: unknown; + } + >, + res, + next, + ) => { + const { logger, body } = req; + const uid = req.users.id; + logger.info('try add app', { + uid, + body: JSON.stringify(body), + }); + const appName = body.name; + if (_.isEmpty(appName)) { + res.status(406).send('Please input name!'); + return; + } + const osName = _.toLower(body.os); + let os; + if (osName === _.toLower(IOS_NAME)) { + os = IOS; + } else if (osName === _.toLower(ANDROID_NAME)) { + os = ANDROID; + } else if (osName === _.toLower(WINDOWS_NAME)) { + os = WINDOWS; + } else { + res.status(406).send('Please input os [iOS|Android|Windows]!'); + return; + } + const platformName = _.toLower(body.platform); + let platform; + if (platformName === _.toLower(REACT_NATIVE_NAME)) { + platform = REACT_NATIVE; + } else if (platformName === _.toLower(CORDOVA_NAME)) { + platform = CORDOVA; + } else { + res.status(406).send('Please input platform [React-Native|Cordova]!'); + return; + } + logger.info('try add app params check pass', { + uid, + appName, + }); + + appManager + .findAppByName(uid, appName) + .then((appInfo) => { + if (!_.isEmpty(appInfo)) { + throw new AppError(`${appName} Exist!`); + } + return appManager.addApp(uid, appName, os, platform, req.users.identical); + }) + .then(() => { + logger.info('add app success', { + uid, + name: appName, + }); + + const data = { + name: appName, + collaborators: { [req.users.email]: { permission: 'Owner' } }, + }; + res.send({ app: data }); + }) + .catch((e) => { + if (e instanceof AppError) { + logger.info('add app failed', { + uid, + name: appName, + error: e.message, + }); + + res.status(406).send(e.message); + } else { + next(e); + } + }); + }, +); From 07f3736434c795d7b381cc2ee48827f250f1c803 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 21 Feb 2022 07:12:06 +0000 Subject: [PATCH 204/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.8.3 --- package-lock.json | 174 ++++++++++++++-------------------------------- package.json | 2 +- 2 files changed, 52 insertions(+), 124 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6c31bd2..3b93b240 100644 --- a/package-lock.json +++ b/package-lock.json @@ -647,17 +647,17 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.8.2.tgz", - "integrity": "sha512-kT1L82POt+domWH32/vcndS0h4W+mOas6b2L5aLsFzo1b4+OB04BocxvALs0Hrb9KFC4CVmCL9x06b5jZWjSiA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.8.3.tgz", + "integrity": "sha512-nM38gp2c82jrC0BmJ5G1flkN3va203G/XW3AjkLxVally2puy/4TrZx6DPiEjJh3Vtj3Bo+QFiKRCW3Ox6zdmA==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.11.0", - "@typescript-eslint/parser": "5.11.0", + "@typescript-eslint/eslint-plugin": "5.12.0", + "@typescript-eslint/parser": "5.12.0", "babel-eslint": "10.1.0", "eslint": "8.9.0", "eslint-config-airbnb-base": "15.0.0", - "eslint-config-prettier": "8.3.0", + "eslint-config-prettier": "8.4.0", "eslint-import-resolver-typescript": "2.5.0", "eslint-plugin-deprecation": "1.3.2", "eslint-plugin-import": "2.25.4", @@ -906,14 +906,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz", - "integrity": "sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.0.tgz", + "integrity": "sha512-fwCMkDimwHVeIOKeBHiZhRUfJXU8n6xW1FL9diDxAyGAFvKcH4csy0v7twivOQdQdA0KC8TDr7GGRd3L4Lv0rQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.11.0", - "@typescript-eslint/type-utils": "5.11.0", - "@typescript-eslint/utils": "5.11.0", + "@typescript-eslint/scope-manager": "5.12.0", + "@typescript-eslint/type-utils": "5.12.0", + "@typescript-eslint/utils": "5.12.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -946,89 +946,17 @@ "dev": true, "requires": { "@typescript-eslint/utils": "5.12.0" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.0.tgz", - "integrity": "sha512-GAMobtIJI8FGf1sLlUWNUm2IOkIjvn7laFWyRx7CLrv6nLBI7su+B7lbStqVlK5NdLvHRFiJo2HhiDF7Ki01WQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0" - } - }, - "@typescript-eslint/types": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.0.tgz", - "integrity": "sha512-JowqbwPf93nvf8fZn5XrPGFBdIK8+yx5UEGs2QFAYFI8IWYfrzz+6zqlurGr2ctShMaJxqwsqmra3WXWjH1nRQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.0.tgz", - "integrity": "sha512-Dd9gVeOqt38QHR0BEA8oRaT65WYqPYbIc5tRFQPkfLquVEFPD1HAtbZT98TLBkEcCkvwDYOAvuSvAD9DnQhMfQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.0.tgz", - "integrity": "sha512-k4J2WovnMPGI4PzKgDtQdNrCnmBHpMUFy21qjX2CoPdoBcSBIMvVBr9P2YDP8jOqZOeK3ThOL6VO/sy6jtnvzw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.0.tgz", - "integrity": "sha512-cFwTlgnMV6TgezQynx2c/4/tx9Tufbuo9LPzmWqyRC3QC4qTGkAG1C6pBr0/4I10PAI/FlYunI3vJjIcu+ZHMg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.12.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@typescript-eslint/parser": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.11.0.tgz", - "integrity": "sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.0.tgz", + "integrity": "sha512-MfSwg9JMBojMUoGjUmX+D2stoQj1CBYTCP0qnnVtu9A+YQXVKNtLjasYh+jozOcrb/wau8TCfWOkQTiOAruBog==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.11.0", - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/typescript-estree": "5.11.0", + "@typescript-eslint/scope-manager": "5.12.0", + "@typescript-eslint/types": "5.12.0", + "@typescript-eslint/typescript-estree": "5.12.0", "debug": "^4.3.2" }, "dependencies": { @@ -1050,22 +978,22 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz", - "integrity": "sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.0.tgz", + "integrity": "sha512-GAMobtIJI8FGf1sLlUWNUm2IOkIjvn7laFWyRx7CLrv6nLBI7su+B7lbStqVlK5NdLvHRFiJo2HhiDF7Ki01WQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/visitor-keys": "5.11.0" + "@typescript-eslint/types": "5.12.0", + "@typescript-eslint/visitor-keys": "5.12.0" } }, "@typescript-eslint/type-utils": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz", - "integrity": "sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.0.tgz", + "integrity": "sha512-9j9rli3zEBV+ae7rlbBOotJcI6zfc6SHFMdKI9M3Nc0sy458LJ79Os+TPWeBBL96J9/e36rdJOfCuyRSgFAA0Q==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.11.0", + "@typescript-eslint/utils": "5.12.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -1088,19 +1016,19 @@ } }, "@typescript-eslint/types": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz", - "integrity": "sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.0.tgz", + "integrity": "sha512-JowqbwPf93nvf8fZn5XrPGFBdIK8+yx5UEGs2QFAYFI8IWYfrzz+6zqlurGr2ctShMaJxqwsqmra3WXWjH1nRQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz", - "integrity": "sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.0.tgz", + "integrity": "sha512-Dd9gVeOqt38QHR0BEA8oRaT65WYqPYbIc5tRFQPkfLquVEFPD1HAtbZT98TLBkEcCkvwDYOAvuSvAD9DnQhMfQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/visitor-keys": "5.11.0", + "@typescript-eslint/types": "5.12.0", + "@typescript-eslint/visitor-keys": "5.12.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1126,26 +1054,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz", - "integrity": "sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.0.tgz", + "integrity": "sha512-k4J2WovnMPGI4PzKgDtQdNrCnmBHpMUFy21qjX2CoPdoBcSBIMvVBr9P2YDP8jOqZOeK3ThOL6VO/sy6jtnvzw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.11.0", - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/typescript-estree": "5.11.0", + "@typescript-eslint/scope-manager": "5.12.0", + "@typescript-eslint/types": "5.12.0", + "@typescript-eslint/typescript-estree": "5.12.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz", - "integrity": "sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.0.tgz", + "integrity": "sha512-cFwTlgnMV6TgezQynx2c/4/tx9Tufbuo9LPzmWqyRC3QC4qTGkAG1C6pBr0/4I10PAI/FlYunI3vJjIcu+ZHMg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/types": "5.12.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -2292,9 +2220,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.0.tgz", - "integrity": "sha512-VaJUunCZLnxuDbo1rNOzwbet9E1K9joiXS5+DQMPtgxd24wfsZbJZMMfQLGYMlCUvSxLfsRUUhoOR2x28mFfeg==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.1.tgz", + "integrity": "sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==", "dev": true }, "core-util-is": { @@ -2931,9 +2859,9 @@ } }, "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", + "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", "dev": true }, "eslint-import-resolver-node": { diff --git a/package.json b/package.json index eb48f0f2..d0fa5efa 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.8.2", + "@shm-open/eslint-config-bundle": "1.8.3", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From ea92c0e9233e5a148b0b04d203e51da92afa83ea Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 21 Feb 2022 15:39:29 +0800 Subject: [PATCH 205/347] refactor: pass logger to services to get the request context in service log --- src/core/services/account-manager.ts | 6 +- src/core/services/datacenter-manager.ts | 8 +- src/core/services/deployments-manager.ts | 4 +- src/core/services/package-manager.ts | 122 +++++++++++++++-------- src/routes/account.ts | 6 +- src/routes/apps.ts | 72 +++++++------ src/routes/index.ts | 23 ++++- src/routes/indexV1.ts | 23 ++++- 8 files changed, 166 insertions(+), 98 deletions(-) diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts index 650d7840..d20a3e4a 100644 --- a/src/core/services/account-manager.ts +++ b/src/core/services/account-manager.ts @@ -1,4 +1,4 @@ -import { logger } from 'kv-logger'; +import { Logger } from 'kv-logger'; import _ from 'lodash'; import moment from 'moment'; import validator from 'validator'; @@ -17,7 +17,7 @@ const expired = 1200; const expiredSpeed = 10; class AccountManager { - collaboratorCan(uid: number, appName: string) { + collaboratorCan(uid: number, appName: string, logger: Logger) { return this.getCollaborator(uid, appName).then((data) => { if (!data) { logger.debug(`collaboratorCan App ${appName} not exists.`); @@ -27,7 +27,7 @@ class AccountManager { }); } - ownerCan(uid: number, appName: string) { + ownerCan(uid: number, appName: string, logger: Logger) { return this.getCollaborator(uid, appName).then((data) => { if (!data) { logger.debug(`ownerCan App ${appName} not exists.`); diff --git a/src/core/services/datacenter-manager.ts b/src/core/services/datacenter-manager.ts index dbcc004f..92c55759 100644 --- a/src/core/services/datacenter-manager.ts +++ b/src/core/services/datacenter-manager.ts @@ -1,6 +1,6 @@ import fs from 'fs'; import path from 'path'; -import { logger } from 'kv-logger'; +import { Logger } from 'kv-logger'; import _ from 'lodash'; import { AppError } from '../app-error'; import { config } from '../config'; @@ -48,7 +48,7 @@ class DataCenterManager { }; } - validateStore(providePackageHash: string) { + validateStore(providePackageHash: string, logger: Logger) { const dataDir = this.getDataDir(); const packageHashPath = path.join(dataDir, providePackageHash); const manifestFile = path.join(packageHashPath, manifestFilename); @@ -79,14 +79,14 @@ class DataCenterManager { }); } - storePackage(sourceDst: string, force = false) { + storePackage(sourceDst: string, force: boolean, logger: Logger) { return calcAllFileSha256(sourceDst).then((manifestJson) => { const packageHash = packageHashSync(manifestJson); const dataDir = this.getDataDir(); const packageHashPath = path.join(dataDir, packageHash); const manifestFile = path.join(packageHashPath, manifestFilename); const contentPath = path.join(packageHashPath, contentsName); - return this.validateStore(packageHash).then((isValidate) => { + return this.validateStore(packageHash, logger).then((isValidate) => { if (!force && isValidate) { return this.buildPackageInfo( packageHash, diff --git a/src/core/services/deployments-manager.ts b/src/core/services/deployments-manager.ts index b41e2f4a..2ce91026 100644 --- a/src/core/services/deployments-manager.ts +++ b/src/core/services/deployments-manager.ts @@ -1,4 +1,4 @@ -import { logger } from 'kv-logger'; +import { Logger } from 'kv-logger'; import _ from 'lodash'; import moment from 'moment'; import { Deployments } from '../../models/deployments'; @@ -77,7 +77,7 @@ class DeploymentsManager { }); } - findDeloymentByName(deploymentName: string, appId: number) { + findDeloymentByName(deploymentName: string, appId: number, logger: Logger) { logger.debug('findDeloymentByName', { name: deploymentName, appId, diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index 44f0074d..3c8158fa 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -4,7 +4,7 @@ import os from 'os'; import path from 'path'; import { Request } from 'express'; import formidable from 'formidable'; -import { logger } from 'kv-logger'; +import { Logger } from 'kv-logger'; import _ from 'lodash'; import { Op } from 'sequelize'; import slash from 'slash'; @@ -52,7 +52,7 @@ class PackageManager { return Packages.findOne({ where: { deployment_id: deploymentId, label } }); } - findLatestPackageInfoByDeployVersion(deploymentsVersionsId) { + findLatestPackageInfoByDeployVersion(deploymentsVersionsId, logger: Logger) { return DeploymentsVersions.findByPk(deploymentsVersionsId).then((deploymentsVersions) => { if (!deploymentsVersions || deploymentsVersions.current_package_id < 0) { const e = new AppError('not found last packages'); @@ -63,7 +63,7 @@ class PackageManager { }); } - parseReqFile(req: Request) { + parseReqFile(req: Request, logger: Logger) { logger.debug('parseReqFile'); return new Promise<{ packageInfo: string; package: formidable.File }>((resolve, reject) => { const form = formidable(); @@ -88,7 +88,14 @@ class PackageManager { }); } - createDeploymentsVersionIfNotExist(deploymentId, appVersion, minVersion, maxVersion, t) { + createDeploymentsVersionIfNotExist( + deploymentId, + appVersion, + minVersion, + maxVersion, + t, + logger: Logger, + ) { return DeploymentsVersions.findOrCreate({ where: { deployment_id: deploymentId, @@ -109,7 +116,7 @@ class PackageManager { }); } - isMatchPackageHash(packageId, packageHash) { + isMatchPackageHash(packageId, packageHash, logger: Logger) { if (_.lt(packageId, 0)) { logger.debug(`isMatchPackageHash packageId is 0`); return Promise.resolve(false); @@ -132,6 +139,7 @@ class PackageManager { manifestHash: string, blobHash: string, params, + logger: Logger, ) { const releaseMethod = params.releaseMethod || RELEASE_METHOD_UPLOAD; const releaseUid = params.releaseUid || 0; @@ -150,6 +158,7 @@ class PackageManager { params.min_version, params.max_version, t, + logger, ).then((deploymentsVersions) => { return Packages.create( { @@ -190,8 +199,8 @@ class PackageManager { }); } - downloadPackageAndExtract(workDirectoryPath, packageHash, blobHash) { - return dataCenterManager.validateStore(packageHash).then((isValidate) => { + downloadPackageAndExtract(workDirectoryPath, packageHash, blobHash, logger: Logger) { + return dataCenterManager.validateStore(packageHash, logger).then((isValidate) => { if (isValidate) { return dataCenterManager.getPackageInfo(packageHash); } @@ -202,7 +211,7 @@ class PackageManager { path.join(workDirectoryPath, blobHash), path.join(workDirectoryPath, 'current'), ).then((outputPath) => { - return dataCenterManager.storePackage(outputPath, true); + return dataCenterManager.storePackage(outputPath, true, logger); }); }, ); @@ -240,6 +249,7 @@ class PackageManager { oldPackageDataCenter, diffPackageHash, diffManifestBlobHash, + logger: Logger, ) { return PackagesDiff.findOne({ where: { @@ -300,7 +310,12 @@ class PackageManager { }); } - createDiffPackagesByLastNums(appId, originalPackage: PackagesInterface, num: number) { + createDiffPackagesByLastNums( + appId, + originalPackage: PackagesInterface, + num: number, + logger: Logger, + ) { const packageId = originalPackage.id; return Promise.all([ Packages.findAll({ @@ -324,11 +339,11 @@ class PackageManager { return _.uniqBy(_.unionBy(lastNumsPackages, basePackages, 'id'), 'package_hash'); }) .then((lastNumsPackages) => { - return this.createDiffPackages(originalPackage, lastNumsPackages); + return this.createDiffPackages(originalPackage, lastNumsPackages, logger); }); } - createDiffPackages(originalPackage, destPackages) { + createDiffPackages(originalPackage, destPackages, logger: Logger) { if (!_.isArray(destPackages)) { return Promise.reject(new AppError('第二个参数必须是数组')); } @@ -341,7 +356,9 @@ class PackageManager { const workDirectoryPath = path.join(os.tmpdir(), `codepush_${randToken(32)}`); logger.debug('createDiffPackages using dir', { workDirectoryPath }); return createEmptyFolder(workDirectoryPath) - .then(() => this.downloadPackageAndExtract(workDirectoryPath, packageHash, blobUrl)) + .then(() => + this.downloadPackageAndExtract(workDirectoryPath, packageHash, blobUrl, logger), + ) .then((originDataCenter) => Promise.all( destPackages.map((v) => { @@ -354,6 +371,7 @@ class PackageManager { diffWorkDirectoryPath, _.get(v, 'package_hash'), _.get(v, 'blob_url'), + logger, ).then((oldPackageDataCenter) => this.generateOneDiffPackage( diffWorkDirectoryPath, @@ -362,6 +380,7 @@ class PackageManager { oldPackageDataCenter, v.package_hash, v.manifest_blob_url, + logger, ), ); }), @@ -371,7 +390,14 @@ class PackageManager { } // eslint-disable-next-line max-lines-per-function - releasePackage(appId, deploymentId, packageInfo, filePath: string, releaseUid) { + releasePackage( + appId, + deploymentId, + packageInfo, + filePath: string, + releaseUid: number, + logger: Logger, + ) { const { appVersion } = packageInfo; const versionInfo = validatorVersion(appVersion); if (!versionInfo[0]) { @@ -411,38 +437,41 @@ class PackageManager { }); }) .then((blobHash) => { - return dataCenterManager.storePackage(directoryPath).then((dataCenter) => { - const { packageHash } = dataCenter; - const manifestFile = dataCenter.manifestFilePath; - return DeploymentsVersions.findOne({ - where: { deployment_id: deploymentId, app_version: appVersion }, - }) - .then((deploymentsVersions) => { - if (!deploymentsVersions) { - return false; - } - return this.isMatchPackageHash( - deploymentsVersions.get('current_package_id'), - packageHash, - ); + return dataCenterManager + .storePackage(directoryPath, false, logger) + .then((dataCenter) => { + const { packageHash } = dataCenter; + const manifestFile = dataCenter.manifestFilePath; + return DeploymentsVersions.findOne({ + where: { deployment_id: deploymentId, app_version: appVersion }, }) - .then((isExist) => { - if (isExist) { - const e = new AppError( - "The uploaded package is identical to the contents of the specified deployment's current release.", + .then((deploymentsVersions) => { + if (!deploymentsVersions) { + return false; + } + return this.isMatchPackageHash( + deploymentsVersions.get('current_package_id'), + packageHash, + logger, ); - logger.debug(e.message); - throw e; - } - return qetag(manifestFile); - }) - .then((manifestHash) => { - return Promise.all([ - uploadFileToStorage(manifestHash, manifestFile), - uploadFileToStorage(blobHash, filePath), - ]).then(() => [packageHash, manifestHash, blobHash]); - }); - }); + }) + .then((isExist) => { + if (isExist) { + const e = new AppError( + "The uploaded package is identical to the contents of the specified deployment's current release.", + ); + logger.debug(e.message); + throw e; + } + return qetag(manifestFile); + }) + .then((manifestHash) => { + return Promise.all([ + uploadFileToStorage(manifestHash, manifestFile), + uploadFileToStorage(blobHash, filePath), + ]).then(() => [packageHash, manifestHash, blobHash]); + }); + }); }) .then(([packageHash, manifestHash, blobHash]) => { const stats = fs.statSync(filePath); @@ -464,6 +493,7 @@ class PackageManager { manifestHash, blobHash, params, + logger, ); }) .finally(() => deleteFolderSync(directoryPathParent)); @@ -534,7 +564,7 @@ class PackageManager { } // eslint-disable-next-line max-lines-per-function - promotePackage(sourceDeploymentInfo, destDeploymentInfo, params) { + promotePackage(sourceDeploymentInfo, destDeploymentInfo, params, logger: Logger) { const appVersion = _.get(params, 'appVersion', null); const label = _.get(params, 'label', null); return new Promise((resolve, reject) => { @@ -604,6 +634,7 @@ class PackageManager { return this.isMatchPackageHash( destDeploymentsVersions.get('current_package_id'), sourcePack.package_hash, + logger, ); }) .then((isExist) => { @@ -654,6 +685,7 @@ class PackageManager { sourcePack.manifest_blob_url, sourcePack.blob_url, createParams, + logger, ); }); } @@ -662,6 +694,7 @@ class PackageManager { deploymentVersionId: number, targetLabel: string | undefined, rollbackUid: number, + logger: Logger, ) { return DeploymentsVersions.findByPk(deploymentVersionId).then((deploymentsVersions) => { if (!deploymentsVersions) { @@ -720,6 +753,7 @@ class PackageManager { rollbackPackage.manifest_blob_url, rollbackPackage.blob_url, params, + logger, ); }); }); diff --git a/src/routes/account.ts b/src/routes/account.ts index ab896f4b..a5bc689e 100644 --- a/src/routes/account.ts +++ b/src/routes/account.ts @@ -5,11 +5,11 @@ export const accountRouter = express.Router(); accountRouter.get('/', checkToken, (req: Req, res) => { const { logger } = req; - const userInfo = { + const account = { email: req.users.email, linkedProviders: [], name: req.users.username, }; - logger.info('check account info', userInfo); - res.send({ account: userInfo }); + logger.info('check account info', { account }); + res.send({ account }); }); diff --git a/src/routes/apps.ts b/src/routes/apps.ts index 935e1bba..3c022f2d 100644 --- a/src/routes/apps.ts +++ b/src/routes/apps.ts @@ -64,7 +64,7 @@ appsRouter.get('/:appName/deployments', checkToken, (req: Req<{ appName: string appName, }); accountManager - .collaboratorCan(uid, appName) + .collaboratorCan(uid, appName, logger) .then((col) => { return deploymentsManager.listDeloyments(col.appid); }) @@ -103,9 +103,9 @@ appsRouter.get( deploymentName, }); accountManager - .collaboratorCan(uid, appName) + .collaboratorCan(uid, appName, logger) .then((col) => { - return deploymentsManager.findDeloymentByName(deploymentName, col.appid); + return deploymentsManager.findDeloymentByName(deploymentName, col.appid, logger); }) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { @@ -152,7 +152,7 @@ appsRouter.post( deploymentName: name, }); accountManager - .ownerCan(uid, appName) + .ownerCan(uid, appName, logger) .then((col) => { return deploymentsManager.addDeloyment(name, col.appid, uid); }) @@ -195,10 +195,10 @@ appsRouter.get( deploymentName, }); accountManager - .collaboratorCan(uid, appName) + .collaboratorCan(uid, appName, logger) .then((col) => { return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) + .findDeloymentByName(deploymentName, col.appid, logger) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { throw new AppError('does not find the deployment'); @@ -282,10 +282,10 @@ appsRouter.get( deploymentName, }); accountManager - .collaboratorCan(uid, appName) + .collaboratorCan(uid, appName, logger) .then((col) => { return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) + .findDeloymentByName(deploymentName, col.appid, logger) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { throw new AppError('does not find the deployment'); @@ -336,10 +336,10 @@ appsRouter.delete( deploymentName, }); accountManager - .ownerCan(uid, appName) + .ownerCan(uid, appName, logger) .then((col) => { return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) + .findDeloymentByName(deploymentName, col.appid, logger) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { throw new AppError('does not find the deployment'); @@ -392,7 +392,7 @@ appsRouter.patch( newName: name, }); accountManager - .ownerCan(uid, appName) + .ownerCan(uid, appName, logger) .then((col) => { return deploymentsManager.renameDeloymentByName(deploymentName, col.appid, name); }) @@ -438,7 +438,7 @@ appsRouter.delete( deploymentName, }); accountManager - .ownerCan(uid, appName) + .ownerCan(uid, appName, logger) .then((col) => { return deploymentsManager.deleteDeloymentByName(deploymentName, col.appid); }) @@ -483,7 +483,7 @@ appsRouter.post( deploymentName, }); accountManager - .collaboratorCan(uid, appName) + .collaboratorCan(uid, appName, logger) .then((col) => { logger.info('release user check ok', { uid, @@ -492,7 +492,7 @@ appsRouter.post( }); return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) + .findDeloymentByName(deploymentName, col.appid, logger) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { throw new AppError('does not find the deployment'); @@ -504,7 +504,7 @@ appsRouter.post( }); return packageManager - .parseReqFile(req) + .parseReqFile(req, logger) .then((data) => { if (data.package.mimetype !== 'application/zip') { throw new AppError( @@ -524,6 +524,7 @@ appsRouter.post( data.packageInfo, data.package.filepath, uid, + logger, ) .finally(() => { deleteFolderSync(data.package.filepath); @@ -537,6 +538,7 @@ appsRouter.post( deploymentInfo.appid, packages, config.common.diffNums, + logger, ) .catch((e) => { logger.error(e); @@ -605,10 +607,10 @@ appsRouter.patch( body: JSON.stringify(body), }); accountManager - .collaboratorCan(uid, appName) + .collaboratorCan(uid, appName, logger) .then((col) => { return deploymentsManager - .findDeloymentByName(deploymentName, col.appid) + .findDeloymentByName(deploymentName, col.appid, logger) .then((deploymentInfo) => { if (_.isEmpty(deploymentInfo)) { throw new AppError('does not find the deployment'); @@ -623,7 +625,7 @@ appsRouter.patch( } const deploymentVersionId = deploymentInfo.last_deployment_version_id; return packageManager - .findLatestPackageInfoByDeployVersion(deploymentVersionId) + .findLatestPackageInfoByDeployVersion(deploymentVersionId, logger) .then((data) => { return [deploymentInfo, data] as const; }); @@ -702,12 +704,12 @@ appsRouter.post( body: JSON.stringify(body), }); accountManager - .collaboratorCan(uid, appName) + .collaboratorCan(uid, appName, logger) .then((col) => { const appId = col.appid; return Promise.all([ - deploymentsManager.findDeloymentByName(sourceDeploymentName, appId), - deploymentsManager.findDeloymentByName(destDeploymentName, appId), + deploymentsManager.findDeloymentByName(sourceDeploymentName, appId, logger), + deploymentsManager.findDeloymentByName(destDeploymentName, appId, logger), ]) .then(([sourceDeploymentInfo, destDeploymentInfo]) => { if (!sourceDeploymentInfo) { @@ -723,7 +725,12 @@ appsRouter.post( // TODO: define packageInfo interface in packageManager _.set(promoteParams as any, 'promoteUid', uid); return packageManager - .promotePackage(sourceDeploymentInfo, destDeploymentInfo, promoteParams) + .promotePackage( + sourceDeploymentInfo, + destDeploymentInfo, + promoteParams, + logger, + ) .then((packages) => { return [packages, destDeploymentInfo] as const; }); @@ -736,6 +743,7 @@ appsRouter.post( destDeploymentInfo.appid, packages, config.common.diffNums, + logger, ) .catch((e) => { logger.error(e); @@ -802,18 +810,18 @@ function rollbackCb( targetLabel, }); accountManager - .collaboratorCan(uid, appName) + .collaboratorCan(uid, appName, logger) .then((col) => { - return deploymentsManager.findDeloymentByName(deploymentName, col.appid); + return deploymentsManager.findDeloymentByName(deploymentName, col.appid, logger); }) .then((dep) => { return packageManager - .rollbackPackage(dep.last_deployment_version_id, targetLabel, uid) + .rollbackPackage(dep.last_deployment_version_id, targetLabel, uid, logger) .then((packageInfo: PackagesInterface) => { if (packageInfo) { delay(1000).then(() => { packageManager - .createDiffPackagesByLastNums(dep.appid, packageInfo, 1) + .createDiffPackagesByLastNums(dep.appid, packageInfo, 1, logger) .catch((e) => { logger.error(e); }); @@ -878,7 +886,7 @@ appsRouter.get( appName, }); accountManager - .collaboratorCan(uid, appName) + .collaboratorCan(uid, appName, logger) .then((col) => { return collaboratorsManager.listCollaborators(col.appid); }) @@ -942,7 +950,7 @@ appsRouter.post( return; } accountManager - .ownerCan(uid, appName) + .ownerCan(uid, appName, logger) .then((col) => { return accountManager.findUserByEmail(email).then((data) => { return collaboratorsManager.addCollaborator(col.appid, data.id); @@ -993,7 +1001,7 @@ appsRouter.delete( return; } accountManager - .ownerCan(uid, appName) + .ownerCan(uid, appName, logger) .then((col) => { return accountManager.findUserByEmail(email).then((data) => { if (_.eq(data.id, uid)) { @@ -1039,7 +1047,7 @@ appsRouter.delete('/:appName', checkToken, (req: Req<{ appName: string }>, res, }); accountManager - .ownerCan(uid, appName) + .ownerCan(uid, appName, logger) .then((col) => { return appManager.deleteApp(col.appid); }) @@ -1081,7 +1089,7 @@ appsRouter.patch('/:appName', checkToken, (req: Req<{ appName }, { name }>, res, return; } accountManager - .ownerCan(uid, appName) + .ownerCan(uid, appName, logger) .then((col) => { return appManager.findAppByName(uid, newAppName).then((appInfo) => { if (!_.isEmpty(appInfo)) { @@ -1133,7 +1141,7 @@ appsRouter.post( return; } accountManager - .ownerCan(uid, appName) + .ownerCan(uid, appName, logger) .then((col) => { return accountManager.findUserByEmail(email).then((data) => { if (_.eq(data.id, uid)) { diff --git a/src/routes/index.ts b/src/routes/index.ts index 5215d24c..cf5a35f2 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -31,7 +31,7 @@ indexRouter.get( next, ) => { const { logger, query } = req; - logger.debug('/updateCheck', { + logger.info('updateCheck', { query: JSON.stringify(query), }); const { deploymentKey, appVersion, label, packageHash, clientUniqueId } = query; @@ -58,6 +58,8 @@ indexRouter.get( }); }) .then((rs) => { + logger.info('updateCheck success'); + // eslint-disable-next-line no-param-reassign delete rs.packageId; // eslint-disable-next-line no-param-reassign @@ -66,6 +68,9 @@ indexRouter.get( }) .catch((e) => { if (e instanceof AppError) { + logger.info('updateCheck failed', { + error: e.message, + }); res.status(404).send(e.message); } else { next(e); @@ -89,12 +94,16 @@ indexRouter.post( res, ) => { const { logger, body } = req; - logger.debug('/reportStatus/download', { + logger.info('reportStatus/download', { body: JSON.stringify(body), }); const { clientUniqueId, label, deploymentKey } = body; clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { - if (!(err instanceof AppError)) { + if (err instanceof AppError) { + logger.info('reportStatus/deploy failed', { + error: err.message, + }); + } else { logger.error(err); } }); @@ -117,14 +126,18 @@ indexRouter.post( res, ) => { const { logger, body } = req; - logger.debug('/reportStatus/deploy', { + logger.info('reportStatus/deploy', { body: JSON.stringify(body), }); const { clientUniqueId, label, deploymentKey } = body; clientManager .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) .catch((err) => { - if (!(err instanceof AppError)) { + if (err instanceof AppError) { + logger.info('reportStatus/deploy failed', { + error: err.message, + }); + } else { logger.error(err); } }); diff --git a/src/routes/indexV1.ts b/src/routes/indexV1.ts index 4fa7b689..42b5a1ee 100644 --- a/src/routes/indexV1.ts +++ b/src/routes/indexV1.ts @@ -25,7 +25,7 @@ indexV1Router.get( next, ) => { const { logger, query } = req; - logger.debug('/update_check', { + logger.info('try update_check', { query: JSON.stringify(query), }); const { @@ -58,6 +58,8 @@ indexV1Router.get( }); }) .then((rs) => { + logger.info('update_check success'); + res.send({ update_info: { download_url: rs.downloadUrl, @@ -78,6 +80,9 @@ indexV1Router.get( }) .catch((e) => { if (e instanceof AppError) { + logger.info('update check failed', { + error: e.message, + }); res.status(404).send(e.message); } else { next(e); @@ -101,10 +106,14 @@ indexV1Router.post( res, ) => { const { logger, body } = req; - logger.debug('/report_status/download', { body: JSON.stringify(body) }); + logger.info('report_status/download', { body: JSON.stringify(body) }); const { client_unique_id: clientUniqueId, label, deployment_key: deploymentKey } = body; clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId).catch((err) => { - if (!(err instanceof AppError)) { + if (err instanceof AppError) { + logger.info('report_status/download failed', { + error: err.message, + }); + } else { logger.error(err); } }); @@ -127,12 +136,16 @@ indexV1Router.post( res, ) => { const { logger, body } = req; - logger.debug('/report_status/deploy', { body: JSON.stringify(body) }); + logger.info('report_status/deploy', { body: JSON.stringify(body) }); const { client_unique_id: clientUniqueId, label, deployment_key: deploymentKey } = body; clientManager .reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body) .catch((err) => { - if (!(err instanceof AppError)) { + if (err instanceof AppError) { + logger.info('report_status/deploy failed', { + error: err.message, + }); + } else { logger.error(err); } }); From 3fe6384976c2bcec33b415e0a3a4e3e359729274 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 21 Feb 2022 15:43:07 +0800 Subject: [PATCH 206/347] chore(release): 2.0.1 --- CHANGELOG.md | 14 ++++++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1d254cc..69d0813f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.0.1](https://github.com/shm-open/code-push-server/compare/v2.0.0...v2.0.1) (2022-02-21) + + +### Bug Fixes + +* **deps:** update dependency aws-sdk to v2.1077.0 ([fd22283](https://github.com/shm-open/code-push-server/commit/fd22283882e2462423bc25efa27c6b707957b41e)) +* **deps:** update dependency body-parser to v1.19.2 ([19d8acd](https://github.com/shm-open/code-push-server/commit/19d8acd994538cb683dc319e0f0aa164c75a882f)) +* **deps:** update dependency express to v4.17.3 ([915fd25](https://github.com/shm-open/code-push-server/commit/915fd25fedff2246d93c051bc7a56db52cbd61b7)) +* **deps:** update dependency kv-logger to v0.5.3 ([e7d2e0f](https://github.com/shm-open/code-push-server/commit/e7d2e0f28e1989227582505397139e0db617424d)) +* **deps:** update dependency sequelize to v6.16.2 ([ceb3e3e](https://github.com/shm-open/code-push-server/commit/ceb3e3ebac22983805d5dfa992c27c03f3da2f1f)) +* **deps:** update kv-logger to 0.5.1 ([6289835](https://github.com/shm-open/code-push-server/commit/6289835990e1ae964378fc28d2037d1ce752107a)) +* **deps:** update kv-logger to 0.5.2 and fix build issue ([cae80fe](https://github.com/shm-open/code-push-server/commit/cae80fe5ba00c920b79df3422fb8c86424a6dc07)) +* put x-request-id to res header ([e9c13a5](https://github.com/shm-open/code-push-server/commit/e9c13a5ea6cb48e8338cb3314312fce51587b631)) + ## [2.0.0](https://github.com/shm-open/code-push-server/compare/v1.2.0...v2.0.0) (2022-02-10) diff --git a/package-lock.json b/package-lock.json index aceef8b9..a722fa4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "2.0.0", + "version": "2.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 324e906c..af54b4da 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "2.0.0", + "version": "2.0.1", "license": "MIT", "repository": { "type": "git", From 85a09fad62bd21808461debba7140e1732851622 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 21 Feb 2022 15:53:13 +0800 Subject: [PATCH 207/347] fix: log stringified account info --- src/routes/account.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/account.ts b/src/routes/account.ts index a5bc689e..5b7d5274 100644 --- a/src/routes/account.ts +++ b/src/routes/account.ts @@ -10,6 +10,6 @@ accountRouter.get('/', checkToken, (req: Req, res) => { linkedProviders: [], name: req.users.username, }; - logger.info('check account info', { account }); + logger.info('check account info', { account: JSON.stringify(account) }); res.send({ account }); }); From 935f7843deae0a3fb730b511547050c2db4a34f0 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 21 Feb 2022 16:13:33 +0800 Subject: [PATCH 208/347] refactor: pass logger to utils/common,qetag,storage --- src/core/config.ts | 7 ++++- src/core/services/package-manager.ts | 38 +++++++++++++++------------- src/core/utils/common.ts | 16 +++++------- src/core/utils/qetag.ts | 4 +-- src/core/utils/storage.ts | 26 +++++++++---------- 5 files changed, 48 insertions(+), 43 deletions(-) diff --git a/src/core/config.ts b/src/core/config.ts index 9ffdf088..dacae058 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -105,7 +105,12 @@ export const config = { // data dir for caclulate diff files. it's optimization. dataDir: process.env.DATA_DIR || os.tmpdir(), // storageType which is your binary package files store. options value is ("local" | "qiniu" | "s3"| "oss" || "tencentcloud") - storageType: process.env.STORAGE_TYPE || 'local', + storageType: (process.env.STORAGE_TYPE || 'local') as + | 'local' + | 'qiniu' + | 's3' + | 'oss' + | 'tencentcloud', // options value is (true | false), when it's true, it will cache updateCheck results in redis. updateCheckCache: toBool(process.env.UPDATE_CHECK_CACHE), // options value is (true | false), when it's true, it will cache rollout results in redis diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index 3c8158fa..bb6e2445 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -205,16 +205,19 @@ class PackageManager { return dataCenterManager.getPackageInfo(packageHash); } const downloadURL = getBlobDownloadUrl(blobHash); - return createFileFromRequest(downloadURL, path.join(workDirectoryPath, blobHash)).then( - () => { - return unzipFile( - path.join(workDirectoryPath, blobHash), - path.join(workDirectoryPath, 'current'), - ).then((outputPath) => { - return dataCenterManager.storePackage(outputPath, true, logger); - }); - }, - ); + return createFileFromRequest( + downloadURL, + path.join(workDirectoryPath, blobHash), + logger, + ).then(() => { + return unzipFile( + path.join(workDirectoryPath, blobHash), + path.join(workDirectoryPath, 'current'), + logger, + ).then((outputPath) => { + return dataCenterManager.storePackage(outputPath, true, logger); + }); + }); }); } @@ -269,6 +272,7 @@ class PackageManager { return createFileFromRequest( downloadURL, path.join(workDirectoryPath, diffManifestBlobHash), + logger, ).then(() => { const dataCenterContentPath = path.join(workDirectoryPath, 'dataCenter'); copySync(originDataCenter.contentPath, dataCenterContentPath); @@ -294,8 +298,8 @@ class PackageManager { dataCenterContentPath, hotCodePushFile, ).then((data) => { - return qetag(data.path).then((diffHash) => { - return uploadFileToStorage(diffHash, fileName).then(() => { + return qetag(data.path, logger).then((diffHash) => { + return uploadFileToStorage(diffHash, fileName, logger).then(() => { const stats = fs.statSync(fileName); return PackagesDiff.create({ package_id: packageId, @@ -413,9 +417,9 @@ class PackageManager { const directoryPath = path.join(directoryPathParent, 'current'); logger.debug(`releasePackage generate an random dir path: ${directoryPath}`); return Promise.all([ - qetag(filePath), + qetag(filePath, logger), createEmptyFolder(directoryPath).then(() => { - return unzipFile(filePath, directoryPath); + return unzipFile(filePath, directoryPath, logger); }), ]) .then(([blobHash]) => { @@ -463,12 +467,12 @@ class PackageManager { logger.debug(e.message); throw e; } - return qetag(manifestFile); + return qetag(manifestFile, logger); }) .then((manifestHash) => { return Promise.all([ - uploadFileToStorage(manifestHash, manifestFile), - uploadFileToStorage(blobHash, filePath), + uploadFileToStorage(manifestHash, manifestFile, logger), + uploadFileToStorage(blobHash, filePath, logger), ]).then(() => [packageHash, manifestHash, blobHash]); }); }); diff --git a/src/core/utils/common.ts b/src/core/utils/common.ts index cbac25ce..3dd73200 100644 --- a/src/core/utils/common.ts +++ b/src/core/utils/common.ts @@ -4,7 +4,7 @@ import { pipeline } from 'stream'; import util from 'util'; import extract from 'extract-zip'; import fsextra from 'fs-extra'; -import { logger } from 'kv-logger'; +import { Logger } from 'kv-logger'; import _ from 'lodash'; import fetch from 'node-fetch'; import validator from 'validator'; @@ -87,7 +87,7 @@ export function validatorVersion(versionNo: string) { return [flag, min, max]; } -export async function createFileFromRequest(url, filePath) { +export async function createFileFromRequest(url: string, filePath: string, logger: Logger) { try { await fs.promises.stat(filePath); return; @@ -135,13 +135,12 @@ export function createEmptyFolderSync(folderPath: string) { fsextra.mkdirsSync(folderPath); } -export async function unzipFile(zipFile: string, outputPath: string) { +export async function unzipFile(zipFile: string, outputPath: string, logger: Logger) { try { logger.debug(`unzipFile check zipFile ${zipFile} fs.R_OK`); fs.accessSync(zipFile, fs.constants.R_OK); logger.debug(`Pass unzipFile file ${zipFile}`); } catch (err) { - logger.error(err); throw new AppError(err.message); } @@ -149,7 +148,6 @@ export async function unzipFile(zipFile: string, outputPath: string) { await extract(zipFile, { dir: outputPath }); logger.debug(`unzipFile success`); } catch (err) { - logger.error(err); throw new AppError(`it's not a zipFile`); } return outputPath; @@ -157,15 +155,13 @@ export async function unzipFile(zipFile: string, outputPath: string) { export function getBlobDownloadUrl(blobUrl: string): string { let fileName = blobUrl; - const storageType = _.get(config, 'common.storageType'); - const downloadUrl = _.get(config, `${storageType}.downloadUrl`); + const { storageType } = config.common; + const { downloadUrl } = config[storageType]; if (storageType === 'local') { fileName = `${blobUrl.substring(0, 2).toLowerCase()}/${blobUrl}`; } if (!validator.isURL(downloadUrl)) { - const e = new AppError(`Please config ${storageType}.downloadUrl in config.js`); - logger.error(e); - throw e; + throw new AppError(`Please config ${storageType}.downloadUrl in config.js`); } return `${downloadUrl}/${fileName}`; } diff --git a/src/core/utils/qetag.ts b/src/core/utils/qetag.ts index dc25ecbc..12ef0990 100644 --- a/src/core/utils/qetag.ts +++ b/src/core/utils/qetag.ts @@ -2,7 +2,7 @@ import { Buffer } from 'buffer'; import crypto from 'crypto'; import fs from 'fs'; import { Stream, Readable } from 'stream'; -import { logger } from 'kv-logger'; +import { Logger } from 'kv-logger'; import { AppError } from '../app-error'; // 计算文件的eTag,参数为buffer或者readableStream或者文件路径 @@ -87,7 +87,7 @@ function getEtag(buffer: string | Stream | Buffer, callback: (etag: string) => v } // TODO: support only files (string)? -export function qetag(buffer: string | Stream | Buffer): Promise { +export function qetag(buffer: string | Stream | Buffer, logger: Logger): Promise { if (typeof buffer === 'string') { // it's a file try { diff --git a/src/core/utils/storage.ts b/src/core/utils/storage.ts index 93dff88f..1ce45c64 100644 --- a/src/core/utils/storage.ts +++ b/src/core/utils/storage.ts @@ -5,14 +5,14 @@ import ALY from 'aliyun-sdk'; import AWS from 'aws-sdk'; import COS from 'cos-nodejs-sdk-v5'; import fsextra from 'fs-extra'; -import { logger } from 'kv-logger'; +import { Logger } from 'kv-logger'; import _ from 'lodash'; import qiniu from 'qiniu'; import { AppError } from '../app-error'; import { config } from '../config'; -function uploadFileToLocal(key: string, filePath: string): Promise { +function uploadFileToLocal(key: string, filePath: string, logger: Logger): Promise { return new Promise((resolve, reject) => { logger.info(`try uploadFileToLocal`, { key, @@ -76,7 +76,7 @@ function uploadFileToLocal(key: string, filePath: string): Promise { }); } -function uploadFileToS3(key: string, filePath: string): Promise { +function uploadFileToS3(key: string, filePath: string, logger: Logger): Promise { return new Promise((resolve, reject) => { logger.info('try uploadFileToS3', { key }); AWS.config.update({ @@ -111,7 +111,7 @@ function uploadFileToS3(key: string, filePath: string): Promise { }); } -function uploadFileToOSS(key: string, filePath: string): Promise { +function uploadFileToOSS(key: string, filePath: string, logger: Logger): Promise { logger.info('try uploadFileToOSS', { key }); const ossStream = ALYOSSStream( new ALY.OSS({ @@ -151,7 +151,7 @@ function getUploadTokenQiniu(mac: qiniu.auth.digest.Mac, bucket: string, key: st return putPolicy.uploadToken(mac); } -function uploadFileToQiniu(key: string, filePath: string): Promise { +function uploadFileToQiniu(key: string, filePath: string, logger: Logger): Promise { return new Promise((resolve, reject) => { logger.info('try uploadFileToQiniu', { key }); const accessKey = _.get(config, 'qiniu.accessKey'); @@ -202,7 +202,7 @@ function uploadFileToQiniu(key: string, filePath: string): Promise { }); } -function uploadFileToTencentCloud(key: string, filePath: string): Promise { +function uploadFileToTencentCloud(key: string, filePath: string, logger: Logger): Promise { return new Promise((resolve, reject) => { logger.info('try uploadFileToTencentCloud', { key }); const cosIn = new COS({ @@ -228,19 +228,19 @@ function uploadFileToTencentCloud(key: string, filePath: string): Promise }); } -export function uploadFileToStorage(key: string, filePath: string): Promise { - const storageType = _.get(config, 'common.storageType'); +export function uploadFileToStorage(key: string, filePath: string, logger: Logger): Promise { + const { storageType } = config.common; switch (storageType) { case 'local': - return uploadFileToLocal(key, filePath); + return uploadFileToLocal(key, filePath, logger); case 's3': - return uploadFileToS3(key, filePath); + return uploadFileToS3(key, filePath, logger); case 'oss': - return uploadFileToOSS(key, filePath); + return uploadFileToOSS(key, filePath, logger); case 'qiniu': - return uploadFileToQiniu(key, filePath); + return uploadFileToQiniu(key, filePath, logger); case 'tencentcloud': - return uploadFileToTencentCloud(key, filePath); + return uploadFileToTencentCloud(key, filePath, logger); default: throw new AppError(`${storageType} storageType does not support.`); } From 96ad8337e524b855d023996dc40a8976b3b46829 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 21 Feb 2022 16:14:38 +0800 Subject: [PATCH 209/347] chore(release): 2.0.2 --- CHANGELOG.md | 7 +++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69d0813f..91ecd04c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.0.2](https://github.com/shm-open/code-push-server/compare/v2.0.1...v2.0.2) (2022-02-21) + + +### Bug Fixes + +* log stringified account info ([85a09fa](https://github.com/shm-open/code-push-server/commit/85a09fad62bd21808461debba7140e1732851622)) + ### [2.0.1](https://github.com/shm-open/code-push-server/compare/v2.0.0...v2.0.1) (2022-02-21) diff --git a/package-lock.json b/package-lock.json index a722fa4f..78850cda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "2.0.1", + "version": "2.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index af54b4da..ddee8faa 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "2.0.1", + "version": "2.0.2", "license": "MIT", "repository": { "type": "git", From 12a60af9def97636b4d483078158cefeea31a8d7 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Mon, 21 Feb 2022 16:21:29 +0800 Subject: [PATCH 210/347] refactor: update eslint config and fix issues --- .eslintrc.js | 4 ---- src/core/utils/common.ts | 6 +----- src/models/deployments.ts | 3 +-- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 17f297ae..3a88dc6c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,10 +1,6 @@ module.exports = { extends: ['@shm-open/eslint-config-bundle'], rules: { - // temp disables - will be removed once we have all js files converted to ts - '@typescript-eslint/no-var-requires': 'off', - 'import/no-unused-modules': 'off', - '@typescript-eslint/naming-convention': [ 'error', { diff --git a/src/core/utils/common.ts b/src/core/utils/common.ts index 3dd73200..a24b4f27 100644 --- a/src/core/utils/common.ts +++ b/src/core/utils/common.ts @@ -113,11 +113,7 @@ export function copy(sourceDst: string, targertDst: string) { return fsextra.copy(sourceDst, targertDst, { overwrite: true }); } -export function move(sourceDst: string, targertDst: string) { - return fsextra.move(sourceDst, targertDst, { overwrite: true }); -} - -export function deleteFolder(folderPath: string) { +function deleteFolder(folderPath: string) { return fsextra.remove(folderPath); } diff --git a/src/models/deployments.ts b/src/models/deployments.ts index 75812ce4..71167004 100644 --- a/src/models/deployments.ts +++ b/src/models/deployments.ts @@ -1,9 +1,8 @@ import _ from 'lodash'; import { DataTypes, Model } from 'sequelize'; +import { AppError } from '../core/app-error'; import { sequelize } from '../core/utils/connections'; -const { AppError } = require('../core/app-error'); - interface DeploymentsInterface extends Model { id: number; appid: number; From 23e984a7662a7cc365d3402cba1ee809d4602298 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Feb 2022 03:27:05 +0000 Subject: [PATCH 211/347] fix(deps): update dependency redis to v4.0.4 --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78850cda..cf07594c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -536,9 +536,9 @@ "integrity": "sha512-mXEBvEIgF4tUzdIN89LiYsbi6//EdpFA7L8M+DHCvePXg+bfHWi+ct5VI6nHUFQE5+ohm/9wmgihCH3HSkeKsw==" }, "@node-redis/client": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@node-redis/client/-/client-1.0.3.tgz", - "integrity": "sha512-IXNgOG99PHGL3NxN3/e8J8MuX+H08I+OMNmheGmZBXngE0IntaCQwwrd7NzmiHA+zH3SKHiJ+6k3P7t7XYknMw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@node-redis/client/-/client-1.0.4.tgz", + "integrity": "sha512-IM/NRAqg7MvNC3bIRQipXGrEarunrdgvrbAzsd3ty93LSHi/M+ybQulOERQi8a3M+P5BL8HenwXjiIoKm6ml2g==", "requires": { "cluster-key-slot": "1.1.0", "generic-pool": "3.8.2", @@ -557,14 +557,14 @@ "integrity": "sha512-qVRgn8WfG46QQ08CghSbY4VhHFgaTY71WjpwRBGEuqGPfWwfRcIf3OqSpR7Q/45X+v3xd8mvYjywqh0wqJ8T+g==" }, "@node-redis/search": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@node-redis/search/-/search-1.0.2.tgz", - "integrity": "sha512-gWhEeji+kTAvzZeguUNJdMSZNH2c5dv3Bci8Nn2f7VGuf6IvvwuZDSBOuOlirLVgayVuWzAG7EhwaZWK1VDnWQ==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@node-redis/search/-/search-1.0.3.tgz", + "integrity": "sha512-rsrzkGWI84di/uYtEctS/4qLusWt0DESx/psjfB0TFpORDhe7JfC0h8ary+eHulTksumor244bXLRSqQXbFJmw==" }, "@node-redis/time-series": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@node-redis/time-series/-/time-series-1.0.1.tgz", - "integrity": "sha512-+nTn6EewVj3GlUXPuD3dgheWqo219jTxlo6R+pg24OeVvFHx9aFGGiyOgj3vBPhWUdRZ0xMcujXV5ki4fbLyMw==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@node-redis/time-series/-/time-series-1.0.2.tgz", + "integrity": "sha512-HGQ8YooJ8Mx7l28tD7XjtB3ImLEjlUxG1wC1PAjxu6hPJqjPshUZxAICzDqDjtIbhDTf48WXXUcx8TQJB1XTKA==" }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -6594,16 +6594,16 @@ } }, "redis": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.0.3.tgz", - "integrity": "sha512-SJMRXvgiQUYN0HaWwWv002J5ZgkhYXOlbLomzcrL3kP42yRNZ8Jx5nvLYhVpgmf10xcDpanFOxxJkphu2eyIFQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.0.4.tgz", + "integrity": "sha512-KaM1OAj/nGrSeybmmOWSMY0LXTGT6FVWgUZZrd2MYzXKJ+VGtqVaciGQeNMfZiQX+kDM8Ke4uttb54m2rm6V0A==", "requires": { "@node-redis/bloom": "1.0.1", - "@node-redis/client": "1.0.3", + "@node-redis/client": "1.0.4", "@node-redis/graph": "1.0.0", "@node-redis/json": "1.0.2", - "@node-redis/search": "1.0.2", - "@node-redis/time-series": "1.0.1" + "@node-redis/search": "1.0.3", + "@node-redis/time-series": "1.0.2" } }, "redis-errors": { diff --git a/package.json b/package.json index ddee8faa..f9e503bf 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "qiniu": "7.4.0", "rand-token": "1.0.1", "recursive-readdir": "2.2.2", - "redis": "4.0.3", + "redis": "4.0.4", "sequelize": "6.16.2", "slash": "3.0.0", "validator": "13.7.0", From 304423e85bd544984e2acbfade816a0e2a12fdb1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Feb 2022 03:28:04 +0000 Subject: [PATCH 212/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.0 --- package-lock.json | 96 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78850cda..f3434e1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -647,13 +647,13 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.8.3.tgz", - "integrity": "sha512-nM38gp2c82jrC0BmJ5G1flkN3va203G/XW3AjkLxVally2puy/4TrZx6DPiEjJh3Vtj3Bo+QFiKRCW3Ox6zdmA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.0.tgz", + "integrity": "sha512-eSpljbdwj2wrM97iOme73rZy07b87iOOrp5i+KwnBxvd1/hRyJBK4F/bkgliGulu4i0NT48y+9k9slwCsw1HfQ==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.12.0", - "@typescript-eslint/parser": "5.12.0", + "@typescript-eslint/eslint-plugin": "5.12.1", + "@typescript-eslint/parser": "5.12.1", "babel-eslint": "10.1.0", "eslint": "8.9.0", "eslint-config-airbnb-base": "15.0.0", @@ -906,14 +906,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.0.tgz", - "integrity": "sha512-fwCMkDimwHVeIOKeBHiZhRUfJXU8n6xW1FL9diDxAyGAFvKcH4csy0v7twivOQdQdA0KC8TDr7GGRd3L4Lv0rQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.1.tgz", + "integrity": "sha512-M499lqa8rnNK7mUv74lSFFttuUsubIRdAbHcVaP93oFcKkEmHmLqy2n7jM9C8DVmFMYK61ExrZU6dLYhQZmUpw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/type-utils": "5.12.0", - "@typescript-eslint/utils": "5.12.0", + "@typescript-eslint/scope-manager": "5.12.1", + "@typescript-eslint/type-utils": "5.12.1", + "@typescript-eslint/utils": "5.12.1", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -940,23 +940,23 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.12.0.tgz", - "integrity": "sha512-iFVADWH2CmiDF+E9kFK2r474BO2JILDKw1NVD5ytqHrM3ezsfdu5uo6B+77DH0suM7iUC/yOayHNziuiI9BPbQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.12.1.tgz", + "integrity": "sha512-4bEa8WrS5DdzJq43smPH12ys4AOoCxVu2xjYGXQR4DnNyM8pqNzCr28zodf38Jc4bxWdniSEKKC1bQaccXGq5Q==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.12.0" + "@typescript-eslint/utils": "5.12.1" } }, "@typescript-eslint/parser": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.0.tgz", - "integrity": "sha512-MfSwg9JMBojMUoGjUmX+D2stoQj1CBYTCP0qnnVtu9A+YQXVKNtLjasYh+jozOcrb/wau8TCfWOkQTiOAruBog==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.1.tgz", + "integrity": "sha512-6LuVUbe7oSdHxUWoX/m40Ni8gsZMKCi31rlawBHt7VtW15iHzjbpj2WLiToG2758KjtCCiLRKZqfrOdl3cNKuw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", + "@typescript-eslint/scope-manager": "5.12.1", + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/typescript-estree": "5.12.1", "debug": "^4.3.2" }, "dependencies": { @@ -978,22 +978,22 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.0.tgz", - "integrity": "sha512-GAMobtIJI8FGf1sLlUWNUm2IOkIjvn7laFWyRx7CLrv6nLBI7su+B7lbStqVlK5NdLvHRFiJo2HhiDF7Ki01WQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.1.tgz", + "integrity": "sha512-J0Wrh5xS6XNkd4TkOosxdpObzlYfXjAFIm9QxYLCPOcHVv1FyyFCPom66uIh8uBr0sZCrtS+n19tzufhwab8ZQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0" + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/visitor-keys": "5.12.1" } }, "@typescript-eslint/type-utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.0.tgz", - "integrity": "sha512-9j9rli3zEBV+ae7rlbBOotJcI6zfc6SHFMdKI9M3Nc0sy458LJ79Os+TPWeBBL96J9/e36rdJOfCuyRSgFAA0Q==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.1.tgz", + "integrity": "sha512-Gh8feEhsNLeCz6aYqynh61Vsdy+tiNNkQtc+bN3IvQvRqHkXGUhYkUi+ePKzP0Mb42se7FDb+y2SypTbpbR/Sg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.12.0", + "@typescript-eslint/utils": "5.12.1", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -1016,19 +1016,19 @@ } }, "@typescript-eslint/types": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.0.tgz", - "integrity": "sha512-JowqbwPf93nvf8fZn5XrPGFBdIK8+yx5UEGs2QFAYFI8IWYfrzz+6zqlurGr2ctShMaJxqwsqmra3WXWjH1nRQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.1.tgz", + "integrity": "sha512-hfcbq4qVOHV1YRdhkDldhV9NpmmAu2vp6wuFODL71Y0Ixak+FLeEU4rnPxgmZMnGreGEghlEucs9UZn5KOfHJA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.0.tgz", - "integrity": "sha512-Dd9gVeOqt38QHR0BEA8oRaT65WYqPYbIc5tRFQPkfLquVEFPD1HAtbZT98TLBkEcCkvwDYOAvuSvAD9DnQhMfQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.1.tgz", + "integrity": "sha512-ahOdkIY9Mgbza7L9sIi205Pe1inCkZWAHE1TV1bpxlU4RZNPtXaDZfiiFWcL9jdxvW1hDYZJXrFm+vlMkXRbBw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0", + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/visitor-keys": "5.12.1", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1054,26 +1054,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.0.tgz", - "integrity": "sha512-k4J2WovnMPGI4PzKgDtQdNrCnmBHpMUFy21qjX2CoPdoBcSBIMvVBr9P2YDP8jOqZOeK3ThOL6VO/sy6jtnvzw==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.1.tgz", + "integrity": "sha512-Qq9FIuU0EVEsi8fS6pG+uurbhNTtoYr4fq8tKjBupsK5Bgbk2I32UGm0Sh+WOyjOPgo/5URbxxSNV6HYsxV4MQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", + "@typescript-eslint/scope-manager": "5.12.1", + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/typescript-estree": "5.12.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.0.tgz", - "integrity": "sha512-cFwTlgnMV6TgezQynx2c/4/tx9Tufbuo9LPzmWqyRC3QC4qTGkAG1C6pBr0/4I10PAI/FlYunI3vJjIcu+ZHMg==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.1.tgz", + "integrity": "sha512-l1KSLfupuwrXx6wc0AuOmC7Ko5g14ZOQ86wJJqRbdLbXLK02pK/DPiDDqCc7BqqiiA04/eAA6ayL0bgOrAkH7A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.12.0", + "@typescript-eslint/types": "5.12.1", "eslint-visitor-keys": "^3.0.0" } }, diff --git a/package.json b/package.json index ddee8faa..78fd7dda 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.8.3", + "@shm-open/eslint-config-bundle": "1.9.0", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From 2c3d2f86e83a677af3d9b513311deee84a1419c2 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 22 Feb 2022 14:05:19 +0800 Subject: [PATCH 213/347] refactor: remove unnecessary eslint-disable --- src/core/services/app-manager.ts | 1 - src/core/services/client-manager.ts | 1 - src/core/services/collaborators-manager.ts | 2 -- src/core/services/deployments-manager.ts | 1 - src/models/deployments.ts | 1 - src/routes/apps.ts | 2 -- src/routes/index.ts | 3 --- src/routes/indexV1.ts | 1 - 8 files changed, 12 deletions(-) diff --git a/src/core/services/app-manager.ts b/src/core/services/app-manager.ts index eb1437d2..b458c0e2 100644 --- a/src/core/services/app-manager.ts +++ b/src/core/services/app-manager.ts @@ -154,7 +154,6 @@ class AppManager { if (_.eq(u.get('id'), currentUid)) { isCurrentAccount = true; } - // eslint-disable-next-line no-param-reassign allCol[u.get('email')] = { permission: collaborator.get('roles'), isCurrentAccount, diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index 1e367d29..b4b9cc2e 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -165,7 +165,6 @@ class ClientManager { appVersion: string, label: string, packageHash: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars clientUniqueId: string, logger: Logger, ) { diff --git a/src/core/services/collaborators-manager.ts b/src/core/services/collaborators-manager.ts index 024552f6..b4eee7e8 100644 --- a/src/core/services/collaborators-manager.ts +++ b/src/core/services/collaborators-manager.ts @@ -18,7 +18,6 @@ class CollaboratorsManager { data, (result, value) => { result.uids.push(value.uid); - // eslint-disable-next-line no-param-reassign result.colByUid[value.uid] = value; return result; }, @@ -38,7 +37,6 @@ class CollaboratorsManager { if (!_.isEmpty(coInfo.colByUid[value.id])) { permission = coInfo.colByUid[value.id].roles; } - // eslint-disable-next-line no-param-reassign result[value.email] = { permission }; return result; }, diff --git a/src/core/services/deployments-manager.ts b/src/core/services/deployments-manager.ts index 2ce91026..108fcf27 100644 --- a/src/core/services/deployments-manager.ts +++ b/src/core/services/deployments-manager.ts @@ -104,7 +104,6 @@ class DeploymentsManager { return _.reduce( diffs, (result, v) => { - // eslint-disable-next-line no-param-reassign result[v.diff_against_package_hash] = { size: v.diff_size, url: getBlobDownloadUrl(v.diff_blob_url), diff --git a/src/models/deployments.ts b/src/models/deployments.ts index 71167004..b1e1dbb2 100644 --- a/src/models/deployments.ts +++ b/src/models/deployments.ts @@ -49,7 +49,6 @@ export function generateDeploymentsLabelId(deploymentId: number) { if (_.isEmpty(data)) { throw new AppError('does not find deployment'); } - // eslint-disable-next-line no-param-reassign data.label_id += 1; return data.save({ transaction: t }).then((d) => { return d.label_id; diff --git a/src/routes/apps.ts b/src/routes/apps.ts index 3c022f2d..f2b9baa6 100644 --- a/src/routes/apps.ts +++ b/src/routes/apps.ts @@ -217,7 +217,6 @@ appsRouter.get( .getMetricsbyPackageId(v.get('id')) .then((metrics) => { if (metrics) { - // eslint-disable-next-line no-param-reassign result[v.get('label')] = { active: metrics.get('active'), downloaded: metrics.get('downloaded'), @@ -899,7 +898,6 @@ appsRouter.get( isCurrentAccount = true; } - // eslint-disable-next-line no-param-reassign result[key] = { ...value, isCurrentAccount, diff --git a/src/routes/index.ts b/src/routes/index.ts index cf5a35f2..5fba9d4b 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -50,7 +50,6 @@ indexRouter.get( .chosenMan(rs.packageId, rs.rollout, clientUniqueId) .then((data) => { if (!data) { - // eslint-disable-next-line no-param-reassign rs.isAvailable = false; return rs; } @@ -60,9 +59,7 @@ indexRouter.get( .then((rs) => { logger.info('updateCheck success'); - // eslint-disable-next-line no-param-reassign delete rs.packageId; - // eslint-disable-next-line no-param-reassign delete rs.rollout; res.send({ updateInfo: rs }); }) diff --git a/src/routes/indexV1.ts b/src/routes/indexV1.ts index 42b5a1ee..a7089ef3 100644 --- a/src/routes/indexV1.ts +++ b/src/routes/indexV1.ts @@ -50,7 +50,6 @@ indexV1Router.get( .chosenMan(rs.packageId, rs.rollout, clientUniqueId) .then((data) => { if (!data) { - // eslint-disable-next-line no-param-reassign rs.isAvailable = false; return rs; } From 6fac8716c14dd2e099d5409d59468a4d5c1d7415 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 22 Feb 2022 14:13:48 +0800 Subject: [PATCH 214/347] refactor: allow UPPER_CASE for consts --- .eslintrc.js | 5 +++++ src/core/const.ts | 4 +--- src/core/services/account-manager.ts | 18 +++++++++--------- src/core/services/client-manager.ts | 12 ++++++------ src/core/services/datacenter-manager.ts | 20 ++++++++++---------- src/core/utils/storage.ts | 1 - src/routes/apps.ts | 1 - 7 files changed, 31 insertions(+), 30 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 3a88dc6c..cb6aa1e2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,6 +21,11 @@ module.exports = { format: ['camelCase', 'PascalCase'], leadingUnderscore: 'allow', }, + { + selector: 'variable', + modifiers: ['const'], + format: ['camelCase', 'PascalCase', 'UPPER_CASE'], + }, { selector: 'typeLike', format: ['PascalCase'], diff --git a/src/core/const.ts b/src/core/const.ts index 70764831..916104b9 100644 --- a/src/core/const.ts +++ b/src/core/const.ts @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/naming-convention */ - // supported platforms // TODO: refactor to enums and put name mapping into util method export const IOS = 1; @@ -15,7 +13,7 @@ export const REACT_NATIVE_NAME = 'React-Native'; export const CORDOVA = 2; export const CORDOVA_NAME = 'Cordova'; -// suupported env +// supported env export const PRODUCTION = 'Production'; export const STAGING = 'Staging'; diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts index d20a3e4a..7b4ddd4c 100644 --- a/src/core/services/account-manager.ts +++ b/src/core/services/account-manager.ts @@ -11,10 +11,10 @@ import { redisClient } from '../utils/connections'; import { passwordVerifySync, randToken, md5, passwordHashSync } from '../utils/security'; import { emailManager } from './email-manager'; -const loginLimitPre = 'LOGIN_LIMIT_PRE_'; -const registerCode = 'REGISTER_CODE_'; -const expired = 1200; -const expiredSpeed = 10; +const LOGIN_LIMIT_PRE = 'LOGIN_LIMIT_PRE_'; +const REGISTER_CODE = 'REGISTER_CODE_'; +const EXPIRED = 1200; +const EXPIRED_SPEED = 10; class AccountManager { collaboratorCan(uid: number, appName: string, logger: Logger) { @@ -119,7 +119,7 @@ class AccountManager { }) .then((users) => { if (tryLoginTimes > 0) { - const loginKey = `${loginLimitPre}${users.id}`; + const loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; return redisClient.get(loginKey).then((loginErrorTimes) => { if (Number(loginErrorTimes) > tryLoginTimes) { throw new AppError(`您输入密码错误次数超过限制,帐户已经锁定`); @@ -132,7 +132,7 @@ class AccountManager { .then((users) => { if (!passwordVerifySync(password, users.password)) { if (tryLoginTimes > 0) { - const loginKey = `${loginLimitPre}${users.id}`; + const loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; redisClient.exists(loginKey).then((isExists) => { if (!isExists) { const expires = moment().endOf('day').unix() - moment().unix(); @@ -163,7 +163,7 @@ class AccountManager { // 将token临时存储到redis const token = randToken(40); return redisClient - .setEx(`${registerCode}${md5(email)}`, expired, token) + .setEx(`${REGISTER_CODE}${md5(email)}`, EXPIRED, token) .then(() => { return token; }); @@ -182,7 +182,7 @@ class AccountManager { } }) .then(() => { - const registerKey = `${registerCode}${md5(email)}`; + const registerKey = `${REGISTER_CODE}${md5(email)}`; return redisClient.get(registerKey).then((storageToken) => { if (_.isEmpty(storageToken)) { throw new AppError(`验证码已经失效,请您重新获取`); @@ -190,7 +190,7 @@ class AccountManager { if (!_.eq(token, storageToken)) { redisClient.ttl(registerKey).then((ttl) => { if (ttl > 0) { - redisClient.expire(registerKey, ttl - expiredSpeed); + redisClient.expire(registerKey, ttl - EXPIRED_SPEED); } }); throw new AppError(`您输入的验证码不正确,请重新输入`); diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index b4b9cc2e..aecdd8b1 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -14,9 +14,9 @@ import { DEPLOYMENT_FAILED, DEPLOYMENT_SUCCEEDED } from '../const'; import { parseVersion, getBlobDownloadUrl } from '../utils/common'; import { redisClient } from '../utils/connections'; -const updateCheck = 'UPDATE_CHECK'; -const chosenMan = 'CHOSEN_MAN'; -const expired = 600; +const UPDATE_CHECK = 'UPDATE_CHECK'; +const CHOSEN_MAN = 'CHOSEN_MAN'; +const EXPIRED = 600; interface UpdateCheckInfo { packageId: number; @@ -38,7 +38,7 @@ interface UpdateCheckInfo { class ClientManager { private getUpdateCheckCacheKey(deploymentKey, appVersion, label, packageHash) { - return [updateCheck, deploymentKey, appVersion, label, packageHash].join(':'); + return [UPDATE_CHECK, deploymentKey, appVersion, label, packageHash].join(':'); } clearUpdateCheckCache(deploymentKey, appVersion, label, packageHash, logger: Logger) { @@ -108,7 +108,7 @@ class ClientManager { try { logger.debug('updateCheckFromCache read from db'); const strRs = JSON.stringify(rs); - redisClient.setEx(redisCacheKey, expired, strRs); + redisClient.setEx(redisCacheKey, EXPIRED, strRs); } catch (e) { // do nothing } @@ -118,7 +118,7 @@ class ClientManager { } private getChosenManCacheKey(packageId, rollout, clientUniqueId) { - return [chosenMan, packageId, rollout, clientUniqueId].join(':'); + return [CHOSEN_MAN, packageId, rollout, clientUniqueId].join(':'); } private random(rollout) { diff --git a/src/core/services/datacenter-manager.ts b/src/core/services/datacenter-manager.ts index 92c55759..30b1f47d 100644 --- a/src/core/services/datacenter-manager.ts +++ b/src/core/services/datacenter-manager.ts @@ -7,8 +7,8 @@ import { config } from '../config'; import { createEmptyFolder, copy } from '../utils/common'; import { calcAllFileSha256, packageHashSync } from '../utils/security'; -const manifestFilename = 'manifest.json'; -const contentsName = 'contents'; +const MANIFEST_FILENAME = 'manifest.json'; +const CONTENTS_NAME = 'contents'; class DataCenterManager { getDataDir() { @@ -18,8 +18,8 @@ class DataCenterManager { hasPackageStoreSync(packageHash: string) { const dataDir = this.getDataDir(); const packageHashPath = path.join(dataDir, packageHash); - const manifestFile = path.join(packageHashPath, manifestFilename); - const contentPath = path.join(packageHashPath, contentsName); + const manifestFile = path.join(packageHashPath, MANIFEST_FILENAME); + const contentPath = path.join(packageHashPath, CONTENTS_NAME); return fs.existsSync(manifestFile) && fs.existsSync(contentPath); } @@ -27,8 +27,8 @@ class DataCenterManager { if (this.hasPackageStoreSync(packageHash)) { const dataDir = this.getDataDir(); const packageHashPath = path.join(dataDir, packageHash); - const manifestFile = path.join(packageHashPath, manifestFilename); - const contentPath = path.join(packageHashPath, contentsName); + const manifestFile = path.join(packageHashPath, MANIFEST_FILENAME); + const contentPath = path.join(packageHashPath, CONTENTS_NAME); return this.buildPackageInfo(packageHash, packageHashPath, contentPath, manifestFile); } throw new AppError("can't get PackageInfo"); @@ -51,8 +51,8 @@ class DataCenterManager { validateStore(providePackageHash: string, logger: Logger) { const dataDir = this.getDataDir(); const packageHashPath = path.join(dataDir, providePackageHash); - const manifestFile = path.join(packageHashPath, manifestFilename); - const contentPath = path.join(packageHashPath, contentsName); + const manifestFile = path.join(packageHashPath, MANIFEST_FILENAME); + const contentPath = path.join(packageHashPath, CONTENTS_NAME); if (!this.hasPackageStoreSync(providePackageHash)) { logger.debug(`validateStore providePackageHash not exist`); return Promise.resolve(false); @@ -84,8 +84,8 @@ class DataCenterManager { const packageHash = packageHashSync(manifestJson); const dataDir = this.getDataDir(); const packageHashPath = path.join(dataDir, packageHash); - const manifestFile = path.join(packageHashPath, manifestFilename); - const contentPath = path.join(packageHashPath, contentsName); + const manifestFile = path.join(packageHashPath, MANIFEST_FILENAME); + const contentPath = path.join(packageHashPath, CONTENTS_NAME); return this.validateStore(packageHash, logger).then((isValidate) => { if (!force && isValidate) { return this.buildPackageInfo( diff --git a/src/core/utils/storage.ts b/src/core/utils/storage.ts index 1ce45c64..9f2c1af6 100644 --- a/src/core/utils/storage.ts +++ b/src/core/utils/storage.ts @@ -8,7 +8,6 @@ import fsextra from 'fs-extra'; import { Logger } from 'kv-logger'; import _ from 'lodash'; import qiniu from 'qiniu'; - import { AppError } from '../app-error'; import { config } from '../config'; diff --git a/src/routes/apps.ts b/src/routes/apps.ts index f2b9baa6..0e2d3ca6 100644 --- a/src/routes/apps.ts +++ b/src/routes/apps.ts @@ -4,7 +4,6 @@ import _ from 'lodash'; import validator from 'validator'; import { AppError } from '../core/app-error'; import { config } from '../core/config'; - import { IOS, IOS_NAME, From 6e207378305bdc3e9f0258a91a2074cbff0c608a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Feb 2022 16:53:49 +0000 Subject: [PATCH 215/347] fix(deps): update dependency fs-extra to v10.0.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index f3434e1e..82196213 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3624,9 +3624,9 @@ } }, "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", diff --git a/package.json b/package.json index 78fd7dda..15e1a5d7 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "express": "4.17.3", "extract-zip": "2.0.1", "formidable": "2.0.1", - "fs-extra": "10.0.0", + "fs-extra": "10.0.1", "helmet": "5.0.2", "jsonwebtoken": "8.5.1", "kv-logger": "0.5.3", From 4b12588be4eb78cd63716eb24f3532778f38854e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 25 Feb 2022 09:51:54 +0000 Subject: [PATCH 216/347] chore(deps): update actions/setup-node action to v3 --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index aa4930e1..26cf1c56 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -32,7 +32,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - run: npm ci From ac28781f153a83e60aa0db6e363f4cad7aa2fb44 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 25 Feb 2022 23:57:27 +0000 Subject: [PATCH 217/347] chore(deps): update dependency @types/lodash to v4.14.179 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index f3434e1e..3bbffdf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -780,9 +780,9 @@ } }, "@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", + "version": "4.14.179", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz", + "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index 78fd7dda..0a2338fc 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@types/formidable": "2.0.4", "@types/fs-extra": "9.0.13", "@types/jsonwebtoken": "8.5.8", - "@types/lodash": "4.14.178", + "@types/lodash": "4.14.179", "@types/node-fetch": "2.6.1", "@types/nodemailer": "6.4.4", "@types/recursive-readdir": "2.2.0", From d21c514c18768161d7cde6b87b7ce7af1e637ea5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 28 Feb 2022 02:53:34 +0000 Subject: [PATCH 218/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.1 --- package-lock.json | 49 ++++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3bbffdf8..1807da29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -316,9 +316,9 @@ } }, "@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -383,9 +383,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -647,15 +647,15 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.0.tgz", - "integrity": "sha512-eSpljbdwj2wrM97iOme73rZy07b87iOOrp5i+KwnBxvd1/hRyJBK4F/bkgliGulu4i0NT48y+9k9slwCsw1HfQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.1.tgz", + "integrity": "sha512-2UuEYgIegk/SUYwmEz7zmxi+M6lBwZFc5zwhIY91bdLpwappDaXg0Kx/tOm8fl1RJC0jRoQngaZGFhVhsYcLUA==", "dev": true, "requires": { "@typescript-eslint/eslint-plugin": "5.12.1", "@typescript-eslint/parser": "5.12.1", "babel-eslint": "10.1.0", - "eslint": "8.9.0", + "eslint": "8.10.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.4.0", "eslint-import-resolver-typescript": "2.5.0", @@ -663,7 +663,7 @@ "eslint-plugin-import": "2.25.4", "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-react": "7.28.0", + "eslint-plugin-react": "7.29.2", "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "4.0.0", "eslint-plugin-taro": "3.3.20", @@ -2657,12 +2657,12 @@ } }, "eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.1.0", + "@eslint/eslintrc": "^1.2.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -3072,9 +3072,9 @@ } }, "eslint-plugin-react": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", - "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.2.tgz", + "integrity": "sha512-ypEBTKOy5liFQXZWMchJ3LN0JX1uPI6n7MN7OPHKacqXAxq5gYC30TdO7wqGYQyxD1OrzpobdHC3hDmlRWDg9w==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -3082,12 +3082,12 @@ "doctrine": "^2.1.0", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "object.entries": "^1.1.5", "object.fromentries": "^2.0.5", "object.hasown": "^1.1.0", "object.values": "^1.1.5", - "prop-types": "^15.7.2", + "prop-types": "^15.8.1", "resolve": "^2.0.0-next.3", "semver": "^6.3.0", "string.prototype.matchall": "^4.0.6" @@ -3108,6 +3108,15 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "resolve": { "version": "2.0.0-next.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", diff --git a/package.json b/package.json index 0a2338fc..e415d9a8 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.0", + "@shm-open/eslint-config-bundle": "1.9.1", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From 34b94224d2c0f94e7ab79390eaf37e955b4e2b0c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 1 Mar 2022 01:29:51 +0000 Subject: [PATCH 219/347] chore(deps): update dependency typescript to v4.6.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1807da29..bd5a2453 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7612,9 +7612,9 @@ } }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index e415d9a8..8801b17c 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "standard-version": "9.3.2", "supertest": "6.2.2", "supervisor": "0.12.0", - "typescript": "4.5.5" + "typescript": "4.6.2" }, "files": [ "bin", From 920ab62f2953b0810d01bb485a17f0cb078c6b82 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 1 Mar 2022 20:00:14 +0000 Subject: [PATCH 220/347] chore(deps): update actions/checkout action to v3 --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index aa4930e1..fe5d3748 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -30,7 +30,7 @@ jobs: - 3306:3306 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v2 with: From 325cfbf1b6969dcbce0c8f45fbdc7956e968dd19 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 8 Mar 2022 03:59:21 +0000 Subject: [PATCH 221/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.2 --- package-lock.json | 118 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 60 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index bd5a2453..45cea4af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -647,23 +647,23 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.1.tgz", - "integrity": "sha512-2UuEYgIegk/SUYwmEz7zmxi+M6lBwZFc5zwhIY91bdLpwappDaXg0Kx/tOm8fl1RJC0jRoQngaZGFhVhsYcLUA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.2.tgz", + "integrity": "sha512-yaXT3EHo7JJwkfLI3vSTay83wdAm59Q3rCvvyBW69V04zlyqzxsLPjVoXXWDM1tw4qDTHXqtXBr9TwQOr7vTlw==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.12.1", - "@typescript-eslint/parser": "5.12.1", + "@typescript-eslint/eslint-plugin": "5.14.0", + "@typescript-eslint/parser": "5.14.0", "babel-eslint": "10.1.0", "eslint": "8.10.0", "eslint-config-airbnb-base": "15.0.0", - "eslint-config-prettier": "8.4.0", + "eslint-config-prettier": "8.5.0", "eslint-import-resolver-typescript": "2.5.0", "eslint-plugin-deprecation": "1.3.2", "eslint-plugin-import": "2.25.4", "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-react": "7.29.2", + "eslint-plugin-react": "7.29.3", "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "4.0.0", "eslint-plugin-taro": "3.3.20", @@ -906,14 +906,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.1.tgz", - "integrity": "sha512-M499lqa8rnNK7mUv74lSFFttuUsubIRdAbHcVaP93oFcKkEmHmLqy2n7jM9C8DVmFMYK61ExrZU6dLYhQZmUpw==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.14.0.tgz", + "integrity": "sha512-ir0wYI4FfFUDfLcuwKzIH7sMVA+db7WYen47iRSaCGl+HMAZI9fpBwfDo45ZALD3A45ZGyHWDNLhbg8tZrMX4w==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.12.1", - "@typescript-eslint/type-utils": "5.12.1", - "@typescript-eslint/utils": "5.12.1", + "@typescript-eslint/scope-manager": "5.14.0", + "@typescript-eslint/type-utils": "5.14.0", + "@typescript-eslint/utils": "5.14.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -940,23 +940,23 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.12.1.tgz", - "integrity": "sha512-4bEa8WrS5DdzJq43smPH12ys4AOoCxVu2xjYGXQR4DnNyM8pqNzCr28zodf38Jc4bxWdniSEKKC1bQaccXGq5Q==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.14.0.tgz", + "integrity": "sha512-ke48La1A/TWAn949cdgQiP3oK0NT7ArhDAOVOmNLVjT/uAXlFyrJY8dM4qqxHrATzIp8glg+G2OZjy2lRKBIUA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.12.1" + "@typescript-eslint/utils": "5.14.0" } }, "@typescript-eslint/parser": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.1.tgz", - "integrity": "sha512-6LuVUbe7oSdHxUWoX/m40Ni8gsZMKCi31rlawBHt7VtW15iHzjbpj2WLiToG2758KjtCCiLRKZqfrOdl3cNKuw==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.14.0.tgz", + "integrity": "sha512-aHJN8/FuIy1Zvqk4U/gcO/fxeMKyoSv/rS46UXMXOJKVsLQ+iYPuXNbpbH7cBLcpSbmyyFbwrniLx5+kutu1pw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.12.1", - "@typescript-eslint/types": "5.12.1", - "@typescript-eslint/typescript-estree": "5.12.1", + "@typescript-eslint/scope-manager": "5.14.0", + "@typescript-eslint/types": "5.14.0", + "@typescript-eslint/typescript-estree": "5.14.0", "debug": "^4.3.2" }, "dependencies": { @@ -978,22 +978,22 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.1.tgz", - "integrity": "sha512-J0Wrh5xS6XNkd4TkOosxdpObzlYfXjAFIm9QxYLCPOcHVv1FyyFCPom66uIh8uBr0sZCrtS+n19tzufhwab8ZQ==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.14.0.tgz", + "integrity": "sha512-LazdcMlGnv+xUc5R4qIlqH0OWARyl2kaP8pVCS39qSL3Pd1F7mI10DbdXeARcE62sVQE4fHNvEqMWsypWO+yEw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.12.1", - "@typescript-eslint/visitor-keys": "5.12.1" + "@typescript-eslint/types": "5.14.0", + "@typescript-eslint/visitor-keys": "5.14.0" } }, "@typescript-eslint/type-utils": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.1.tgz", - "integrity": "sha512-Gh8feEhsNLeCz6aYqynh61Vsdy+tiNNkQtc+bN3IvQvRqHkXGUhYkUi+ePKzP0Mb42se7FDb+y2SypTbpbR/Sg==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.14.0.tgz", + "integrity": "sha512-d4PTJxsqaUpv8iERTDSQBKUCV7Q5yyXjqXUl3XF7Sd9ogNLuKLkxz82qxokqQ4jXdTPZudWpmNtr/JjbbvUixw==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.12.1", + "@typescript-eslint/utils": "5.14.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -1016,19 +1016,19 @@ } }, "@typescript-eslint/types": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.1.tgz", - "integrity": "sha512-hfcbq4qVOHV1YRdhkDldhV9NpmmAu2vp6wuFODL71Y0Ixak+FLeEU4rnPxgmZMnGreGEghlEucs9UZn5KOfHJA==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.14.0.tgz", + "integrity": "sha512-BR6Y9eE9360LNnW3eEUqAg6HxS9Q35kSIs4rp4vNHRdfg0s+/PgHgskvu5DFTM7G5VKAVjuyaN476LCPrdA7Mw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.1.tgz", - "integrity": "sha512-ahOdkIY9Mgbza7L9sIi205Pe1inCkZWAHE1TV1bpxlU4RZNPtXaDZfiiFWcL9jdxvW1hDYZJXrFm+vlMkXRbBw==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.14.0.tgz", + "integrity": "sha512-QGnxvROrCVtLQ1724GLTHBTR0lZVu13izOp9njRvMkCBgWX26PKvmMP8k82nmXBRD3DQcFFq2oj3cKDwr0FaUA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.12.1", - "@typescript-eslint/visitor-keys": "5.12.1", + "@typescript-eslint/types": "5.14.0", + "@typescript-eslint/visitor-keys": "5.14.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1054,26 +1054,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.1.tgz", - "integrity": "sha512-Qq9FIuU0EVEsi8fS6pG+uurbhNTtoYr4fq8tKjBupsK5Bgbk2I32UGm0Sh+WOyjOPgo/5URbxxSNV6HYsxV4MQ==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.14.0.tgz", + "integrity": "sha512-EHwlII5mvUA0UsKYnVzySb/5EE/t03duUTweVy8Zqt3UQXBrpEVY144OTceFKaOe4xQXZJrkptCf7PjEBeGK4w==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.12.1", - "@typescript-eslint/types": "5.12.1", - "@typescript-eslint/typescript-estree": "5.12.1", + "@typescript-eslint/scope-manager": "5.14.0", + "@typescript-eslint/types": "5.14.0", + "@typescript-eslint/typescript-estree": "5.14.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.1.tgz", - "integrity": "sha512-l1KSLfupuwrXx6wc0AuOmC7Ko5g14ZOQ86wJJqRbdLbXLK02pK/DPiDDqCc7BqqiiA04/eAA6ayL0bgOrAkH7A==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.14.0.tgz", + "integrity": "sha512-yL0XxfzR94UEkjBqyymMLgCBdojzEuy/eim7N9/RIcTNxpJudAcqsU8eRyfzBbcEzGoPWfdM3AGak3cN08WOIw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/types": "5.14.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -2859,9 +2859,9 @@ } }, "eslint-config-prettier": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", - "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true }, "eslint-import-resolver-node": { @@ -3072,9 +3072,9 @@ } }, "eslint-plugin-react": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.2.tgz", - "integrity": "sha512-ypEBTKOy5liFQXZWMchJ3LN0JX1uPI6n7MN7OPHKacqXAxq5gYC30TdO7wqGYQyxD1OrzpobdHC3hDmlRWDg9w==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.3.tgz", + "integrity": "sha512-MzW6TuCnDOcta67CkpDyRfRsEVx9FNMDV8wZsDqe1luHPdGTrQIUaUXD27Ja3gHsdOIs/cXzNchWGlqm+qRVRg==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -7527,9 +7527,9 @@ "dev": true }, "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.13.0.tgz", + "integrity": "sha512-nWuffZppoaYK0vQ1SQmkSsQzJoHA4s6uzdb2waRpD806x9yfq153AdVsWz4je2qZcW+pENrMQXbGQ3sMCkXuhw==", "dev": true, "requires": { "@types/json5": "^0.0.29", diff --git a/package.json b/package.json index 8801b17c..f31fb965 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.1", + "@shm-open/eslint-config-bundle": "1.9.2", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From 2a40892edcd945158b9ebb1c5b8f73942fabe4bf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 8 Mar 2022 19:41:43 +0000 Subject: [PATCH 222/347] fix(deps): update dependency aws-sdk to v2.1089.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 45cea4af..436f34b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1394,9 +1394,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.1077.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1077.0.tgz", - "integrity": "sha512-orJvJROs8hJaQRfHsX7Zl5PxEgrD/uTXyqXz9Yu9Io5VVxzvnOty9oHmvEMSlgTIf1qd01gnev/vpvP1HgzKtw==", + "version": "2.1089.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1089.0.tgz", + "integrity": "sha512-QhawXCxhOLR+SJHuKXNzyx1hd+oA1HqaDRjbeTKUrz7g2KF4EyPWvLwzf1fNaOTPK3Vp3JDYijusdKlfV69efw==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index f31fb965..b3652410 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1077.0", + "aws-sdk": "2.1089.0", "bcryptjs": "2.4.3", "body-parser": "1.19.2", "cookie-parser": "1.4.6", From dd255d976f1e2cd3e3d965580b900cb7f99f738a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 9 Mar 2022 07:17:20 +0000 Subject: [PATCH 223/347] fix(deps): update dependency sequelize to v6.17.0 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7b3078a9..f912e2ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -884,8 +884,7 @@ "@types/validator": { "version": "13.7.1", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.1.tgz", - "integrity": "sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q==", - "dev": true + "integrity": "sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q==" }, "@types/yauzl": { "version": "2.9.2", @@ -6827,14 +6826,15 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "6.16.2", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.16.2.tgz", - "integrity": "sha512-0fCdO4qrkuMWizq3blDVHPC4NvrDkRnrFucoJKlaukdatrDpluBw2GXQ53rBQeizbHGefdgehhFiyFzyo0COKg==", + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.17.0.tgz", + "integrity": "sha512-AZus+0YZDq91Zg0hzDaO5atTzHgJruI23V8nBlAhkLuI81Z53nSRdAe/4R1A6vGOZ/RfCLP9idF4tfQnoAsM5A==", "requires": { "@types/debug": "^4.1.7", + "@types/validator": "^13.7.1", "debug": "^4.3.3", "dottie": "^2.0.2", - "inflection": "^1.13.1", + "inflection": "^1.13.2", "lodash": "^4.17.21", "moment": "^2.29.1", "moment-timezone": "^0.5.34", diff --git a/package.json b/package.json index b1c70f09..7333cd02 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "4.0.4", - "sequelize": "6.16.2", + "sequelize": "6.17.0", "slash": "3.0.0", "validator": "13.7.0", "yargs": "17.3.1", From 7d1af7a4c7516a1bbc2d84b4d6492d768efd5519 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 9 Mar 2022 07:20:58 +0000 Subject: [PATCH 224/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 673d6b41..f3c78b53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -647,9 +647,9 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.2.tgz", - "integrity": "sha512-yaXT3EHo7JJwkfLI3vSTay83wdAm59Q3rCvvyBW69V04zlyqzxsLPjVoXXWDM1tw4qDTHXqtXBr9TwQOr7vTlw==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.3.tgz", + "integrity": "sha512-d2mLAhrmVJBw1FFzahVjPL7JCGn8aYaJiN/2DLcMEA/DzGgXJtEQXw8dlYLC8Esh8OlKWBuMxFtNPvAvN7F9qQ==", "dev": true, "requires": { "@typescript-eslint/eslint-plugin": "5.14.0", diff --git a/package.json b/package.json index 849227b6..9828f8a7 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.2", + "@shm-open/eslint-config-bundle": "1.9.3", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From bb0a27dbe4b37329a18736327747a9c0ce89278d Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 9 Mar 2022 15:40:01 +0800 Subject: [PATCH 225/347] chore(release): 2.0.3 --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91ecd04c..19c7703d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.0.3](https://github.com/shm-open/code-push-server/compare/v2.0.2...v2.0.3) (2022-03-09) + + +### Bug Fixes + +* **deps:** update dependency aws-sdk to v2.1089.0 ([2a40892](https://github.com/shm-open/code-push-server/commit/2a40892edcd945158b9ebb1c5b8f73942fabe4bf)) +* **deps:** update dependency fs-extra to v10.0.1 ([6e20737](https://github.com/shm-open/code-push-server/commit/6e207378305bdc3e9f0258a91a2074cbff0c608a)) +* **deps:** update dependency redis to v4.0.4 ([23e984a](https://github.com/shm-open/code-push-server/commit/23e984a7662a7cc365d3402cba1ee809d4602298)) +* **deps:** update dependency sequelize to v6.17.0 ([dd255d9](https://github.com/shm-open/code-push-server/commit/dd255d976f1e2cd3e3d965580b900cb7f99f738a)) + ### [2.0.2](https://github.com/shm-open/code-push-server/compare/v2.0.1...v2.0.2) (2022-02-21) diff --git a/package-lock.json b/package-lock.json index f3c78b53..cdab0494 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "2.0.2", + "version": "2.0.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 9828f8a7..6bd9babb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "2.0.2", + "version": "2.0.3", "license": "MIT", "repository": { "type": "git", From 579db0e69ea439cdf2a66959fe1566f6a5cc9228 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 11 Mar 2022 18:22:47 +0000 Subject: [PATCH 226/347] chore(deps): update dependency mocha to v9.2.2 --- package-lock.json | 25 +++++++++++++++++-------- package.json | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index cdab0494..ba22bbf5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5265,9 +5265,9 @@ } }, "mocha": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", - "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -5283,9 +5283,9 @@ "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "4.2.1", "ms": "2.1.3", - "nanoid": "3.2.0", + "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -5344,6 +5344,15 @@ "p-locate": "^5.0.0" } }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -5490,9 +5499,9 @@ } }, "nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true }, "natural-compare": { diff --git a/package.json b/package.json index 6bd9babb..5efed594 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@types/validator": "13.7.1", "@types/yazl": "2.4.2", "concurrently": "7.0.0", - "mocha": "9.2.1", + "mocha": "9.2.2", "nyc": "15.1.0", "should": "13.2.3", "standard-version": "9.3.2", From ceaf399c336f0ec7720a352bf0bb0daca5fef978 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 14 Mar 2022 20:03:46 +0000 Subject: [PATCH 227/347] chore(deps): update dependency @types/lodash to v4.14.180 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ba22bbf5..b81b9073 100644 --- a/package-lock.json +++ b/package-lock.json @@ -780,9 +780,9 @@ } }, "@types/lodash": { - "version": "4.14.179", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz", - "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==", + "version": "4.14.180", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.180.tgz", + "integrity": "sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index 5efed594..8a1d1aaf 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@types/formidable": "2.0.4", "@types/fs-extra": "9.0.13", "@types/jsonwebtoken": "8.5.8", - "@types/lodash": "4.14.179", + "@types/lodash": "4.14.180", "@types/node-fetch": "2.6.1", "@types/nodemailer": "6.4.4", "@types/recursive-readdir": "2.2.0", From 44323bb63742b0c6b6ea0ee50b65fffc2e7c7da8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 15 Mar 2022 00:01:33 +0000 Subject: [PATCH 228/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.4 --- package-lock.json | 136 ++++++++++++++++++++++++++++++++++------------ package.json | 2 +- 2 files changed, 102 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index b81b9073..b3313c48 100644 --- a/package-lock.json +++ b/package-lock.json @@ -242,18 +242,18 @@ "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" }, "@babel/runtime": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", - "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.7.tgz", + "integrity": "sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.2.tgz", - "integrity": "sha512-NcKtr2epxfIrNM4VOmPKO46TvDMCBhgi2CrSHaEarrz+Plk2K5r9QemmOFTGpZaoKnWoGH5MO+CzeRsih/Fcgg==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.7.tgz", + "integrity": "sha512-TvliGJjhxis5m7xIMvlXH/xG8Oa/LK0SCUCyfKD6nLi42n5fB4WibDJ0g9trmmBB6hwpMNx+Lzbxy9/4gpMaVw==", "dev": true, "requires": { "core-js-pure": "^3.20.2", @@ -316,16 +316,16 @@ } }, "@eslint/eslintrc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", - "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -362,12 +362,6 @@ "type-fest": "^0.20.2" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -647,15 +641,15 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.3.tgz", - "integrity": "sha512-d2mLAhrmVJBw1FFzahVjPL7JCGn8aYaJiN/2DLcMEA/DzGgXJtEQXw8dlYLC8Esh8OlKWBuMxFtNPvAvN7F9qQ==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.4.tgz", + "integrity": "sha512-fVz9HnNECgqv+FSIgHl93+443M8djAw7U7+XfWS49oVdE8RxzT8Mgm1sYnGC8lzM9T57IogxAvapE2r90hmlTw==", "dev": true, "requires": { "@typescript-eslint/eslint-plugin": "5.14.0", "@typescript-eslint/parser": "5.14.0", "babel-eslint": "10.1.0", - "eslint": "8.10.0", + "eslint": "8.11.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.5.0", "eslint-import-resolver-typescript": "2.5.0", @@ -663,7 +657,7 @@ "eslint-plugin-import": "2.25.4", "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-react": "7.29.3", + "eslint-plugin-react": "7.29.4", "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "4.0.0", "eslint-plugin-taro": "3.3.20", @@ -939,12 +933,84 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.14.0.tgz", - "integrity": "sha512-ke48La1A/TWAn949cdgQiP3oK0NT7ArhDAOVOmNLVjT/uAXlFyrJY8dM4qqxHrATzIp8glg+G2OZjy2lRKBIUA==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.15.0.tgz", + "integrity": "sha512-AJOOaBrVqKYWaYDBtgMi9XVDB3YHXlffto/3A4VQ39VVaNqosSOp/nW09G4N/ej8WlzHQB2jTnSfP5wWsXSQJA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.14.0" + "@typescript-eslint/utils": "5.15.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.15.0.tgz", + "integrity": "sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.15.0", + "@typescript-eslint/visitor-keys": "5.15.0" + } + }, + "@typescript-eslint/types": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.15.0.tgz", + "integrity": "sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.15.0.tgz", + "integrity": "sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.15.0", + "@typescript-eslint/visitor-keys": "5.15.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.15.0.tgz", + "integrity": "sha512-081rWu2IPKOgTOhHUk/QfxuFog8m4wxW43sXNOMSCdh578tGJ1PAaWPsj42LOa7pguh173tNlMigsbrHvh/mtA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.15.0", + "@typescript-eslint/types": "5.15.0", + "@typescript-eslint/typescript-estree": "5.15.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.15.0.tgz", + "integrity": "sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.15.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "@typescript-eslint/parser": { @@ -2656,12 +2722,12 @@ } }, "eslint": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", - "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", + "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.0", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -3071,9 +3137,9 @@ } }, "eslint-plugin-react": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.3.tgz", - "integrity": "sha512-MzW6TuCnDOcta67CkpDyRfRsEVx9FNMDV8wZsDqe1luHPdGTrQIUaUXD27Ja3gHsdOIs/cXzNchWGlqm+qRVRg==", + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz", + "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -7536,9 +7602,9 @@ "dev": true }, "tsconfig-paths": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.13.0.tgz", - "integrity": "sha512-nWuffZppoaYK0vQ1SQmkSsQzJoHA4s6uzdb2waRpD806x9yfq153AdVsWz4je2qZcW+pENrMQXbGQ3sMCkXuhw==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz", + "integrity": "sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==", "dev": true, "requires": { "@types/json5": "^0.0.29", diff --git a/package.json b/package.json index 8a1d1aaf..78e90805 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.3", + "@shm-open/eslint-config-bundle": "1.9.4", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From 763c924ee0a77db170ef307f0726f36da7e5ac0b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 19 Mar 2022 16:50:40 +0000 Subject: [PATCH 229/347] fix(deps): update dependency yargs to v17.4.0 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index b3313c48..86ad687f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8015,9 +8015,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.0.tgz", + "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -8029,9 +8029,9 @@ } }, "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" }, "yargs-unparser": { "version": "2.0.0", diff --git a/package.json b/package.json index 78e90805..19e7e381 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "sequelize": "6.17.0", "slash": "3.0.0", "validator": "13.7.0", - "yargs": "17.3.1", + "yargs": "17.4.0", "yazl": "2.5.1" }, "devDependencies": { From 154af3c526ce000c3678627502c66c54f6bd6883 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 21 Mar 2022 09:56:33 +0000 Subject: [PATCH 230/347] fix(deps): update dependency nodemailer to v6.7.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index b3313c48..5a09f207 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5624,9 +5624,9 @@ } }, "nodemailer": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.2.tgz", - "integrity": "sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q==" + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.3.tgz", + "integrity": "sha512-KUdDsspqx89sD4UUyUKzdlUOper3hRkDVkrKh/89G+d9WKsU5ox51NWS4tB1XR5dPUdR4SP0E3molyEfOvSa3g==" }, "normalize-package-data": { "version": "3.0.3", diff --git a/package.json b/package.json index 78e90805..6de0db74 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "moment": "2.29.1", "mysql2": "2.3.3", "node-fetch": "2.6.7", - "nodemailer": "6.7.2", + "nodemailer": "6.7.3", "pug": "3.0.2", "qiniu": "7.4.0", "rand-token": "1.0.1", From 881284655cd112f4ef212eb1e942145d476c28d3 Mon Sep 17 00:00:00 2001 From: Kieran Brownlees Date: Tue, 22 Mar 2022 12:48:46 +1300 Subject: [PATCH 231/347] chore(docs): add english translation for install by docker (google translate) --- README.cn.md | 2 +- README.md | 14 ++-- docs/install-server-by-docker.cn.md | 117 ++++++++++++++++++++++++++++ docs/install-server-by-docker.md | 108 ++++++++++++------------- 4 files changed, 180 insertions(+), 61 deletions(-) create mode 100644 docs/install-server-by-docker.cn.md diff --git a/README.cn.md b/README.cn.md index f1452d7c..183ec9dc 100644 --- a/README.cn.md +++ b/README.cn.md @@ -39,7 +39,7 @@ ## 如何安装 code-push-server -- [Docker](./docs/install-server-by-docker.md) (推荐) +- [Docker](./docs/install-server-by-docker.cn.md) (推荐) - [直接安装](./docs/install-server.md) ## 默认帐号和密码 diff --git a/README.md b/README.md index f7652722..8d2524b1 100644 --- a/README.md +++ b/README.md @@ -21,13 +21,13 @@ Since the original [code-push-server](https://github.com/lisong/code-push-server - oss: store bundle files in [aliyun](https://www.aliyun.com/product/oss) - tencentcloud: store bundle files in [tencentcloud](https://cloud.tencent.com/product/cos) -## 正确使用 code-push 热更新 +## Correct use of code-push hot update -- 苹果 App 允许使用热更新[Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), 为了不影响用户体验,规定必须使用静默更新。 Google Play 不能使用静默更新,必须弹框告知用户 App 有更新。中国的 android 市场必须采用静默更新(如果弹框提示,App 会被“请上传最新版本的二进制应用包”原因驳回)。 -- react-native 不同平台 bundle 包不一样,在使用 code-push-server 的时候必须创建不同的应用来区分(eg. CodePushDemo-ios 和 CodePushDemo-android) -- react-native-code-push 只更新资源文件,不会更新 java 和 Objective C,所以 npm 升级依赖包版本的时候,如果依赖包使用的本地化实现, 这时候必须更改应用版本号(ios 修改 Info.plist 中的 CFBundleShortVersionString, android 修改 build.gradle 中的 versionName), 然后重新编译 app 发布到应用商店。 -- 推荐使用 code-push release-react 命令发布应用,该命令合并了打包和发布命令(eg. code-push release-react CodePushDemo-ios ios -d Production) -- 每次向 App Store 提交新的版本时,也应该基于该提交版本同时向 code-push-server 发布一个初始版本。(因为后面每次向 code-push-server 发布版本时,code-puse-server 都会和初始版本比较,生成补丁版本) +- Apple App allows the use of hot updates [Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), in order not to affect the user experience, it is stipulated that silent updates must be used. Google Play cannot use silent updates, and a pop-up box must inform users that there is an update to the app. China's android market must use silent updates (if the pop-up box prompts, the app will be rejected by the reason of "please upload the latest version of the binary application package"). +- The bundles of react-native are different for different platforms. When using code-push-server, you must create different applications to distinguish them (eg. CodePushDemo-ios and CodePushDemo-android) +- react-native-code-push only updates resource files, not java and Objective C, so when npm upgrades the version of the dependent package, if the localized implementation used by the dependent package, the application version number must be changed at this time (ios modify Info CFBundleShortVersionString in .plist, android modify versionName in build.gradle), then recompile the app and publish it to the app store. +- It is recommended to use the code-push release-react command to release the application, which combines the packaging and release commands (eg. code-push release-react CodePushDemo-ios ios -d Production) +- Every time a new version is submitted to the App Store, an initial version should also be released to code-push-server based on the submitted version. (Because every time a version is released to code-push-server, code-puse-server will compare it with the initial version to generate a patch version) ### CodePush Cli @@ -41,7 +41,7 @@ check out the [code-push-cli](https://github.com/shm-open/code-push-cli) which w ## How To Install code-push-server -- [docker](./docs/install-server-by-docker.md) (recommended) +- [docker](./docs/install-server-by-docker.cn.md) (recommended) - [manual operation](./docs/install-server.md) ## Default Account and Password diff --git a/docs/install-server-by-docker.cn.md b/docs/install-server-by-docker.cn.md new file mode 100644 index 00000000..39f04661 --- /dev/null +++ b/docs/install-server-by-docker.cn.md @@ -0,0 +1,117 @@ +# docker 部署 code-push-server + +> 该文档用于描述 docker 部署 code-push-server,实例包含三个部分 + +- code-push-server 部分 + - 更新包默认采用`local`存储(即存储在本地机器上)。使用 docker volume 存储方式,容器销毁不会导致数据丢失,除非人为删除 volume。 + - 内部使用 pm2 cluster 模式管理进程,默认开启进程数为 cpu 数,可以根据自己机器配置设置 docker-compose.yml 文件中 deploy 参数。 + - docker-compose.yml 只提供了应用的一部分参数设置,如需要设置其他配置,可以修改文件 config.js。 +- mysql 部分 + - 数据使用 docker volume 存储方式,容器销毁不会导致数据丢失,除非人为删除 volume。 + - 应用请勿使用 root 用户,为了安全可以创建权限相对较小的权限供 code-push-server 使用,只需要给予`select,update,insert`权限即可。初始化数据库需要使用 root 或有建表权限用户 +- redis 部分 + - `tryLoginTimes` 登录错误次数限制 + - `updateCheckCache` 提升应用性能 + - `rolloutClientUniqueIdCache` 灰度发布 + +## 安装 Docker + +参考 Docker 官方安装教程 + +- [>>mac 点这里](https://docs.docker.com/docker-for-mac/install/) +- [>>windows 点这里](https://docs.docker.com/docker-for-windows/install/) +- [>>linux 点这里](https://docs.docker.com/install/linux/docker-ce/ubuntu/) + +`$ docker info` 能成功输出相关信息,则安装成功,才能继续下面步骤 + +## 获取代码 + +```shell +$ git clone https://github.com/shm-open/code-push-server.git +$ cd code-push-server +``` + +## 修改配置文件 + +```shell +$ vim docker-compose.yml +``` + +_将`DOWNLOAD_URL`中`YOUR_MACHINE_IP`替换成本机外网 ip 或者域名_ + +### jwt.tokenSecret 修改 + +> code-push-server 验证登录验证方式使用的 json web token 加密方式,该对称加密算法是公开的,所以修改 config.js 中 tokenSecret 值很重要。 + +_非常重要!非常重要! 非常重要!_ + +> 可以打开连接`https://www.grc.com/passwords.htm`获取 `63 random alpha-numeric characters`类型的随机生成数作为密钥 + +_将`TOKEN_SECRET`中`YOUR_JWT_TOKEN_SECRET`替换成密钥_ + +## 部署 + +```shell +$ docker-compose up -d +``` + +> 如果网速不佳,需要漫长而耐心的等待。。。去和妹子聊会天吧^\_^ + +## 查看进展 + +```shell +$ docker-compose ps +``` + +## 访问接口简单验证 + +`$ curl -I http://YOUR_CODE_PUSH_SERVER_IP:3000/` + +返回`200 OK` + +```http +HTTP/1.1 200 OK +X-DNS-Prefetch-Control: off +X-Frame-Options: SAMEORIGIN +Strict-Transport-Security: max-age=15552000; includeSubDomains +X-Download-Options: noopen +X-Content-Type-Options: nosniff +X-XSS-Protection: 1; mode=block +Content-Type: text/html; charset=utf-8 +Content-Length: 592 +ETag: W/"250-IiCMcM1ZUFSswSYCU0KeFYFEMO8" +Date: Sat, 25 Aug 2018 15:45:46 GMT +Connection: keep-alive +``` + +## 浏览器登录 + +> 默认用户名:admin 密码:123456 记得要修改默认密码哦 +> 如果登录连续输错密码超过一定次数,会限定无法再登录. 需要清空 redis 缓存 + +```shell +$ docker exec -it code-push-server_redis_1 redis-cli # 进入redis +> flushall +> quit +``` + +## 查看服务日志 + +```shell +$ docker-compose logs server +``` + +## 查看存储 `docker volume ls` + +| DRIVER | VOLUME NAME | 描述 | +| ------ | ----------------------------- | ------------------------------ | +| local | code-push-server_data-mysql | 数据库存储数据目录 | +| local | code-push-server_data-storage | 存储打包文件目录 | +| local | code-push-server_data-tmp | 用于计算更新包差异文件临时目录 | +| local | code-push-server_data-redis | redis 落地数据 | + +## 销毁退出应用 + +```shell +$ docker-compose down +``` diff --git a/docs/install-server-by-docker.md b/docs/install-server-by-docker.md index 39f04661..76fd3514 100644 --- a/docs/install-server-by-docker.md +++ b/docs/install-server-by-docker.md @@ -1,75 +1,77 @@ -# docker 部署 code-push-server +# docker deploy code-push-server -> 该文档用于描述 docker 部署 code-push-server,实例包含三个部分 +[[Chinese version 中文版]](./install-server-by-docker.cn.md) -- code-push-server 部分 - - 更新包默认采用`local`存储(即存储在本地机器上)。使用 docker volume 存储方式,容器销毁不会导致数据丢失,除非人为删除 volume。 - - 内部使用 pm2 cluster 模式管理进程,默认开启进程数为 cpu 数,可以根据自己机器配置设置 docker-compose.yml 文件中 deploy 参数。 - - docker-compose.yml 只提供了应用的一部分参数设置,如需要设置其他配置,可以修改文件 config.js。 -- mysql 部分 - - 数据使用 docker volume 存储方式,容器销毁不会导致数据丢失,除非人为删除 volume。 - - 应用请勿使用 root 用户,为了安全可以创建权限相对较小的权限供 code-push-server 使用,只需要给予`select,update,insert`权限即可。初始化数据库需要使用 root 或有建表权限用户 -- redis 部分 - - `tryLoginTimes` 登录错误次数限制 - - `updateCheckCache` 提升应用性能 - - `rolloutClientUniqueIdCache` 灰度发布 +> This document is used to describe docker deployment code-push-server, the example consists of three parts -## 安装 Docker +- code-push-server section + - Update packages are stored in `local` by default (i.e. stored on the local machine). Using the docker volume storage method, container destruction will not cause data loss unless the volume is manually deleted. + - The pm2 cluster mode is used to manage processes internally. The default number of open processes is the number of cpus. You can set the deploy parameter in the docker-compose.yml file according to your own machine configuration. + - docker-compose.yml only provides some parameter settings of the application. If you need to set other configurations, you can modify the file config.js. +- mysql section + - Data is stored using docker volume, and container destruction will not cause data loss unless the volume is manually deleted. + - Do not use the root user for the application. For security, you can create permissions with relatively small permissions for use by code-push-server. You only need to give `select, update, insert` permissions. To initialize the database, you need to use root or a user with table building privileges +- redis part + - `tryLoginTimes` login error limit + - `updateCheckCache` improves application performance + - `rolloutClientUniqueIdCache` grayscale release -参考 Docker 官方安装教程 +## Install Docker -- [>>mac 点这里](https://docs.docker.com/docker-for-mac/install/) -- [>>windows 点这里](https://docs.docker.com/docker-for-windows/install/) -- [>>linux 点这里](https://docs.docker.com/install/linux/docker-ce/ubuntu/) +Refer to the official Docker installation tutorial -`$ docker info` 能成功输出相关信息,则安装成功,才能继续下面步骤 +- [>>mac click here](https://docs.docker.com/docker-for-mac/install/) +- [>>windows click here](https://docs.docker.com/docker-for-windows/install/) +- [>>linux click here](https://docs.docker.com/install/linux/docker-ce/ubuntu/) -## 获取代码 +`$ docker info` can successfully output relevant information, the installation is successful, and the following steps can be continued + +## get code ```shell $ git clone https://github.com/shm-open/code-push-server.git $ cd code-push-server -``` +```` -## 修改配置文件 +## Modify the configuration file ```shell $ vim docker-compose.yml -``` +```` -_将`DOWNLOAD_URL`中`YOUR_MACHINE_IP`替换成本机外网 ip 或者域名_ +_Replace `YOUR_MACHINE_IP` in `DOWNLOAD_URL` with your own external network ip or domain name_ -### jwt.tokenSecret 修改 +### jwt.tokenSecret modification -> code-push-server 验证登录验证方式使用的 json web token 加密方式,该对称加密算法是公开的,所以修改 config.js 中 tokenSecret 值很重要。 +> code-push-server verifies the json web token encryption method used by the login authentication method. The symmetric encryption algorithm is public, so it is very important to modify the tokenSecret value in config.js. -_非常重要!非常重要! 非常重要!_ +_Very important! Very important! Very important! _ -> 可以打开连接`https://www.grc.com/passwords.htm`获取 `63 random alpha-numeric characters`类型的随机生成数作为密钥 +> You can open the connection `https://www.grc.com/passwords.htm` to obtain a randomly generated number of type `63 random alpha-numeric characters` as the key -_将`TOKEN_SECRET`中`YOUR_JWT_TOKEN_SECRET`替换成密钥_ +_Replace `YOUR_JWT_TOKEN_SECRET` in `TOKEN_SECRET` with the key_ -## 部署 +## deploy ```shell $ docker-compose up -d -``` +```` -> 如果网速不佳,需要漫长而耐心的等待。。。去和妹子聊会天吧^\_^ +> If the internet speed is not good, a long and patient wait is required. . . Let's chat with the girl for a while ^\_^ -## 查看进展 +## View progress ```shell $ docker-compose ps -``` +```` -## 访问接口简单验证 +## Access interface simple verification `$ curl -I http://YOUR_CODE_PUSH_SERVER_IP:3000/` -返回`200 OK` +returns `200 OK` -```http +````http HTTP/1.1 200 OK X-DNS-Prefetch-Control: off X-Frame-Options: SAMEORIGIN @@ -82,35 +84,35 @@ Content-Length: 592 ETag: W/"250-IiCMcM1ZUFSswSYCU0KeFYFEMO8" Date: Sat, 25 Aug 2018 15:45:46 GMT Connection: keep-alive -``` +```` -## 浏览器登录 +## Browser login -> 默认用户名:admin 密码:123456 记得要修改默认密码哦 -> 如果登录连续输错密码超过一定次数,会限定无法再登录. 需要清空 redis 缓存 +> Default username: admin Password: 123456 Remember to change the default password +> If you log in and enter the wrong password for more than a certain number of times, you will no longer be able to log in. You need to clear the redis cache ```shell -$ docker exec -it code-push-server_redis_1 redis-cli # 进入redis +$ docker exec -it code-push-server_redis_1 redis-cli # Enter redis > flushall > quit -``` +```` -## 查看服务日志 +## View service log ```shell $ docker-compose logs server -``` +```` -## 查看存储 `docker volume ls` +## View storage `docker volume ls` -| DRIVER | VOLUME NAME | 描述 | -| ------ | ----------------------------- | ------------------------------ | -| local | code-push-server_data-mysql | 数据库存储数据目录 | -| local | code-push-server_data-storage | 存储打包文件目录 | -| local | code-push-server_data-tmp | 用于计算更新包差异文件临时目录 | -| local | code-push-server_data-redis | redis 落地数据 | +| DRIVER | VOLUME NAME | DESCRIPTION | +| ------ | ----------------------------- | ------------ ------------------ | +| local | code-push-server_data-mysql | database storage data directory | +| local | code-push-server_data-storage | Storage package file directory | +| local | code-push-server_data-tmp | Temporary directory for calculating update package difference files | +| local | code-push-server_data-redis | redis landing data | -## 销毁退出应用 +## destroy exit application ```shell $ docker-compose down From 924205139052a84ae521651dee984c2e47da8d00 Mon Sep 17 00:00:00 2001 From: Kieran Brownlees Date: Tue, 22 Mar 2022 14:09:09 +1300 Subject: [PATCH 232/347] chore(package): make dev:run restart on pug & json changes --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 78e90805..172a34a1 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "scripts": { "dev": "npm run build && concurrently npm:dev:tsc npm:dev:run", "dev:tsc": "tsc --watch", - "dev:run": "LOG_LEVEL=debug supervisor ./bin/www.js", + "dev:run": "LOG_LEVEL=debug supervisor -e 'node|js|ts|pug|json' ./bin/www.js", "start": "node ./bin/www.js", "init": "node ./bin/db.js init", "upgrade": "node ./bin/db.js upgrade", From fe52691387d1e437c0d5184564dae761e1e392d2 Mon Sep 17 00:00:00 2001 From: Kieran Brownlees Date: Tue, 22 Mar 2022 14:09:38 +1300 Subject: [PATCH 233/347] chore(packages): add i18n --- package-lock.json | 105 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 106 insertions(+) diff --git a/package-lock.json b/package-lock.json index b3313c48..9a492025 100644 --- a/package-lock.json +++ b/package-lock.json @@ -524,6 +524,45 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "@messageformat/core": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@messageformat/core/-/core-3.0.1.tgz", + "integrity": "sha512-yxj2+0e46hcZqJfNf0ZYbC2q6WlcGoh4g11mCyRtTueR0AD8F9z4JMYAS1aOiFG8Vl1LZg/h5hZHKmWTAyZq8g==", + "requires": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "@messageformat/date-skeleton": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@messageformat/date-skeleton/-/date-skeleton-1.0.0.tgz", + "integrity": "sha512-vvj5Sd3VyXUHGbYpiFsPsSQ8pkdUM9vrR/NUbyP6ga3UqJH4p9eCwzfwaCAZatZMYMTyiKG/8QbUyGKHeTZ5kw==" + }, + "@messageformat/number-skeleton": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@messageformat/number-skeleton/-/number-skeleton-1.0.0.tgz", + "integrity": "sha512-Pe1HX/VG0q7tclM/ri85I4FKYd7Uc3gluSZbRaK1+jcXdT9Biw2hLAKyMsiz2tM6zLiK1xX+K0NMDO4RIstQig==" + }, + "@messageformat/parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.0.0.tgz", + "integrity": "sha512-WiDKhi8F0zQaFU8cXgqq69eYFarCnTVxKcvhAONufKf0oUxbqLMW6JX6rV4Hqh+BEQWGyKKKHY4g1XA6bCLylA==", + "requires": { + "moo": "^0.5.1" + } + }, + "@messageformat/runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@messageformat/runtime/-/runtime-3.0.1.tgz", + "integrity": "sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg==", + "requires": { + "make-plural": "^7.0.0" + } + }, "@node-redis/bloom": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@node-redis/bloom/-/bloom-1.0.1.tgz", @@ -1629,6 +1668,11 @@ } } }, + "boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3502,6 +3546,14 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fast-printf": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz", + "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==", + "requires": { + "boolean": "^3.1.4" + } + }, "fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", @@ -4271,6 +4323,34 @@ "ms": "^2.0.0" } }, + "i18n": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.14.2.tgz", + "integrity": "sha512-f/6Ns2skl6KrpumZsE0A4TaxiEoJRi3Ovko0O+NuD92Ot2sLICpw6Iy+04ph/4tfF7koAWVYElBJ4oftpyhhxw==", + "requires": { + "@messageformat/core": "^3.0.0", + "debug": "^4.3.3", + "fast-printf": "^1.6.9", + "make-plural": "^7.0.0", + "math-interval-parser": "^2.0.1", + "mustache": "^4.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5094,12 +5174,22 @@ } } }, + "make-plural": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.1.0.tgz", + "integrity": "sha512-PKkwVlAxYVo98NrbclaQIT4F5Oy+X58PZM5r2IwUSCe3syya6PXkIRCn2XCdz7p58Scgpp50PBeHmepXVDG3hg==" + }, "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, + "math-interval-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz", + "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -5500,11 +5590,21 @@ "moment": ">= 2.9.0" } }, + "moo": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", + "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==" + }, "mysql2": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", @@ -6850,6 +6950,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, + "safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", diff --git a/package.json b/package.json index 172a34a1..49ed0da9 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "formidable": "2.0.1", "fs-extra": "10.0.1", "helmet": "5.0.2", + "i18n": "0.14.2", "jsonwebtoken": "8.5.1", "kv-logger": "0.5.3", "lodash": "4.17.21", From 57a6e98df10bfcfc14badd3b4a399815e3c4349a Mon Sep 17 00:00:00 2001 From: Kieran Brownlees Date: Tue, 22 Mar 2022 14:12:19 +1300 Subject: [PATCH 234/347] feat(app): add i18n support --- docker-compose.yml | 1 + docs/install-server.md | 1 + src/app.ts | 18 ++++++++++++++++++ src/core/config.ts | 1 + src/core/i81n.ts | 11 +++++++++++ 5 files changed, 32 insertions(+) create mode 100644 src/core/i81n.ts diff --git a/docker-compose.yml b/docker-compose.yml index d97b720f..06f78f42 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,6 +16,7 @@ services: DATA_DIR: '/data/tmp' NODE_ENV: 'production' REDIS_HOST: 'redis' + LOCALE: 'cn' ports: - '3000:3000' depends_on: diff --git a/docs/install-server.md b/docs/install-server.md index 43a7de13..42e0198b 100644 --- a/docs/install-server.md +++ b/docs/install-server.md @@ -47,6 +47,7 @@ some config items have to be changed: - `local`.`storageDir` change to your directory, make sure have read/write permissions. - `local`.`downloadUrl` replace `127.0.0.1` to your machine ip. +- `local`.`locale` either `cn` or `en`. - `common`.`dataDir` change to your directory,make sure have read/write permissions. - `jwt`.`tokenSecret` get the random string from `https://www.grc.com/passwords.htm`, and replace the value `INSERT_RANDOM_TOKEN_KEY`. - `db` config: `username`,`password`,`host`,`port` change to your own diff --git a/src/app.ts b/src/app.ts index db0818ae..ff1bf361 100644 --- a/src/app.ts +++ b/src/app.ts @@ -7,6 +7,7 @@ import helmet from 'helmet'; import { logger } from 'kv-logger'; import { AppError, NotFound } from './core/app-error'; import { config } from './core/config'; +import { i18n } from "./core/i81n" import { Req, Res, withLogger } from './core/middleware'; import { accessKeysRouter } from './routes/accessKeys'; import { accountRouter } from './routes/account'; @@ -23,10 +24,27 @@ app.use( contentSecurityPolicy: false, }), ); + + + // view engine setup app.set('views', path.join(__dirname, '../views')); app.set('view engine', 'pug'); +// translations + +app.use(i18n.init) + +app.use(function(req, res, next) { + // express helper for natively supported engines + // @ts-ignore + res.locals.__ = res.__ = function() { + return i18n.__.apply(req, arguments); + }; + + next(); +}); + app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); diff --git a/src/core/config.ts b/src/core/config.ts index dacae058..ebc4b33b 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -85,6 +85,7 @@ export const config = { 'http://127.0.0.1:3000/download', // public static download spacename. public: '/download', + locale: process.env.LOCALE || 'cn' }, jwt: { // Recommended: 63 random alpha-numeric characters diff --git a/src/core/i81n.ts b/src/core/i81n.ts new file mode 100644 index 00000000..8aee6450 --- /dev/null +++ b/src/core/i81n.ts @@ -0,0 +1,11 @@ +import { I18n } from 'i18n' +import path from "path" +import { config } from "./config" + +export const i18n = new I18n({ + locales: ['cn', 'en'], + directory: path.join(__dirname, '../../locales'), + defaultLocale: 'cn' +}) + +i18n.setLocale(config.local.locale) From de58a2152633beb143749971ea5dbc4ad6aaf12a Mon Sep 17 00:00:00 2001 From: Kieran Brownlees Date: Tue, 22 Mar 2022 14:12:36 +1300 Subject: [PATCH 235/347] chore(i18n): translate all the pug files from chinese --- locales/cn.json | 1 + locales/en.json | 14 ++++++++++++++ src/routes/index.ts | 3 ++- views/auth/login.pug | 14 +++++++------- views/auth/password.pug | 18 +++++++++--------- views/index.pug | 6 +++--- views/tokens.pug | 4 ++-- 7 files changed, 38 insertions(+), 22 deletions(-) create mode 100644 locales/cn.json create mode 100644 locales/en.json diff --git a/locales/cn.json b/locales/cn.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/locales/cn.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/locales/en.json b/locales/en.json new file mode 100644 index 00000000..67c9e8b6 --- /dev/null +++ b/locales/en.json @@ -0,0 +1,14 @@ +{ + "请登录": "Please sign in", + "邮箱地址": "email address", + "用户名": "username", + "密码": "password", + "记住我": "Remember me", + "登录": "Log in", + "热更新服务器": "hot update server", + "修改密码": "Change Password", + "获取": "Obtain", + "原密码": "old password", + "新密码": "new password", + "请重新登录": "please login again" +} diff --git a/src/routes/index.ts b/src/routes/index.ts index 5fba9d4b..296c4239 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -1,5 +1,6 @@ import express from 'express'; import { AppError } from '../core/app-error'; +import { i18n } from "../core/i81n" import { checkToken, Req } from '../core/middleware'; import { clientManager } from '../core/services/client-manager'; @@ -10,7 +11,7 @@ indexRouter.get('/', (req, res) => { }); indexRouter.get('/tokens', (req, res) => { - res.render('tokens', { title: '获取token' }); + res.render('tokens', { title: `${i18n.__('获取')} token` }); }); indexRouter.get( diff --git a/views/auth/login.pug b/views/auth/login.pug index 57537beb..7f3c1dbd 100644 --- a/views/auth/login.pug +++ b/views/auth/login.pug @@ -5,16 +5,16 @@ block css block content .container form#form.form-signin(method="post") - h2.form-signin-heading 请登录 - label.sr-only(for="inputEmail") 邮箱地址/用户名 - input#inputEmail.form-control(type="text" name="account" placeholder="邮箱地址/用户名" required autofocus) - label.sr-only(for="inputPassword") 密码 - input#inputPassword.form-control(type="password" name="password" placeholder="密码" required) + h2.form-signin-heading #{__('请登录')} + label.sr-only(for="inputEmail") #{__('邮箱地址')}/#{__('用户名')} + input#inputEmail.form-control(type="text" name="account" placeholder=`${__('邮箱地址')}/${__('用户名')}` required autofocus) + label.sr-only(for="inputPassword") #{__('密码')} + input#inputPassword.form-control(type="password" name="password" placeholder=`${__('密码')}` required) .checkbox label input(type="checkbox" value="remember-me") - span 记住我 - a#submitBtn.btn.btn-lg.btn-primary.btn-block 登录 + span #{__('记住我')} + a#submitBtn.btn.btn-lg.btn-primary.btn-block #{__('登录')} block js script(). diff --git a/views/auth/password.pug b/views/auth/password.pug index 47fa302c..a297dd65 100644 --- a/views/auth/password.pug +++ b/views/auth/password.pug @@ -4,22 +4,22 @@ block content .container(style="margin-top:30px;") form#form.col-md-5.col-md-offset-3(method="post") .form-group - label.sr-only(for="inputEmail") 邮箱地址/用户名 - input#inputEmail.form-control(type="text" name="account" placeholder="邮箱地址/用户名" required autofocus) + label.sr-only(for="inputEmail") #{__('邮箱地址')}/#{__('用户名')} + input#inputEmail.form-control(type="text" name="account" placeholder=`${__('邮箱地址')}/${__('用户名')}` required autofocus) .form-group .col-md-10(style="margin-left:-15px;") label.sr-only(for="inputToken") token input#inputToken.form-control(type="text" name="token" placeholder="token" required) .col-md-2 - a.form-control.btn.btn-link(style="margin-bottom:15px;" target="_blank" href="/auth/login") 获取token + a.form-control.btn.btn-link(style="margin-bottom:15px;" target="_blank" href="/auth/login") #{__('获取')} token .form-group - label.sr-only(for="inputPassword") 原密码 - input#inputPassword.form-control(type="password" name="oldPassword" placeholder="原密码" required) + label.sr-only(for="inputPassword") #{__('原密码')} + input#inputPassword.form-control(type="password" name="oldPassword" placeholder=`${__('原密码')}` required) .form-group - label.sr-only(for="inputNewPassword") 新密码 - input#inputNewPassword.form-control(type="password" name="newPassword" placeholder="新密码" required) + label.sr-only(for="inputNewPassword") #{__('新密码')} + input#inputNewPassword.form-control(type="password" name="newPassword" placeholder=`${__('新密码')}` required) .form-group - a#submitBtn.btn.btn-lg.btn-primary.btn-block 修改密码 + a#submitBtn.btn.btn-lg.btn-primary.btn-block #{__('修改密码')} block js script(). @@ -43,7 +43,7 @@ block js dataType: 'json', success: function (data) { if (data.status == "OK") { - alert("修改成功"); + alert(`${__('修改成功')}`); location.href = '/auth/login'; } else if (data.status == 401) { alert('token invalid'); diff --git a/views/index.pug b/views/index.pug index 800da9bd..f637d6d5 100644 --- a/views/index.pug +++ b/views/index.pug @@ -3,9 +3,9 @@ block css link(rel='stylesheet', href='/stylesheets/index.css') block content - .site-notice react naitve 热更新服务器 + .site-notice react native / cordova #{__('热更新服务器')} h1(style="text-align: center;")= title p(style="text-align: center;") Welcome to #{title} .site-notice - a.btn.btn-primary(href="/auth/login" type="button") 登录 - a.btn.btn-primary.col-md-offset-1(href="/auth/password" type="button") 修改密码 \ No newline at end of file + a.btn.btn-primary(href="/auth/login" type="button") #{__('登录')} + a.btn.btn-primary.col-md-offset-1(href="/auth/password" type="button") #{__('修改密码')} diff --git a/views/tokens.pug b/views/tokens.pug index ad770b56..c70c3432 100644 --- a/views/tokens.pug +++ b/views/tokens.pug @@ -5,7 +5,7 @@ block css block content h1(style="text-align: center;")= title .site-notice - a#submitBtn.btn.btn-lg.btn-primary 获取token + a#submitBtn.btn.btn-lg.btn-primary #{__('获取')} token .form-group #tipsSuccess(style="display:none") h2(style="text-align: center;") Authentication succeeded. @@ -68,7 +68,7 @@ block js error: function(XMLHttpRequest, textStatus, errorThrown) { submit = false; if (errorThrown == 'Unauthorized') { - alert('请重新登录!'); + alert(`#{__('请重新登录')}!`); location.href = '/auth/login' }else { alert(errorThrown); From 409dfe6e0f867c3ec286380b476de3992de0821f Mon Sep 17 00:00:00 2001 From: Kieran Brownlees Date: Tue, 22 Mar 2022 14:18:14 +1300 Subject: [PATCH 236/347] chore(pr): update the install by docker link for the english readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8d2524b1..c3f3d692 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ check out the [code-push-cli](https://github.com/shm-open/code-push-cli) which w ## How To Install code-push-server -- [docker](./docs/install-server-by-docker.cn.md) (recommended) +- [docker](./docs/install-server-by-docker.md) (recommended) - [manual operation](./docs/install-server.md) ## Default Account and Password From a882de56212565fe422db04329e4ede674144248 Mon Sep 17 00:00:00 2001 From: Kieran Brownlees Date: Tue, 22 Mar 2022 16:53:54 +1300 Subject: [PATCH 237/347] chore(pr): update cn.json from build --- locales/cn.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/locales/cn.json b/locales/cn.json index 9e26dfee..8c5d45df 100644 --- a/locales/cn.json +++ b/locales/cn.json @@ -1 +1,12 @@ -{} \ No newline at end of file +{ + "请登录": "请登录", + "邮箱地址": "邮箱地址", + "用户名": "用户名", + "密码": "密码", + "记住我": "记住我", + "登录": "登录", + "热更新服务器": "热更新服务器", + "修改密码": "修改密码", + "获取": "获取", + "请重新登录": "请重新登录" +} \ No newline at end of file From b8cfa7170387da4e2678452169b0351962d8ee83 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Mar 2022 04:09:21 +0000 Subject: [PATCH 238/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.5 --- package-lock.json | 272 ++++++++++++++++++---------------------------- package.json | 2 +- 2 files changed, 105 insertions(+), 169 deletions(-) diff --git a/package-lock.json b/package-lock.json index b3313c48..9fa4544c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -242,18 +242,18 @@ "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" }, "@babel/runtime": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.7.tgz", - "integrity": "sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", + "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.7.tgz", - "integrity": "sha512-TvliGJjhxis5m7xIMvlXH/xG8Oa/LK0SCUCyfKD6nLi42n5fB4WibDJ0g9trmmBB6hwpMNx+Lzbxy9/4gpMaVw==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.8.tgz", + "integrity": "sha512-ZbYSUvoSF6dXZmMl/CYTMOvzIFnbGfv4W3SEHYgMvNsFTeLaF2gkGAF4K2ddmtSK4Emej+0aYcnSC6N5dPCXUQ==", "dev": true, "requires": { "core-js-pure": "^3.20.2", @@ -345,18 +345,18 @@ } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -388,9 +388,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -641,13 +641,13 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.4.tgz", - "integrity": "sha512-fVz9HnNECgqv+FSIgHl93+443M8djAw7U7+XfWS49oVdE8RxzT8Mgm1sYnGC8lzM9T57IogxAvapE2r90hmlTw==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.5.tgz", + "integrity": "sha512-ChDKGkhp4ZakAIkQ/SuBKqgrYbJmh7u7OP2KavRX0VmwfEPkPIvs5ngFbHnWSpRuM7l/pWw81PLx1rGahz1SrA==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.14.0", - "@typescript-eslint/parser": "5.14.0", + "@typescript-eslint/eslint-plugin": "5.16.0", + "@typescript-eslint/parser": "5.16.0", "babel-eslint": "10.1.0", "eslint": "8.11.0", "eslint-config-airbnb-base": "15.0.0", @@ -661,7 +661,7 @@ "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "4.0.0", "eslint-plugin-taro": "3.3.20", - "prettier": "2.5.1" + "prettier": "2.6.0" } }, "@tootallnate/once": { @@ -753,9 +753,9 @@ } }, "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz", + "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==", "dev": true }, "@types/json5": { @@ -899,14 +899,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.14.0.tgz", - "integrity": "sha512-ir0wYI4FfFUDfLcuwKzIH7sMVA+db7WYen47iRSaCGl+HMAZI9fpBwfDo45ZALD3A45ZGyHWDNLhbg8tZrMX4w==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz", + "integrity": "sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.14.0", - "@typescript-eslint/type-utils": "5.14.0", - "@typescript-eslint/utils": "5.14.0", + "@typescript-eslint/scope-manager": "5.16.0", + "@typescript-eslint/type-utils": "5.16.0", + "@typescript-eslint/utils": "5.16.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -916,9 +916,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -933,102 +933,30 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.15.0.tgz", - "integrity": "sha512-AJOOaBrVqKYWaYDBtgMi9XVDB3YHXlffto/3A4VQ39VVaNqosSOp/nW09G4N/ej8WlzHQB2jTnSfP5wWsXSQJA==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.16.0.tgz", + "integrity": "sha512-bitZtqO13XX64/UOQKoDbVg2H4VHzbHnWWlTRc7ofq7SuQyPCwEycF1Zmn5ZAMTJZ3p5uMS7xJGUdOtZK7LrNw==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.15.0" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.15.0.tgz", - "integrity": "sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/visitor-keys": "5.15.0" - } - }, - "@typescript-eslint/types": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.15.0.tgz", - "integrity": "sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.15.0.tgz", - "integrity": "sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/visitor-keys": "5.15.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.15.0.tgz", - "integrity": "sha512-081rWu2IPKOgTOhHUk/QfxuFog8m4wxW43sXNOMSCdh578tGJ1PAaWPsj42LOa7pguh173tNlMigsbrHvh/mtA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.15.0", - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/typescript-estree": "5.15.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.15.0.tgz", - "integrity": "sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.15.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "@typescript-eslint/utils": "5.16.0" } }, "@typescript-eslint/parser": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.14.0.tgz", - "integrity": "sha512-aHJN8/FuIy1Zvqk4U/gcO/fxeMKyoSv/rS46UXMXOJKVsLQ+iYPuXNbpbH7cBLcpSbmyyFbwrniLx5+kutu1pw==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.16.0.tgz", + "integrity": "sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.14.0", - "@typescript-eslint/types": "5.14.0", - "@typescript-eslint/typescript-estree": "5.14.0", + "@typescript-eslint/scope-manager": "5.16.0", + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/typescript-estree": "5.16.0", "debug": "^4.3.2" }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -1043,30 +971,30 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.14.0.tgz", - "integrity": "sha512-LazdcMlGnv+xUc5R4qIlqH0OWARyl2kaP8pVCS39qSL3Pd1F7mI10DbdXeARcE62sVQE4fHNvEqMWsypWO+yEw==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.16.0.tgz", + "integrity": "sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.14.0", - "@typescript-eslint/visitor-keys": "5.14.0" + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/visitor-keys": "5.16.0" } }, "@typescript-eslint/type-utils": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.14.0.tgz", - "integrity": "sha512-d4PTJxsqaUpv8iERTDSQBKUCV7Q5yyXjqXUl3XF7Sd9ogNLuKLkxz82qxokqQ4jXdTPZudWpmNtr/JjbbvUixw==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz", + "integrity": "sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.14.0", + "@typescript-eslint/utils": "5.16.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -1081,19 +1009,19 @@ } }, "@typescript-eslint/types": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.14.0.tgz", - "integrity": "sha512-BR6Y9eE9360LNnW3eEUqAg6HxS9Q35kSIs4rp4vNHRdfg0s+/PgHgskvu5DFTM7G5VKAVjuyaN476LCPrdA7Mw==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.16.0.tgz", + "integrity": "sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.14.0.tgz", - "integrity": "sha512-QGnxvROrCVtLQ1724GLTHBTR0lZVu13izOp9njRvMkCBgWX26PKvmMP8k82nmXBRD3DQcFFq2oj3cKDwr0FaUA==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.16.0.tgz", + "integrity": "sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.14.0", - "@typescript-eslint/visitor-keys": "5.14.0", + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/visitor-keys": "5.16.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1102,9 +1030,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -1119,26 +1047,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.14.0.tgz", - "integrity": "sha512-EHwlII5mvUA0UsKYnVzySb/5EE/t03duUTweVy8Zqt3UQXBrpEVY144OTceFKaOe4xQXZJrkptCf7PjEBeGK4w==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.16.0.tgz", + "integrity": "sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.14.0", - "@typescript-eslint/types": "5.14.0", - "@typescript-eslint/typescript-estree": "5.14.0", + "@typescript-eslint/scope-manager": "5.16.0", + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/typescript-estree": "5.16.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.14.0.tgz", - "integrity": "sha512-yL0XxfzR94UEkjBqyymMLgCBdojzEuy/eim7N9/RIcTNxpJudAcqsU8eRyfzBbcEzGoPWfdM3AGak3cN08WOIw==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.16.0.tgz", + "integrity": "sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==", "dev": true, "requires": { - "@typescript-eslint/types": "5.14.0", + "@typescript-eslint/types": "5.16.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -2787,9 +2715,9 @@ } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -2827,9 +2755,9 @@ } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -2970,9 +2898,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -6183,9 +6111,9 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", "dev": true }, "prettier-linter-helpers": { @@ -7316,19 +7244,27 @@ } }, "string.prototype.matchall": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", - "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", + "regexp.prototype.flags": "^1.4.1", "side-channel": "^1.0.4" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + } } }, "string.prototype.trimend": { diff --git a/package.json b/package.json index 78e90805..89d67ea8 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.4", + "@shm-open/eslint-config-bundle": "1.9.5", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From 381f51a6bc6b5a85945bf2caac1b48e4b875c189 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Mar 2022 19:43:32 +0000 Subject: [PATCH 239/347] fix(deps): update dependency aws-sdk to v2.1098.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9fa4544c..81cb387c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1387,9 +1387,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.1089.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1089.0.tgz", - "integrity": "sha512-QhawXCxhOLR+SJHuKXNzyx1hd+oA1HqaDRjbeTKUrz7g2KF4EyPWvLwzf1fNaOTPK3Vp3JDYijusdKlfV69efw==", + "version": "2.1098.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1098.0.tgz", + "integrity": "sha512-h81SAgqAxij1db9zbFAXEneaC1LNcx/xIIf13tF/IutdYOzd7mQ3lHFCgjp+fB1Msl8z73Vs0VGstyrhK7+zPw==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index 89d67ea8..09b28843 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1089.0", + "aws-sdk": "2.1098.0", "bcryptjs": "2.4.3", "body-parser": "1.19.2", "cookie-parser": "1.4.6", From ccb57ad29e65604e3bbce690f699abfffe1f361f Mon Sep 17 00:00:00 2001 From: Kieran Brownlees Date: Wed, 23 Mar 2022 10:06:21 +1300 Subject: [PATCH 240/347] chore(pr): address pr comments --- docker-compose.yml | 1 - docs/install-server.md | 1 - src/app.ts | 13 +------------ src/core/config.ts | 1 - src/core/{i81n.ts => i18n.ts} | 7 ++----- src/routes/index.ts | 2 +- 6 files changed, 4 insertions(+), 21 deletions(-) rename src/core/{i81n.ts => i18n.ts} (53%) diff --git a/docker-compose.yml b/docker-compose.yml index 06f78f42..d97b720f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,7 +16,6 @@ services: DATA_DIR: '/data/tmp' NODE_ENV: 'production' REDIS_HOST: 'redis' - LOCALE: 'cn' ports: - '3000:3000' depends_on: diff --git a/docs/install-server.md b/docs/install-server.md index 42e0198b..43a7de13 100644 --- a/docs/install-server.md +++ b/docs/install-server.md @@ -47,7 +47,6 @@ some config items have to be changed: - `local`.`storageDir` change to your directory, make sure have read/write permissions. - `local`.`downloadUrl` replace `127.0.0.1` to your machine ip. -- `local`.`locale` either `cn` or `en`. - `common`.`dataDir` change to your directory,make sure have read/write permissions. - `jwt`.`tokenSecret` get the random string from `https://www.grc.com/passwords.htm`, and replace the value `INSERT_RANDOM_TOKEN_KEY`. - `db` config: `username`,`password`,`host`,`port` change to your own diff --git a/src/app.ts b/src/app.ts index ff1bf361..49a1a7c1 100644 --- a/src/app.ts +++ b/src/app.ts @@ -7,7 +7,7 @@ import helmet from 'helmet'; import { logger } from 'kv-logger'; import { AppError, NotFound } from './core/app-error'; import { config } from './core/config'; -import { i18n } from "./core/i81n" +import { i18n } from "./core/i18n" import { Req, Res, withLogger } from './core/middleware'; import { accessKeysRouter } from './routes/accessKeys'; import { accountRouter } from './routes/account'; @@ -32,19 +32,8 @@ app.set('views', path.join(__dirname, '../views')); app.set('view engine', 'pug'); // translations - app.use(i18n.init) -app.use(function(req, res, next) { - // express helper for natively supported engines - // @ts-ignore - res.locals.__ = res.__ = function() { - return i18n.__.apply(req, arguments); - }; - - next(); -}); - app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); diff --git a/src/core/config.ts b/src/core/config.ts index ebc4b33b..dacae058 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -85,7 +85,6 @@ export const config = { 'http://127.0.0.1:3000/download', // public static download spacename. public: '/download', - locale: process.env.LOCALE || 'cn' }, jwt: { // Recommended: 63 random alpha-numeric characters diff --git a/src/core/i81n.ts b/src/core/i18n.ts similarity index 53% rename from src/core/i81n.ts rename to src/core/i18n.ts index 8aee6450..5c6372da 100644 --- a/src/core/i81n.ts +++ b/src/core/i18n.ts @@ -1,11 +1,8 @@ import { I18n } from 'i18n' import path from "path" -import { config } from "./config" export const i18n = new I18n({ - locales: ['cn', 'en'], + locales: ['en', 'cn'], directory: path.join(__dirname, '../../locales'), - defaultLocale: 'cn' + defaultLocale: 'en' }) - -i18n.setLocale(config.local.locale) diff --git a/src/routes/index.ts b/src/routes/index.ts index 296c4239..27180a81 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -1,6 +1,6 @@ import express from 'express'; import { AppError } from '../core/app-error'; -import { i18n } from "../core/i81n" +import { i18n } from "../core/i18n" import { checkToken, Req } from '../core/middleware'; import { clientManager } from '../core/services/client-manager'; From d0b696e747c354e7650b0cbfd66d5320a60a4067 Mon Sep 17 00:00:00 2001 From: Kieran Brownlees Date: Wed, 23 Mar 2022 10:18:07 +1300 Subject: [PATCH 241/347] chore(i18n): change to using english keys for the translations --- locales/cn.json | 24 +++++++++++++----------- locales/en.json | 24 ++++++++++++------------ src/routes/index.ts | 2 +- views/auth/login.pug | 14 +++++++------- views/auth/password.pug | 16 ++++++++-------- views/index.pug | 6 +++--- views/tokens.pug | 4 ++-- 7 files changed, 46 insertions(+), 44 deletions(-) diff --git a/locales/cn.json b/locales/cn.json index 8c5d45df..ef7375e4 100644 --- a/locales/cn.json +++ b/locales/cn.json @@ -1,12 +1,14 @@ { - "请登录": "请登录", - "邮箱地址": "邮箱地址", - "用户名": "用户名", - "密码": "密码", - "记住我": "记住我", - "登录": "登录", - "热更新服务器": "热更新服务器", - "修改密码": "修改密码", - "获取": "获取", - "请重新登录": "请重新登录" -} \ No newline at end of file + "Please sign in": "请登录", + "email address": "邮箱地址", + "username": "用户名", + "password": "密码", + "Remember me": "记住我", + "Log in": "登录", + "hot update server": "热更新服务器", + "Change Password": "修改密码", + "Obtain": "获取", + "old password": "原密码", + "new password": "新密码", + "please login again": "请重新登录" +} diff --git a/locales/en.json b/locales/en.json index 67c9e8b6..c3e73438 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1,14 +1,14 @@ { - "请登录": "Please sign in", - "邮箱地址": "email address", - "用户名": "username", - "密码": "password", - "记住我": "Remember me", - "登录": "Log in", - "热更新服务器": "hot update server", - "修改密码": "Change Password", - "获取": "Obtain", - "原密码": "old password", - "新密码": "new password", - "请重新登录": "please login again" + "Please sign in": "Please sign in", + "email address": "email address", + "username": "username", + "password": "password", + "Remember me": "Remember me", + "Log in": "Log in", + "hot update server": "hot update server", + "Change Password": "Change Password", + "Obtain": "Obtain", + "old password": "old password", + "new password": "new password", + "please login again": "please login again" } diff --git a/src/routes/index.ts b/src/routes/index.ts index 27180a81..b74c7517 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -11,7 +11,7 @@ indexRouter.get('/', (req, res) => { }); indexRouter.get('/tokens', (req, res) => { - res.render('tokens', { title: `${i18n.__('获取')} token` }); + res.render('tokens', { title: `${i18n.__('Obtain')} token` }); }); indexRouter.get( diff --git a/views/auth/login.pug b/views/auth/login.pug index 7f3c1dbd..7688413c 100644 --- a/views/auth/login.pug +++ b/views/auth/login.pug @@ -5,16 +5,16 @@ block css block content .container form#form.form-signin(method="post") - h2.form-signin-heading #{__('请登录')} - label.sr-only(for="inputEmail") #{__('邮箱地址')}/#{__('用户名')} - input#inputEmail.form-control(type="text" name="account" placeholder=`${__('邮箱地址')}/${__('用户名')}` required autofocus) - label.sr-only(for="inputPassword") #{__('密码')} - input#inputPassword.form-control(type="password" name="password" placeholder=`${__('密码')}` required) + h2.form-signin-heading #{__('Please sign in')} + label.sr-only(for="inputEmail") #{__('email address')}/#{__('username')} + input#inputEmail.form-control(type="text" name="account" placeholder=`${__('email address')}/${__('username')}` required autofocus) + label.sr-only(for="inputPassword") #{__('password')} + input#inputPassword.form-control(type="password" name="password" placeholder=`${__('password')}` required) .checkbox label input(type="checkbox" value="remember-me") - span #{__('记住我')} - a#submitBtn.btn.btn-lg.btn-primary.btn-block #{__('登录')} + span #{__('Remember me')} + a#submitBtn.btn.btn-lg.btn-primary.btn-block #{__('Log in')} block js script(). diff --git a/views/auth/password.pug b/views/auth/password.pug index a297dd65..8b5fe165 100644 --- a/views/auth/password.pug +++ b/views/auth/password.pug @@ -4,22 +4,22 @@ block content .container(style="margin-top:30px;") form#form.col-md-5.col-md-offset-3(method="post") .form-group - label.sr-only(for="inputEmail") #{__('邮箱地址')}/#{__('用户名')} - input#inputEmail.form-control(type="text" name="account" placeholder=`${__('邮箱地址')}/${__('用户名')}` required autofocus) + label.sr-only(for="inputEmail") #{__('email address')}/#{__('username')} + input#inputEmail.form-control(type="text" name="account" placeholder=`${__('email address')}/${__('username')}` required autofocus) .form-group .col-md-10(style="margin-left:-15px;") label.sr-only(for="inputToken") token input#inputToken.form-control(type="text" name="token" placeholder="token" required) .col-md-2 - a.form-control.btn.btn-link(style="margin-bottom:15px;" target="_blank" href="/auth/login") #{__('获取')} token + a.form-control.btn.btn-link(style="margin-bottom:15px;" target="_blank" href="/auth/login") #{__('Obtain')} token .form-group - label.sr-only(for="inputPassword") #{__('原密码')} - input#inputPassword.form-control(type="password" name="oldPassword" placeholder=`${__('原密码')}` required) + label.sr-only(for="inputPassword") #{__('old password')} + input#inputPassword.form-control(type="password" name="oldPassword" placeholder=`${__('old password')}` required) .form-group - label.sr-only(for="inputNewPassword") #{__('新密码')} - input#inputNewPassword.form-control(type="password" name="newPassword" placeholder=`${__('新密码')}` required) + label.sr-only(for="inputNewPassword") #{__('new password')} + input#inputNewPassword.form-control(type="password" name="newPassword" placeholder=`${__('new password')}` required) .form-group - a#submitBtn.btn.btn-lg.btn-primary.btn-block #{__('修改密码')} + a#submitBtn.btn.btn-lg.btn-primary.btn-block #{__('Change Password')} block js script(). diff --git a/views/index.pug b/views/index.pug index f637d6d5..094f665e 100644 --- a/views/index.pug +++ b/views/index.pug @@ -3,9 +3,9 @@ block css link(rel='stylesheet', href='/stylesheets/index.css') block content - .site-notice react native / cordova #{__('热更新服务器')} + .site-notice react native / cordova #{__('hot update server')} h1(style="text-align: center;")= title p(style="text-align: center;") Welcome to #{title} .site-notice - a.btn.btn-primary(href="/auth/login" type="button") #{__('登录')} - a.btn.btn-primary.col-md-offset-1(href="/auth/password" type="button") #{__('修改密码')} + a.btn.btn-primary(href="/auth/login" type="button") #{__('Log in')} + a.btn.btn-primary.col-md-offset-1(href="/auth/password" type="button") #{__('Change Password')} diff --git a/views/tokens.pug b/views/tokens.pug index c70c3432..7902bbc2 100644 --- a/views/tokens.pug +++ b/views/tokens.pug @@ -5,7 +5,7 @@ block css block content h1(style="text-align: center;")= title .site-notice - a#submitBtn.btn.btn-lg.btn-primary #{__('获取')} token + a#submitBtn.btn.btn-lg.btn-primary #{__('Obtain')} token .form-group #tipsSuccess(style="display:none") h2(style="text-align: center;") Authentication succeeded. @@ -68,7 +68,7 @@ block js error: function(XMLHttpRequest, textStatus, errorThrown) { submit = false; if (errorThrown == 'Unauthorized') { - alert(`#{__('请重新登录')}!`); + alert(`#{__('please login again')}!`); location.href = '/auth/login' }else { alert(errorThrown); From 5a8956741c4cad60859f3b00ae077d230449e449 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 23 Mar 2022 09:53:26 +0800 Subject: [PATCH 242/347] refactor: eslint --fix --- src/app.ts | 6 ++---- src/core/i18n.ts | 8 ++++---- src/routes/index.ts | 3 ++- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/app.ts b/src/app.ts index 49a1a7c1..4a5e8d4c 100644 --- a/src/app.ts +++ b/src/app.ts @@ -7,7 +7,7 @@ import helmet from 'helmet'; import { logger } from 'kv-logger'; import { AppError, NotFound } from './core/app-error'; import { config } from './core/config'; -import { i18n } from "./core/i18n" +import { i18n } from './core/i18n'; import { Req, Res, withLogger } from './core/middleware'; import { accessKeysRouter } from './routes/accessKeys'; import { accountRouter } from './routes/account'; @@ -25,14 +25,12 @@ app.use( }), ); - - // view engine setup app.set('views', path.join(__dirname, '../views')); app.set('view engine', 'pug'); // translations -app.use(i18n.init) +app.use(i18n.init); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); diff --git a/src/core/i18n.ts b/src/core/i18n.ts index 5c6372da..25f368d2 100644 --- a/src/core/i18n.ts +++ b/src/core/i18n.ts @@ -1,8 +1,8 @@ -import { I18n } from 'i18n' -import path from "path" +import path from 'path'; +import { I18n } from 'i18n'; export const i18n = new I18n({ locales: ['en', 'cn'], directory: path.join(__dirname, '../../locales'), - defaultLocale: 'en' -}) + defaultLocale: 'en', +}); diff --git a/src/routes/index.ts b/src/routes/index.ts index b74c7517..03315b48 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -1,6 +1,6 @@ import express from 'express'; import { AppError } from '../core/app-error'; -import { i18n } from "../core/i18n" +import { i18n } from '../core/i18n'; import { checkToken, Req } from '../core/middleware'; import { clientManager } from '../core/services/client-manager'; @@ -11,6 +11,7 @@ indexRouter.get('/', (req, res) => { }); indexRouter.get('/tokens', (req, res) => { + // eslint-disable-next-line no-underscore-dangle res.render('tokens', { title: `${i18n.__('Obtain')} token` }); }); From c93a4acdf14bd2bd4a4c7524c053321676ac4715 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 23 Mar 2022 09:54:26 +0800 Subject: [PATCH 243/347] chore: pass VERSION as env var to docker build --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6fca7254..90e1c0dd 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ coverage: release-docker: @echo "\nBuilding docker image..." docker pull node:lts-alpine - docker build -t shmopen/code-push-server:latest --no-cache . + VERSION=${VERSION} docker build -t shmopen/code-push-server:latest --no-cache . docker tag shmopen/code-push-server:latest shmopen/code-push-server:${VERSION} docker push shmopen/code-push-server:${VERSION} docker push shmopen/code-push-server:latest From 0619e4ec399714095f9b30a136b1808c7642a04e Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 23 Mar 2022 11:27:23 +0800 Subject: [PATCH 244/347] chore: use build-arg VERSION for docker build --- Dockerfile | 4 +++- Makefile | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9fc101db..8a4a1eb4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM node:lts-alpine +ARG VERSION latest + RUN npm install -g @shm-open/code-push-server@${VERSION} pm2@latest --no-optional RUN mkdir /data/ @@ -10,4 +12,4 @@ COPY ./process.json /data/process.json # CMD ["pm2-runtime", "/data/process.json"] # workaround for issue https://github.com/Unitech/pm2/issues/4950 - CMD ["sh", "-c", "pm2 ps && pm2-runtime /data/process.json"] \ No newline at end of file + CMD ["sh", "-c", "pm2 ps && pm2-runtime /data/process.json"] diff --git a/Makefile b/Makefile index 90e1c0dd..8ccfe406 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ coverage: release-docker: @echo "\nBuilding docker image..." docker pull node:lts-alpine - VERSION=${VERSION} docker build -t shmopen/code-push-server:latest --no-cache . + docker build --build-arg VERSION=${VERSION} -t shmopen/code-push-server:latest --no-cache . docker tag shmopen/code-push-server:latest shmopen/code-push-server:${VERSION} docker push shmopen/code-push-server:${VERSION} docker push shmopen/code-push-server:latest From 86e506e41df0695a15575fc01d07b9f5d2b88e05 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 23 Mar 2022 11:28:24 +0800 Subject: [PATCH 245/347] chore(release): 2.1.0 --- CHANGELOG.md | 14 ++++++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19c7703d..7d44696f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.1.0](https://github.com/shm-open/code-push-server/compare/v2.0.3...v2.1.0) (2022-03-23) + + +### Features + +* **app:** add i18n support ([57a6e98](https://github.com/shm-open/code-push-server/commit/57a6e98df10bfcfc14badd3b4a399815e3c4349a)) + + +### Bug Fixes + +* **deps:** update dependency aws-sdk to v2.1098.0 ([381f51a](https://github.com/shm-open/code-push-server/commit/381f51a6bc6b5a85945bf2caac1b48e4b875c189)) +* **deps:** update dependency nodemailer to v6.7.3 ([154af3c](https://github.com/shm-open/code-push-server/commit/154af3c526ce000c3678627502c66c54f6bd6883)) +* **deps:** update dependency yargs to v17.4.0 ([763c924](https://github.com/shm-open/code-push-server/commit/763c924ee0a77db170ef307f0726f36da7e5ac0b)) + ### [2.0.3](https://github.com/shm-open/code-push-server/compare/v2.0.2...v2.0.3) (2022-03-09) diff --git a/package-lock.json b/package-lock.json index 5a45cce9..a0155a87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "2.0.3", + "version": "2.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 80ac3d5c..975e5e84 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "2.0.3", + "version": "2.1.0", "license": "MIT", "repository": { "type": "git", From afaf448af7c07fff92eae717923547882877c10b Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 23 Mar 2022 14:00:57 +0800 Subject: [PATCH 246/347] chore: add @types/i18n --- package-lock.json | 6 ++++++ package.json | 1 + 2 files changed, 7 insertions(+) diff --git a/package-lock.json b/package-lock.json index a0155a87..e758051d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -791,6 +791,12 @@ "@types/node": "*" } }, + "@types/i18n": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@types/i18n/-/i18n-0.13.2.tgz", + "integrity": "sha512-FdzABEs0NNi99xN+FgWAAeCenaNo+5jolCxr2RhQrySinNPH8rkgjbw6OMGW9+HSgnGeuI7C6y2lC83m6JN3bg==", + "dev": true + }, "@types/json-schema": { "version": "7.0.10", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz", diff --git a/package.json b/package.json index 975e5e84..43018596 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,7 @@ "@types/cookie-parser": "1.4.2", "@types/formidable": "2.0.4", "@types/fs-extra": "9.0.13", + "@types/i18n": "0.13.2", "@types/jsonwebtoken": "8.5.8", "@types/lodash": "4.14.180", "@types/node-fetch": "2.6.1", From 6a55bc57f0b28d9b0000a886dc302e6772719ea0 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 23 Mar 2022 15:01:22 +0800 Subject: [PATCH 247/347] fix: zh locale support --- .eslintrc.js | 19 +++++++++++++++++++ locales/{cn.json => zh.json} | 0 package.json | 1 + src/core/i18n.ts | 5 +++-- 4 files changed, 23 insertions(+), 2 deletions(-) rename locales/{cn.json => zh.json} (100%) diff --git a/.eslintrc.js b/.eslintrc.js index cb6aa1e2..fbc6dc7f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -8,6 +8,25 @@ module.exports = { format: ['camelCase', 'PascalCase', 'UPPER_CASE', 'snake_case'], leadingUnderscore: 'allowSingleOrDouble', }, + { + selector: 'variable', + modifiers: ['destructured'], + format: null, + }, + { + selector: [ + 'classProperty', + 'objectLiteralProperty', + 'typeProperty', + 'classMethod', + 'objectLiteralMethod', + 'typeMethod', + 'accessor', + 'enumMember', + ], + modifiers: ['requiresQuotes'], + format: null, + }, { selector: 'enum', format: ['PascalCase'], diff --git a/locales/cn.json b/locales/zh.json similarity index 100% rename from locales/cn.json rename to locales/zh.json diff --git a/package.json b/package.json index 43018596..01af7432 100644 --- a/package.json +++ b/package.json @@ -96,6 +96,7 @@ "files": [ "bin", "docs", + "locales", "public", "sql", "views", diff --git a/src/core/i18n.ts b/src/core/i18n.ts index 25f368d2..1708b8c2 100644 --- a/src/core/i18n.ts +++ b/src/core/i18n.ts @@ -1,8 +1,9 @@ import path from 'path'; import { I18n } from 'i18n'; -export const i18n = new I18n({ - locales: ['en', 'cn'], +export const i18n = new I18n(); + +i18n.configure({ directory: path.join(__dirname, '../../locales'), defaultLocale: 'en', }); From 70ceab3d62ffe74230ef34423e29b9aef049b8c8 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Wed, 23 Mar 2022 15:03:11 +0800 Subject: [PATCH 248/347] chore(release): 2.1.1 --- CHANGELOG.md | 7 +++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d44696f..5c4d3ee8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.1.1](https://github.com/shm-open/code-push-server/compare/v2.1.0...v2.1.1) (2022-03-23) + + +### Bug Fixes + +* zh locale support ([6a55bc5](https://github.com/shm-open/code-push-server/commit/6a55bc57f0b28d9b0000a886dc302e6772719ea0)) + ## [2.1.0](https://github.com/shm-open/code-push-server/compare/v2.0.3...v2.1.0) (2022-03-23) diff --git a/package-lock.json b/package-lock.json index e758051d..a24eb980 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "2.1.0", + "version": "2.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 01af7432..71198a80 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT", "repository": { "type": "git", From 21c987ad1e9e72a888965f42cb808294c4701477 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 24 Mar 2022 16:12:10 +0800 Subject: [PATCH 249/347] fix: change password success prompts localized message --- locales/en.json | 25 +++++++++++++------------ locales/zh.json | 21 +++++++++++---------- views/auth/password.pug | 2 +- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/locales/en.json b/locales/en.json index c3e73438..0b4d6152 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1,14 +1,15 @@ { - "Please sign in": "Please sign in", - "email address": "email address", - "username": "username", - "password": "password", - "Remember me": "Remember me", - "Log in": "Log in", - "hot update server": "hot update server", - "Change Password": "Change Password", - "Obtain": "Obtain", - "old password": "old password", - "new password": "new password", - "please login again": "please login again" + "Please sign in": "Please sign in", + "email address": "email address", + "username": "username", + "password": "password", + "Remember me": "Remember me", + "Log in": "Log in", + "hot update server": "hot update server", + "Change Password": "Change Password", + "Obtain": "Obtain", + "old password": "old password", + "new password": "new password", + "please login again": "please login again", + "change success": "change success" } diff --git a/locales/zh.json b/locales/zh.json index ef7375e4..2ced6ea4 100644 --- a/locales/zh.json +++ b/locales/zh.json @@ -1,14 +1,15 @@ { - "Please sign in": "请登录", - "email address": "邮箱地址", - "username": "用户名", - "password": "密码", - "Remember me": "记住我", - "Log in": "登录", - "hot update server": "热更新服务器", - "Change Password": "修改密码", - "Obtain": "获取", + "Please sign in": "请登录", + "email address": "邮箱地址", + "username": "用户名", + "password": "密码", + "Remember me": "记住我", + "Log in": "登录", + "hot update server": "热更新服务器", + "Change Password": "修改密码", + "Obtain": "获取", "old password": "原密码", "new password": "新密码", - "please login again": "请重新登录" + "please login again": "请重新登录", + "change success": "修改成功" } diff --git a/views/auth/password.pug b/views/auth/password.pug index 8b5fe165..25965a32 100644 --- a/views/auth/password.pug +++ b/views/auth/password.pug @@ -43,7 +43,7 @@ block js dataType: 'json', success: function (data) { if (data.status == "OK") { - alert(`${__('修改成功')}`); + alert("#{__('change success')}"); location.href = '/auth/login'; } else if (data.status == 401) { alert('token invalid'); From f1e3e2ac2b6fbca003d56d8217793b7d346e04b6 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Thu, 24 Mar 2022 17:49:25 +0800 Subject: [PATCH 250/347] fix: refactor views, improve/simplify the auth workflows --- locales/en.json | 30 ++++++++-------- locales/zh.json | 3 +- public/stylesheets/{index.css => common.css} | 0 public/stylesheets/style.css | 8 ----- public/stylesheets/tokens.css | 5 --- src/routes/auth.ts | 6 +++- views/auth/confirm.pug | 9 +++-- views/auth/login.pug | 29 ++++++++++----- views/auth/password.pug | 24 +++++-------- views/auth/register.pug | 4 +-- views/common.pug | 38 ++++++++++++++++++++ views/error.pug | 6 ---- views/index.pug | 13 ++++--- views/layout.pug | 14 -------- views/tokens.pug | 24 +++++-------- 15 files changed, 114 insertions(+), 99 deletions(-) rename public/stylesheets/{index.css => common.css} (100%) delete mode 100644 public/stylesheets/style.css delete mode 100644 public/stylesheets/tokens.css create mode 100644 views/common.pug delete mode 100644 views/error.pug delete mode 100644 views/layout.pug diff --git a/locales/en.json b/locales/en.json index 0b4d6152..ec5106bf 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1,15 +1,17 @@ { - "Please sign in": "Please sign in", - "email address": "email address", - "username": "username", - "password": "password", - "Remember me": "Remember me", - "Log in": "Log in", - "hot update server": "hot update server", - "Change Password": "Change Password", - "Obtain": "Obtain", - "old password": "old password", - "new password": "new password", - "please login again": "please login again", - "change success": "change success" -} + "Please sign in": "Please sign in", + "email address": "email address", + "username": "username", + "password": "password", + "Remember me": "Remember me", + "Log in": "Log in", + "hot update server": "hot update server", + "Change Password": "Change Password", + "Obtain": "Obtain", + "old password": "old password", + "new password": "new password", + "please login again": "please login again", + "change success": "change success", + "Logout": "Logout", + "Register": "Register" +} \ No newline at end of file diff --git a/locales/zh.json b/locales/zh.json index 2ced6ea4..ecf470ac 100644 --- a/locales/zh.json +++ b/locales/zh.json @@ -11,5 +11,6 @@ "old password": "原密码", "new password": "新密码", "please login again": "请重新登录", - "change success": "修改成功" + "change success": "修改成功", + "Logout": "登出" } diff --git a/public/stylesheets/index.css b/public/stylesheets/common.css similarity index 100% rename from public/stylesheets/index.css rename to public/stylesheets/common.css diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css deleted file mode 100644 index 9453385b..00000000 --- a/public/stylesheets/style.css +++ /dev/null @@ -1,8 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} - -a { - color: #00B7FF; -} diff --git a/public/stylesheets/tokens.css b/public/stylesheets/tokens.css deleted file mode 100644 index 62a96c37..00000000 --- a/public/stylesheets/tokens.css +++ /dev/null @@ -1,5 +0,0 @@ -.site-notice { - padding: 5px 0; - text-align: center; - background-color: #fff; -} diff --git a/src/routes/auth.ts b/src/routes/auth.ts index a72030ed..1e1c014f 100644 --- a/src/routes/auth.ts +++ b/src/routes/auth.ts @@ -15,7 +15,11 @@ authRouter.get('/password', (req: Req, res) => { }); authRouter.get('/login', (req: Req, res) => { - res.render('auth/login', { title: 'CodePushServer', email: req.query.email || '' }); + res.render('auth/login', { + title: 'CodePushServer', + email: req.query.email || '', + showRegister: config.common.allowRegistration, + }); }); authRouter.get('/link', (req: Req, res) => { diff --git a/views/auth/confirm.pug b/views/auth/confirm.pug index 4b182f44..42fb040a 100644 --- a/views/auth/confirm.pug +++ b/views/auth/confirm.pug @@ -1,4 +1,5 @@ -extends ../layout +extends ../common + block css link(rel='stylesheet', href='/stylesheets/signin.css') @@ -30,13 +31,11 @@ block content button#okBtn.btn.btn-primary(type="button" data-dismiss="modal") OK block js script(). - var submit = false; - $('#inputEmail').on('click', function () { - location.href = '/auth/register?email=' + $('#inputEmail').val(); - }); $('#okBtn').on('click', function () { location.href = '/auth/login?email=' + $('#inputEmail').val(); }); + + var submit = false; $('#submitBtn').on('click', function () { if (submit) { return ; diff --git a/views/auth/login.pug b/views/auth/login.pug index 7688413c..7b17b600 100644 --- a/views/auth/login.pug +++ b/views/auth/login.pug @@ -1,4 +1,5 @@ -extends ../layout +extends ../common + block css link(rel='stylesheet', href='/stylesheets/signin.css') @@ -7,17 +8,29 @@ block content form#form.form-signin(method="post") h2.form-signin-heading #{__('Please sign in')} label.sr-only(for="inputEmail") #{__('email address')}/#{__('username')} - input#inputEmail.form-control(type="text" name="account" placeholder=`${__('email address')}/${__('username')}` required autofocus) + input#inputEmail.form-control(type="text" name="account" placeholder=`${__('email address')}/${__('username')}` value=email required autofocus) label.sr-only(for="inputPassword") #{__('password')} input#inputPassword.form-control(type="password" name="password" placeholder=`${__('password')}` required) - .checkbox - label - input(type="checkbox" value="remember-me") - span #{__('Remember me')} a#submitBtn.btn.btn-lg.btn-primary.btn-block #{__('Log in')} + if showRegister + a#registerBtn.btn.btn-lg.btn-primary.btn-block(href="/auth/register" type="button") #{__('Register')} block js script(). + function onLoggedIn() { + var query = parseQuery() + if (query.hostname) { + // come from code-push-cli login + location.href = '/tokens/' + location.search; + } else { + location.href = '/'; + } + } + + if (getAccessToken()) { + onLoggedIn(); + } + var submit = false; $('#submitBtn').on('click', function () { if (submit) { @@ -31,9 +44,9 @@ block js dataType: 'json', success: function (data) { if (data.status == "OK") { - sessionStorage.setItem('auth', data.results.tokens) + localStorage.setItem('auth', data.results.tokens) submit = false; - location.href = '/tokens/' + location.search; + onLoggedIn(); } else { alert(data.message); submit = false; diff --git a/views/auth/password.pug b/views/auth/password.pug index 25965a32..5c4a2fd1 100644 --- a/views/auth/password.pug +++ b/views/auth/password.pug @@ -1,17 +1,8 @@ -extends ../layout +extends ../common block content .container(style="margin-top:30px;") form#form.col-md-5.col-md-offset-3(method="post") - .form-group - label.sr-only(for="inputEmail") #{__('email address')}/#{__('username')} - input#inputEmail.form-control(type="text" name="account" placeholder=`${__('email address')}/${__('username')}` required autofocus) - .form-group - .col-md-10(style="margin-left:-15px;") - label.sr-only(for="inputToken") token - input#inputToken.form-control(type="text" name="token" placeholder="token" required) - .col-md-2 - a.form-control.btn.btn-link(style="margin-bottom:15px;" target="_blank" href="/auth/login") #{__('Obtain')} token .form-group label.sr-only(for="inputPassword") #{__('old password')} input#inputPassword.form-control(type="password" name="oldPassword" placeholder=`${__('old password')}` required) @@ -23,30 +14,33 @@ block content block js script(). + ensureLogin(); + var submit = false; $('#submitBtn').on('click', function () { if (submit) { return ; } - var token = $('#inputToken').val(); + submit = true; + var accessToken = getAccessToken(); var oldPassword = $('#inputPassword').val(); var newPassword = $('#inputNewPassword').val(); - submit = true; $.ajax({ type: 'patch', - data: JSON.stringify({oldPassword:oldPassword,newPassword:newPassword}), + data: JSON.stringify({ oldPassword: oldPassword, newPassword: newPassword }), contentType: 'application/json;charset=utf-8', headers: { - Authorization : 'Bearer '+token + Authorization : 'Bearer ' + accessToken, }, url: '/users/password', dataType: 'json', success: function (data) { if (data.status == "OK") { alert("#{__('change success')}"); - location.href = '/auth/login'; + logout(); } else if (data.status == 401) { alert('token invalid'); + logout(); } else { alert(data.message); } diff --git a/views/auth/register.pug b/views/auth/register.pug index 5ae3fd49..0d3fd0b5 100644 --- a/views/auth/register.pug +++ b/views/auth/register.pug @@ -1,4 +1,5 @@ -extends ../layout +extends ../common + block css link(rel='stylesheet', href='/stylesheets/signin.css') @@ -27,7 +28,6 @@ block js success: function (data) { if (data.status == "OK") { let email = $('#inputEmail').val(); - sessionStorage.setItem('email', email); location.href = '/auth/confirm?email=' + email; submit = false; } else { diff --git a/views/common.pug b/views/common.pug new file mode 100644 index 00000000..61a1da87 --- /dev/null +++ b/views/common.pug @@ -0,0 +1,38 @@ +doctype html +html + head + title= title + meta(name="keywords" content="code-push-server,code-push,react-native,cordova") + meta(name="description" content="CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push") + link(rel='stylesheet', href='/js/bootstrap-3.3.7/css/bootstrap.min.css') + link(rel='stylesheet', href='/stylesheets/common.css') + block css + body + block content + + script(src='/js/jquery-3.1.1.min.js') + script(src='/js/bootstrap-3.3.7/js/bootstrap.min.js') + script(). + function getAccessToken() { + return localStorage.getItem('auth'); + } + function ensureLogin() { + if (!getAccessToken()) { + window.location.href = '/auth/login'; + } + } + function logout() { + localStorage.removeItem('auth'); + location.href = '/auth/login'; + } + function parseQuery() { + query = location.search.substring(1); + var vars = query.split('&'); + var rs = {}; + for (var i = 0; i < vars.length; i++) { + var pair = vars[i].split('='); + rs[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); + } + return rs; + } + block js diff --git a/views/error.pug b/views/error.pug deleted file mode 100644 index 51ec12c6..00000000 --- a/views/error.pug +++ /dev/null @@ -1,6 +0,0 @@ -extends layout - -block content - h1= message - h2= error.status - pre #{error.stack} diff --git a/views/index.pug b/views/index.pug index 094f665e..a3972b1d 100644 --- a/views/index.pug +++ b/views/index.pug @@ -1,11 +1,16 @@ -extends layout -block css - link(rel='stylesheet', href='/stylesheets/index.css') +extends common block content .site-notice react native / cordova #{__('hot update server')} h1(style="text-align: center;")= title p(style="text-align: center;") Welcome to #{title} .site-notice - a.btn.btn-primary(href="/auth/login" type="button") #{__('Log in')} + a.btn.btn-primary(href="/tokens" type="button") #{__('Obtain')} token a.btn.btn-primary.col-md-offset-1(href="/auth/password" type="button") #{__('Change Password')} + a#logoutBtn.btn.btn-primary.col-md-offset-1(href="#" type="button") #{__('Logout')} + +block js + script(). + ensureLogin(); + + $('#logoutBtn').on('click', logout); diff --git a/views/layout.pug b/views/layout.pug deleted file mode 100644 index 85d88861..00000000 --- a/views/layout.pug +++ /dev/null @@ -1,14 +0,0 @@ -doctype html -html - head - title= title - meta(name="keywords" content="code-push-server,code-push,react-native,cordova") - meta(name="description" content="CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push") - link(rel='stylesheet', href='/js/bootstrap-3.3.7/css/bootstrap.min.css') - block css - body - block content - - script(src='/js/jquery-3.1.1.min.js') - script(src='/js/bootstrap-3.3.7/js/bootstrap.min.js') - block js \ No newline at end of file diff --git a/views/tokens.pug b/views/tokens.pug index 7902bbc2..dad6f499 100644 --- a/views/tokens.pug +++ b/views/tokens.pug @@ -1,6 +1,4 @@ -extends layout -block css - link(rel='stylesheet', href='/stylesheets/tokens.css') +extends common block content h1(style="text-align: center;")= title @@ -20,28 +18,22 @@ block content block js script(). + ensureLogin(); var submit = false; - function parseQuery(query) { - query = query.substring(1); - var vars = query.split('&'); - var rs = {}; - for (var i = 0; i < vars.length; i++) { - var pair = vars[i].split('='); - rs[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); - } - return rs; - } + $('#submitBtn').on('click', function () { if (submit) { return ; } submit = true; - var query = parseQuery(location.search); + var query = parseQuery(); var createdBy = query.hostname; var time = (new Date()).getTime(); if (createdBy == null || createdBy == undefined || createdBy=="") { createdBy = 'Login-' + time; } + + // TODO: make ttl and friendlyNamee configurable var postParams = { createdBy: createdBy, friendlyName: "Login-" + time, @@ -49,12 +41,12 @@ block js description: "Login-" + time, isSession: true }; - var access_token = sessionStorage.getItem('auth'); + var accessToken = getAccessToken(); $.ajax({ type: 'post', data: postParams, headers: { - Authorization : 'Bearer '+access_token + Authorization : 'Bearer ' + accessToken }, url: '/accessKeys', dataType: 'json', From 56f32d24d8f381abc33b69f3354b24401d7945dc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 24 Mar 2022 20:09:02 +0000 Subject: [PATCH 251/347] fix(deps): update dependency aws-sdk to v2.1100.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index a24eb980..820c88bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1432,9 +1432,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.1098.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1098.0.tgz", - "integrity": "sha512-h81SAgqAxij1db9zbFAXEneaC1LNcx/xIIf13tF/IutdYOzd7mQ3lHFCgjp+fB1Msl8z73Vs0VGstyrhK7+zPw==", + "version": "2.1100.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1100.0.tgz", + "integrity": "sha512-StLSQCYFmFPxjoMntIb+8jUZ0vzmq3xkrwG5e/4qU1bSGWCmhhjvz6c+4j38AnIy8MFV1+tV8RArbhLUEV2dGw==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index 71198a80..f48f4d53 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1098.0", + "aws-sdk": "2.1100.0", "bcryptjs": "2.4.3", "body-parser": "1.19.2", "cookie-parser": "1.4.6", From 10427b962c6891d87fd3c5700882fd2117f8b322 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 25 Mar 2022 00:44:31 +0000 Subject: [PATCH 252/347] chore(deps): update dependency typescript to v4.6.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index a24eb980..963a3cce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7734,9 +7734,9 @@ } }, "typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 71198a80..fb2230c2 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "standard-version": "9.3.2", "supertest": "6.2.2", "supervisor": "0.12.0", - "typescript": "4.6.2" + "typescript": "4.6.3" }, "files": [ "bin", From 163637439b1a038c80104ddca65e0f37fecb5c7a Mon Sep 17 00:00:00 2001 From: Milan Mikula Date: Tue, 22 Mar 2022 17:01:28 +0100 Subject: [PATCH 253/347] zip file error handling --- src/core/services/package-manager.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/services/package-manager.ts b/src/core/services/package-manager.ts index bb6e2445..ee3a3ec7 100644 --- a/src/core/services/package-manager.ts +++ b/src/core/services/package-manager.ts @@ -1,4 +1,5 @@ /* eslint-disable max-lines */ +import { EventEmitter } from 'events'; import fs from 'fs'; import os from 'os'; import path from 'path'; @@ -228,6 +229,9 @@ class PackageManager { writeStream.on('error', (error) => { reject(error); }); + (zipFile as unknown as EventEmitter).on('error', (error) => { + reject(error); + }); zipFile.outputStream .pipe(writeStream) .on('error', (error) => { From 5333c57a089cdd7737716ec262418fc1320735a1 Mon Sep 17 00:00:00 2001 From: Milan Mikula Date: Tue, 22 Mar 2022 17:04:34 +0100 Subject: [PATCH 254/347] removed unnesesary renaming The renaming of the "root" folder of paths in manifest file, creates error when the path is used as relative path to create "partial" release zip file. --- src/core/utils/security.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/core/utils/security.ts b/src/core/utils/security.ts index 6e799c91..b658b76e 100644 --- a/src/core/utils/security.ts +++ b/src/core/utils/security.ts @@ -183,10 +183,6 @@ export function calcAllFileSha256(directoryPath: string): Promise = {}; _.forIn(results, (value, key) => { let relativePath = path.relative(directoryPath, key); - const matchresult = relativePath.match(/(\/|\\).*/); - if (matchresult) { - relativePath = path.join('CodePush', matchresult[0]); - } relativePath = slash(relativePath); data[relativePath] = value; }); From d264a2a126bd096f6be9f17de3101a032796033d Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 25 Mar 2022 18:15:41 +0800 Subject: [PATCH 255/347] refactor: add more type annotations to utils/security.ts --- src/core/utils/security.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/utils/security.ts b/src/core/utils/security.ts index b658b76e..5cf76528 100644 --- a/src/core/utils/security.ts +++ b/src/core/utils/security.ts @@ -57,8 +57,8 @@ function stringSha256Sync(contents: string) { return sha256.digest('hex'); } -function sortJsonToArr(json) { - const rs = []; +function sortJsonToArr(json: Record) { + const rs: { path: string; hash: string }[] = []; _.forIn(json, (value, key) => { rs.push({ path: key, hash: value }); }); @@ -67,7 +67,7 @@ function sortJsonToArr(json) { // some files are ignored in calc hash in client sdk // https://github.com/Microsoft/react-native-code-push/pull/974/files#diff-21b650f88429c071b217d46243875987R15 -function isHashIgnored(relativePath) { +function isHashIgnored(relativePath: string) { if (!relativePath) { return true; } @@ -97,7 +97,7 @@ function isPackageHashIgnored(relativePath: string) { ); } -export function packageHashSync(jsonData) { +export function packageHashSync(jsonData: Record) { const sortedArr = sortJsonToArr(jsonData); const manifestData = _.filter(sortedArr, (v) => { return !isPackageHashIgnored(v.path); @@ -130,7 +130,7 @@ function sha256AllFiles(files: string[]): Promise> { } export function uploadPackageType(directoryPath: string) { - return new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { recursive(directoryPath, (err, files) => { if (err) { logger.error(new AppError(err.message)); From ee2b2c3b4301a5cf8f5867d665457af3be886586 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Fri, 25 Mar 2022 18:23:30 +0800 Subject: [PATCH 256/347] chore(release): 2.1.2 --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c4d3ee8..ef00a4fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.1.2](https://github.com/shm-open/code-push-server/compare/v2.1.1...v2.1.2) (2022-03-25) + + +### Bug Fixes + +* change password success prompts localized message ([21c987a](https://github.com/shm-open/code-push-server/commit/21c987ad1e9e72a888965f42cb808294c4701477)) +* **deps:** update dependency aws-sdk to v2.1100.0 ([56f32d2](https://github.com/shm-open/code-push-server/commit/56f32d24d8f381abc33b69f3354b24401d7945dc)) +* refactor views, improve/simplify the auth workflows ([f1e3e2a](https://github.com/shm-open/code-push-server/commit/f1e3e2ac2b6fbca003d56d8217793b7d346e04b6)) +* zip file creation of diff release ([4bb074b](https://github.com/shm-open/code-push-server/commit/4bb074b3ad5f334ac7457e287035ae073fd59f2e)) + ### [2.1.1](https://github.com/shm-open/code-push-server/compare/v2.1.0...v2.1.1) (2022-03-23) diff --git a/package-lock.json b/package-lock.json index dc0c804e..395109a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "2.1.1", + "version": "2.1.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index dd09f359..9c25eaff 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "2.1.1", + "version": "2.1.2", "license": "MIT", "repository": { "type": "git", From 71771a1a0437db780610427ab1241dc11985a79b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 25 Mar 2022 21:26:29 +0000 Subject: [PATCH 257/347] chore(deps): update dependency @types/validator to v13.7.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 395109a8..2d9ac79f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -921,9 +921,9 @@ } }, "@types/validator": { - "version": "13.7.1", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.1.tgz", - "integrity": "sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q==" + "version": "13.7.2", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.2.tgz", + "integrity": "sha512-KFcchQ3h0OPQgFirBRPZr5F/sVjxZsOrQHedj3zi8AH3Zv/hOLx2OLR4hxR5HcfoU+33n69ZuOfzthKVdMoTiw==" }, "@types/yauzl": { "version": "2.9.2", diff --git a/package.json b/package.json index 9c25eaff..4c33764e 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "@types/node-fetch": "2.6.1", "@types/nodemailer": "6.4.4", "@types/recursive-readdir": "2.2.0", - "@types/validator": "13.7.1", + "@types/validator": "13.7.2", "@types/yazl": "2.4.2", "concurrently": "7.0.0", "mocha": "9.2.2", From 065fef78f35e36ada490f1b736520d36a512df8c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 28 Mar 2022 11:11:13 +0000 Subject: [PATCH 258/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.6 --- package-lock.json | 72 ++++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 41 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d9ac79f..1c5d32e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -680,18 +680,18 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.5.tgz", - "integrity": "sha512-ChDKGkhp4ZakAIkQ/SuBKqgrYbJmh7u7OP2KavRX0VmwfEPkPIvs5ngFbHnWSpRuM7l/pWw81PLx1rGahz1SrA==", + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.6.tgz", + "integrity": "sha512-SIE31AA94hktOKgAHGzNztIrcoWVFk30bYvYYJ+bqfklVK7fxnzvG4JpaaLo78PDEfobk0K1VH6Vxqm5W+yAjw==", "dev": true, "requires": { "@typescript-eslint/eslint-plugin": "5.16.0", "@typescript-eslint/parser": "5.16.0", "babel-eslint": "10.1.0", - "eslint": "8.11.0", + "eslint": "8.12.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.5.0", - "eslint-import-resolver-typescript": "2.5.0", + "eslint-import-resolver-typescript": "2.7.0", "eslint-plugin-deprecation": "1.3.2", "eslint-plugin-import": "2.25.4", "eslint-plugin-jsx-a11y": "6.5.1", @@ -700,7 +700,7 @@ "eslint-plugin-react-hooks": "4.3.0", "eslint-plugin-react-native": "4.0.0", "eslint-plugin-taro": "3.3.20", - "prettier": "2.6.0" + "prettier": "2.6.1" } }, "@tootallnate/once": { @@ -798,9 +798,9 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz", - "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/json5": { @@ -2700,9 +2700,9 @@ } }, "eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "requires": { "@eslint/eslintrc": "^1.2.1", @@ -2935,16 +2935,16 @@ } }, "eslint-import-resolver-typescript": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", - "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.0.tgz", + "integrity": "sha512-MNHS3u5pebvROX4MjGP9coda589ZGfL1SqdxUV4kSrcclfDRWvNE2D+eljbnWVMvWDVRgT89nhscMHPKYGcObQ==", "dev": true, "requires": { - "debug": "^4.3.1", - "glob": "^7.1.7", - "is-glob": "^4.0.1", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" }, "dependencies": { "debug": { @@ -5276,13 +5276,13 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime": { @@ -6217,9 +6217,9 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", - "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.1.tgz", + "integrity": "sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A==", "dev": true }, "prettier-linter-helpers": { @@ -7649,15 +7649,23 @@ "dev": true }, "tsconfig-paths": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz", - "integrity": "sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + } } }, "tslib": { diff --git a/package.json b/package.json index 4c33764e..78449513 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.5", + "@shm-open/eslint-config-bundle": "1.9.6", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From 4c393e04c5bc0f3e3f2e1bf9df2b5e88d842fe67 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 29 Mar 2022 10:17:04 +0800 Subject: [PATCH 259/347] chore: update eslint config --- .eslintrc.js | 55 --------------------- package-lock.json | 118 +++++++++++++++++++++++++--------------------- package.json | 2 +- 3 files changed, 64 insertions(+), 111 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index fbc6dc7f..7fad6c4a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,58 +1,3 @@ module.exports = { extends: ['@shm-open/eslint-config-bundle'], - rules: { - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'default', - format: ['camelCase', 'PascalCase', 'UPPER_CASE', 'snake_case'], - leadingUnderscore: 'allowSingleOrDouble', - }, - { - selector: 'variable', - modifiers: ['destructured'], - format: null, - }, - { - selector: [ - 'classProperty', - 'objectLiteralProperty', - 'typeProperty', - 'classMethod', - 'objectLiteralMethod', - 'typeMethod', - 'accessor', - 'enumMember', - ], - modifiers: ['requiresQuotes'], - format: null, - }, - { - selector: 'enum', - format: ['PascalCase'], - }, - { - selector: 'enumMember', - format: ['UPPER_CASE'], - }, - { - selector: 'variableLike', - format: ['camelCase', 'PascalCase'], - leadingUnderscore: 'allow', - }, - { - selector: 'variable', - modifiers: ['const'], - format: ['camelCase', 'PascalCase', 'UPPER_CASE'], - }, - { - selector: 'typeLike', - format: ['PascalCase'], - }, - { - selector: 'objectLiteralProperty', - format: ['camelCase', 'snake_case', 'UPPER_CASE', 'PascalCase'], - }, - ], - }, }; diff --git a/package-lock.json b/package-lock.json index 1c5d32e6..fd2e9435 100644 --- a/package-lock.json +++ b/package-lock.json @@ -680,13 +680,13 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.6", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.6.tgz", - "integrity": "sha512-SIE31AA94hktOKgAHGzNztIrcoWVFk30bYvYYJ+bqfklVK7fxnzvG4JpaaLo78PDEfobk0K1VH6Vxqm5W+yAjw==", + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.7.tgz", + "integrity": "sha512-jdONSC16tF7BjbzKVGsREipGYF6i68I0teKD9aA2M1lvaRYeH5tuDQXEkpj1RYO4vtgDI7+jeO0lT+zToqLhig==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.16.0", - "@typescript-eslint/parser": "5.16.0", + "@typescript-eslint/eslint-plugin": "5.17.0", + "@typescript-eslint/parser": "5.17.0", "babel-eslint": "10.1.0", "eslint": "8.12.0", "eslint-config-airbnb-base": "15.0.0", @@ -944,14 +944,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz", - "integrity": "sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz", + "integrity": "sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/type-utils": "5.16.0", - "@typescript-eslint/utils": "5.16.0", + "@typescript-eslint/scope-manager": "5.17.0", + "@typescript-eslint/type-utils": "5.17.0", + "@typescript-eslint/utils": "5.17.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -978,23 +978,23 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.16.0.tgz", - "integrity": "sha512-bitZtqO13XX64/UOQKoDbVg2H4VHzbHnWWlTRc7ofq7SuQyPCwEycF1Zmn5ZAMTJZ3p5uMS7xJGUdOtZK7LrNw==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.17.0.tgz", + "integrity": "sha512-U4sM5z0/ymSYqQT6I7lz8l0ZZ9zrya5VIwrwAP5WOJVabVtVsIpTMxPQe+D3qLyePT+VlETUTO2nA1+PufPx9Q==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.16.0" + "@typescript-eslint/utils": "5.17.0" } }, "@typescript-eslint/parser": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.16.0.tgz", - "integrity": "sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.17.0.tgz", + "integrity": "sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/typescript-estree": "5.16.0", + "@typescript-eslint/scope-manager": "5.17.0", + "@typescript-eslint/types": "5.17.0", + "@typescript-eslint/typescript-estree": "5.17.0", "debug": "^4.3.2" }, "dependencies": { @@ -1016,22 +1016,22 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.16.0.tgz", - "integrity": "sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz", + "integrity": "sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/visitor-keys": "5.16.0" + "@typescript-eslint/types": "5.17.0", + "@typescript-eslint/visitor-keys": "5.17.0" } }, "@typescript-eslint/type-utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz", - "integrity": "sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz", + "integrity": "sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.16.0", + "@typescript-eslint/utils": "5.17.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -1054,19 +1054,19 @@ } }, "@typescript-eslint/types": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.16.0.tgz", - "integrity": "sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.17.0.tgz", + "integrity": "sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.16.0.tgz", - "integrity": "sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz", + "integrity": "sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/visitor-keys": "5.16.0", + "@typescript-eslint/types": "5.17.0", + "@typescript-eslint/visitor-keys": "5.17.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1092,26 +1092,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.16.0.tgz", - "integrity": "sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.17.0.tgz", + "integrity": "sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/typescript-estree": "5.16.0", + "@typescript-eslint/scope-manager": "5.17.0", + "@typescript-eslint/types": "5.17.0", + "@typescript-eslint/typescript-estree": "5.17.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.16.0.tgz", - "integrity": "sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz", + "integrity": "sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/types": "5.17.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -2627,9 +2627,9 @@ } }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz", + "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -2638,20 +2638,28 @@ "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + } } }, "es-to-primitive": { diff --git a/package.json b/package.json index 78449513..5e9509cd 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.6", + "@shm-open/eslint-config-bundle": "1.9.7", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From 6bb6424b9ee41d1ad4c5549d339139e62b849235 Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Tue, 29 Mar 2022 10:22:00 +0800 Subject: [PATCH 260/347] chore: add lint to ci workflow --- .github/workflows/nodejs.yml | 1 + package.json | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 213c3c8d..99870e31 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -38,3 +38,4 @@ jobs: - run: npm ci - run: npm run build --if-present - run: npm test + - run: npm run lint --if-present diff --git a/package.json b/package.json index 5e9509cd..c2c8ecfe 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,8 @@ "release": "npm run build && npm test && standard-version && git push --follow-tags origin master && npm publish", "release-docker": "make release-docker", "test": "make test", - "coverage": "make coverage" + "coverage": "make coverage", + "lint": "eslint src" }, "dependencies": { "aliyun-oss-upload-stream": "1.3.0", From 3b7073617fb1c617a7a2930cd6705ab969f8e5d9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 29 Mar 2022 13:37:34 +0000 Subject: [PATCH 261/347] chore(deps): update dependency @types/lodash to v4.14.181 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index fd2e9435..c228459d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -819,9 +819,9 @@ } }, "@types/lodash": { - "version": "4.14.180", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.180.tgz", - "integrity": "sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g==", + "version": "4.14.181", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", + "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index c2c8ecfe..046f8c0e 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.2", "@types/jsonwebtoken": "8.5.8", - "@types/lodash": "4.14.180", + "@types/lodash": "4.14.181", "@types/node-fetch": "2.6.1", "@types/nodemailer": "6.4.4", "@types/recursive-readdir": "2.2.0", From 2a24870e907237a5d9c33d536f561a23d551ad08 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 2 Apr 2022 12:18:59 +0000 Subject: [PATCH 262/347] chore(deps): update dependency concurrently to v7.1.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c228459d..75905e7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1892,9 +1892,9 @@ } }, "concurrently": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.0.0.tgz", - "integrity": "sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.1.0.tgz", + "integrity": "sha512-Bz0tMlYKZRUDqJlNiF/OImojMB9ruKUz6GCfmhFnSapXgPe+3xzY4byqoKG9tUZ7L2PGEUjfLPOLfIX3labnmw==", "dev": true, "requires": { "chalk": "^4.1.0", diff --git a/package.json b/package.json index 046f8c0e..84c4d692 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@types/recursive-readdir": "2.2.0", "@types/validator": "13.7.2", "@types/yazl": "2.4.2", - "concurrently": "7.0.0", + "concurrently": "7.1.0", "mocha": "9.2.2", "nyc": "15.1.0", "should": "13.2.3", From ae553969a3154617a60db8890da7a3467c5cbcd4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 3 Apr 2022 03:11:49 +0000 Subject: [PATCH 263/347] fix(deps): update dependency body-parser to v1.20.0 --- package-lock.json | 76 +++++++++++++++++++++++++++++++++++------------ package.json | 2 +- 2 files changed, 58 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 75905e7b..efdd59ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1563,20 +1563,22 @@ } }, "body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "bytes": { @@ -1584,21 +1586,59 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } }, "raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -5853,8 +5893,7 @@ "object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" }, "object-keys": { "version": "1.1.1", @@ -7099,7 +7138,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", diff --git a/package.json b/package.json index 84c4d692..2ef18f5c 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "aliyun-sdk": "1.12.4", "aws-sdk": "2.1100.0", "bcryptjs": "2.4.3", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "cookie-parser": "1.4.6", "cos-nodejs-sdk-v5": "2.11.6", "express": "4.17.3", From a4c875d7c0b69f88a82c1cb1ee43e2b354ad97b1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 3 Apr 2022 13:40:40 +0000 Subject: [PATCH 264/347] fix(deps): update dependency moment to v2.29.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 75905e7b..c888b84a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5520,9 +5520,9 @@ "dev": true }, "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + "version": "2.29.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", + "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==" }, "moment-timezone": { "version": "0.5.34", diff --git a/package.json b/package.json index 84c4d692..0dcb659b 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "jsonwebtoken": "8.5.1", "kv-logger": "0.5.3", "lodash": "4.17.21", - "moment": "2.29.1", + "moment": "2.29.2", "mysql2": "2.3.3", "node-fetch": "2.6.7", "nodemailer": "6.7.3", From 34ef96860518e9d31769bbed6c43b1501b6bb11b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 3 Apr 2022 17:17:42 +0000 Subject: [PATCH 265/347] fix(deps): update dependency sequelize to v6.18.0 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 75905e7b..efe992d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6948,9 +6948,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.17.0.tgz", - "integrity": "sha512-AZus+0YZDq91Zg0hzDaO5atTzHgJruI23V8nBlAhkLuI81Z53nSRdAe/4R1A6vGOZ/RfCLP9idF4tfQnoAsM5A==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.18.0.tgz", + "integrity": "sha512-x8TW8ovqG8ljZq0Uow1mtMq44hSKPefWEC590R9IWgF2dajEHvKJJpXo1FiRPfj6spOHWOnmOs1Xbb1JPG3Ifg==", "requires": { "@types/debug": "^4.1.7", "@types/validator": "^13.7.1", @@ -6971,9 +6971,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } diff --git a/package.json b/package.json index 84c4d692..0da00f18 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "4.0.4", - "sequelize": "6.17.0", + "sequelize": "6.18.0", "slash": "3.0.0", "validator": "13.7.0", "yargs": "17.4.0", From c396306558581f29958d1aeec96efd2c6a22ac48 Mon Sep 17 00:00:00 2001 From: byronigoe Date: Tue, 5 Apr 2022 09:45:58 -0700 Subject: [PATCH 266/347] Merge pull request #4 from wongpeiyi/fix/range-logic Download latest uploaded package instead of comparing range distances --- src/core/services/client-manager.ts | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index aecdd8b1..93607654 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -201,17 +201,7 @@ class ClientManager { max_version: { [Op.gt]: version }, }, }).then((deploymentsVersionsMore) => { - let distance = 0; - let item = null; - _.map(deploymentsVersionsMore, (value, index) => { - if (index === 0) { - item = value; - distance = value.max_version - value.min_version; - } else if (distance > value.max_version - value.min_version) { - distance = value.max_version - value.min_version; - item = value; - } - }); + let item = _.sortBy(deploymentsVersionsMore, 'created_at').reverse()[0]; logger.debug({ item, }); From ae5587040964e14ae88401e6dcc84b508c6ada5c Mon Sep 17 00:00:00 2001 From: Byron Igoe Date: Tue, 5 Apr 2022 23:21:00 -0700 Subject: [PATCH 267/347] Improve performance --- src/core/services/client-manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index 93607654..7f8923a1 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -201,7 +201,7 @@ class ClientManager { max_version: { [Op.gt]: version }, }, }).then((deploymentsVersionsMore) => { - let item = _.sortBy(deploymentsVersionsMore, 'created_at').reverse()[0]; + const item = _.last(_.sortBy(deploymentsVersionsMore, 'created_at')); logger.debug({ item, }); From 442743f20d642d3a0adc3be0f6abbc707544077f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 6 Apr 2022 06:54:38 +0000 Subject: [PATCH 268/347] fix(deps): update dependency redis to v4.0.6 --- package-lock.json | 22 +++++++++++----------- package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index efe992d6..9f348d40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -569,9 +569,9 @@ "integrity": "sha512-mXEBvEIgF4tUzdIN89LiYsbi6//EdpFA7L8M+DHCvePXg+bfHWi+ct5VI6nHUFQE5+ohm/9wmgihCH3HSkeKsw==" }, "@node-redis/client": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@node-redis/client/-/client-1.0.4.tgz", - "integrity": "sha512-IM/NRAqg7MvNC3bIRQipXGrEarunrdgvrbAzsd3ty93LSHi/M+ybQulOERQi8a3M+P5BL8HenwXjiIoKm6ml2g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@node-redis/client/-/client-1.0.5.tgz", + "integrity": "sha512-ESZ3bd1f+od62h4MaBLKum+klVJfA4wAeLHcVQBkoXa1l0viFesOWnakLQqKg+UyrlJhZmXJWtu0Y9v7iTMrig==", "requires": { "cluster-key-slot": "1.1.0", "generic-pool": "3.8.2", @@ -590,9 +590,9 @@ "integrity": "sha512-qVRgn8WfG46QQ08CghSbY4VhHFgaTY71WjpwRBGEuqGPfWwfRcIf3OqSpR7Q/45X+v3xd8mvYjywqh0wqJ8T+g==" }, "@node-redis/search": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@node-redis/search/-/search-1.0.3.tgz", - "integrity": "sha512-rsrzkGWI84di/uYtEctS/4qLusWt0DESx/psjfB0TFpORDhe7JfC0h8ary+eHulTksumor244bXLRSqQXbFJmw==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@node-redis/search/-/search-1.0.5.tgz", + "integrity": "sha512-MCOL8iCKq4v+3HgEQv8zGlSkZyXSXtERgrAJ4TSryIG/eLFy84b57KmNNa/V7M1Q2Wd2hgn2nPCGNcQtk1R1OQ==" }, "@node-redis/time-series": { "version": "1.0.2", @@ -6719,15 +6719,15 @@ } }, "redis": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.0.4.tgz", - "integrity": "sha512-KaM1OAj/nGrSeybmmOWSMY0LXTGT6FVWgUZZrd2MYzXKJ+VGtqVaciGQeNMfZiQX+kDM8Ke4uttb54m2rm6V0A==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.0.6.tgz", + "integrity": "sha512-IaPAxgF5dV0jx+A9l6yd6R9/PAChZIoAskDVRzUODeLDNhsMlq7OLLTmu0AwAr0xjrJ1bibW5xdpRwqIQ8Q0Xg==", "requires": { "@node-redis/bloom": "1.0.1", - "@node-redis/client": "1.0.4", + "@node-redis/client": "1.0.5", "@node-redis/graph": "1.0.0", "@node-redis/json": "1.0.2", - "@node-redis/search": "1.0.3", + "@node-redis/search": "1.0.5", "@node-redis/time-series": "1.0.2" } }, diff --git a/package.json b/package.json index 0da00f18..440a714e 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "qiniu": "7.4.0", "rand-token": "1.0.1", "recursive-readdir": "2.2.2", - "redis": "4.0.4", + "redis": "4.0.6", "sequelize": "6.18.0", "slash": "3.0.0", "validator": "13.7.0", From 1d3cab0c310ca39398e65d334970add1e9119529 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 6 Apr 2022 18:58:09 +0000 Subject: [PATCH 269/347] fix(deps): update dependency aws-sdk to v2.1109.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index b1acb515..a06f93e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1432,9 +1432,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.1100.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1100.0.tgz", - "integrity": "sha512-StLSQCYFmFPxjoMntIb+8jUZ0vzmq3xkrwG5e/4qU1bSGWCmhhjvz6c+4j38AnIy8MFV1+tV8RArbhLUEV2dGw==", + "version": "2.1109.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1109.0.tgz", + "integrity": "sha512-kcxDBPIpgN2mTgSxbbTPA5l63mCImDY+1YfZGAkZ9LIk+LYX3CPQC1vVP/iMrGioToB0KLSLechNuBif/6LXUA==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index 4c5696d9..4dbe3d1d 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1100.0", + "aws-sdk": "2.1109.0", "bcryptjs": "2.4.3", "body-parser": "1.20.0", "cookie-parser": "1.4.6", From 7ee28bfc98fc00fa3e18656ed03f41f986a23716 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 7 Apr 2022 04:47:59 +0000 Subject: [PATCH 270/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.8 --- package-lock.json | 184 ++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 99 insertions(+), 87 deletions(-) diff --git a/package-lock.json b/package-lock.json index b1acb515..7a90ab41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -242,18 +242,18 @@ "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" }, "@babel/runtime": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", - "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", + "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.8.tgz", - "integrity": "sha512-ZbYSUvoSF6dXZmMl/CYTMOvzIFnbGfv4W3SEHYgMvNsFTeLaF2gkGAF4K2ddmtSK4Emej+0aYcnSC6N5dPCXUQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz", + "integrity": "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==", "dev": true, "requires": { "core-js-pure": "^3.20.2", @@ -680,27 +680,27 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.7.tgz", - "integrity": "sha512-jdONSC16tF7BjbzKVGsREipGYF6i68I0teKD9aA2M1lvaRYeH5tuDQXEkpj1RYO4vtgDI7+jeO0lT+zToqLhig==", + "version": "1.9.8", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.8.tgz", + "integrity": "sha512-x5wx8/EEsTptjhNamn0ihY/oDRrSWwAcTpsfrH2Yyir9JgNggydI7XtIu1GLHCPYlL5vrtI4/ST258GoF6JoaA==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.17.0", - "@typescript-eslint/parser": "5.17.0", + "@typescript-eslint/eslint-plugin": "5.18.0", + "@typescript-eslint/parser": "5.18.0", "babel-eslint": "10.1.0", "eslint": "8.12.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.5.0", - "eslint-import-resolver-typescript": "2.7.0", + "eslint-import-resolver-typescript": "2.7.1", "eslint-plugin-deprecation": "1.3.2", - "eslint-plugin-import": "2.25.4", + "eslint-plugin-import": "2.26.0", "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-prettier": "4.0.0", "eslint-plugin-react": "7.29.4", - "eslint-plugin-react-hooks": "4.3.0", + "eslint-plugin-react-hooks": "4.4.0", "eslint-plugin-react-native": "4.0.0", "eslint-plugin-taro": "3.3.20", - "prettier": "2.6.1" + "prettier": "2.6.2" } }, "@tootallnate/once": { @@ -944,14 +944,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz", - "integrity": "sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", + "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.17.0", - "@typescript-eslint/type-utils": "5.17.0", - "@typescript-eslint/utils": "5.17.0", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/type-utils": "5.18.0", + "@typescript-eslint/utils": "5.18.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -978,23 +978,23 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.17.0.tgz", - "integrity": "sha512-U4sM5z0/ymSYqQT6I7lz8l0ZZ9zrya5VIwrwAP5WOJVabVtVsIpTMxPQe+D3qLyePT+VlETUTO2nA1+PufPx9Q==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.18.0.tgz", + "integrity": "sha512-hypiw5N0aM2aH91/uMmG7RpyUH3PN/iOhilMwkMFZIbm/Bn/G3ZnbaYdSoAN4PG/XHQjdhBYLi0ZoRZsRYT4hA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.17.0" + "@typescript-eslint/utils": "5.18.0" } }, "@typescript-eslint/parser": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.17.0.tgz", - "integrity": "sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", + "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.17.0", - "@typescript-eslint/types": "5.17.0", - "@typescript-eslint/typescript-estree": "5.17.0", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", "debug": "^4.3.2" }, "dependencies": { @@ -1016,22 +1016,22 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz", - "integrity": "sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", + "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.17.0", - "@typescript-eslint/visitor-keys": "5.17.0" + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0" } }, "@typescript-eslint/type-utils": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz", - "integrity": "sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", + "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.17.0", + "@typescript-eslint/utils": "5.18.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -1054,19 +1054,19 @@ } }, "@typescript-eslint/types": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.17.0.tgz", - "integrity": "sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", + "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz", - "integrity": "sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", + "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.17.0", - "@typescript-eslint/visitor-keys": "5.17.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1092,26 +1092,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.17.0.tgz", - "integrity": "sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", + "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.17.0", - "@typescript-eslint/types": "5.17.0", - "@typescript-eslint/typescript-estree": "5.17.0", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz", - "integrity": "sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", + "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.17.0", + "@typescript-eslint/types": "5.18.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -2983,9 +2983,9 @@ } }, "eslint-import-resolver-typescript": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.0.tgz", - "integrity": "sha512-MNHS3u5pebvROX4MjGP9coda589ZGfL1SqdxUV4kSrcclfDRWvNE2D+eljbnWVMvWDVRgT89nhscMHPKYGcObQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", "dev": true, "requires": { "debug": "^4.3.4", @@ -3094,9 +3094,9 @@ } }, "eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -3104,14 +3104,14 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-module-utils": "^2.7.3", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.8.1", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" }, "dependencies": { "doctrine": { @@ -3122,6 +3122,15 @@ "requires": { "esutils": "^2.0.2" } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } } } }, @@ -3227,9 +3236,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", - "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz", + "integrity": "sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ==", "dev": true }, "eslint-plugin-react-native": { @@ -4525,9 +4534,9 @@ "dev": true }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -4564,10 +4573,13 @@ } }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, "is-stream": { "version": "2.0.1", @@ -4916,12 +4928,12 @@ } }, "jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.2.tgz", + "integrity": "sha512-HDAyJ4MNQBboGpUnHAVUNJs6X0lh058s6FuixsFGP7MgJYpD6Vasd6nzSG5iIfXu1zAYlHJ/zsOKNlrenTUBnw==", "dev": true, "requires": { - "array-includes": "^3.1.3", + "array-includes": "^3.1.4", "object.assign": "^4.1.2" } }, @@ -6264,9 +6276,9 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.1.tgz", - "integrity": "sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true }, "prettier-linter-helpers": { diff --git a/package.json b/package.json index 4c5696d9..44a090cb 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.7", + "@shm-open/eslint-config-bundle": "1.9.8", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From bb4b5b77df4c8b38317d09c94a9a195f693d0db8 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 7 Apr 2022 18:00:05 +0800 Subject: [PATCH 271/347] chore(release): 2.1.3 --- CHANGELOG.md | 12 ++++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef00a4fb..dc0885b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.1.3](https://github.com/shm-open/code-push-server/compare/v2.1.2...v2.1.3) (2022-04-07) + + +### Bug Fixes + +* **deps:** update dependency aws-sdk to v2.1109.0 ([1d3cab0](https://github.com/shm-open/code-push-server/commit/1d3cab0c310ca39398e65d334970add1e9119529)) +* **deps:** update dependency body-parser to v1.20.0 ([ae55396](https://github.com/shm-open/code-push-server/commit/ae553969a3154617a60db8890da7a3467c5cbcd4)) +* **deps:** update dependency moment to v2.29.2 ([a4c875d](https://github.com/shm-open/code-push-server/commit/a4c875d7c0b69f88a82c1cb1ee43e2b354ad97b1)) +* **deps:** update dependency redis to v4.0.6 ([442743f](https://github.com/shm-open/code-push-server/commit/442743f20d642d3a0adc3be0f6abbc707544077f)) +* **deps:** update dependency sequelize to v6.18.0 ([34ef968](https://github.com/shm-open/code-push-server/commit/34ef96860518e9d31769bbed6c43b1501b6bb11b)) +* use latest matching deployment ([fb70185](https://github.com/shm-open/code-push-server/commit/fb701856c688a1a62a6f52b3b3de58b1179b954f)), closes [#162](https://github.com/shm-open/code-push-server/issues/162) + ### [2.1.2](https://github.com/shm-open/code-push-server/compare/v2.1.1...v2.1.2) (2022-03-25) diff --git a/package-lock.json b/package-lock.json index bd152103..3a4dd6c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "2.1.2", + "version": "2.1.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6dfbdb4c..fa3bdc0d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "2.1.2", + "version": "2.1.3", "license": "MIT", "repository": { "type": "git", From 5431b624a2b7b0d72a1dd79365c690c536b2b708 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 Apr 2022 23:51:55 +0000 Subject: [PATCH 272/347] fix(deps): update dependency yargs to v17.4.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a4dd6c8..d2c7aa58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8128,9 +8128,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.0.tgz", - "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", diff --git a/package.json b/package.json index fa3bdc0d..bd2a24fc 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "sequelize": "6.18.0", "slash": "3.0.0", "validator": "13.7.0", - "yargs": "17.4.0", + "yargs": "17.4.1", "yazl": "2.5.1" }, "devDependencies": { From e6a8bc43935dbbe656b22a576d6bd605c87bfae3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 12 Apr 2022 04:11:53 +0000 Subject: [PATCH 273/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.9 --- package-lock.json | 133 +++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 73 insertions(+), 62 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a4dd6c8..1dfa1d24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -680,15 +680,15 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.8", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.8.tgz", - "integrity": "sha512-x5wx8/EEsTptjhNamn0ihY/oDRrSWwAcTpsfrH2Yyir9JgNggydI7XtIu1GLHCPYlL5vrtI4/ST258GoF6JoaA==", + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.9.tgz", + "integrity": "sha512-YFpa3OgLdAPqsPiQ/zq8Wj8p9UIV+WryabD45HVQrZ4D+EWCGw9mGE1hQxiuObmMc/X4vriUaA+u1/F9kT/ZrQ==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.18.0", - "@typescript-eslint/parser": "5.18.0", + "@typescript-eslint/eslint-plugin": "5.19.0", + "@typescript-eslint/parser": "5.19.0", "babel-eslint": "10.1.0", - "eslint": "8.12.0", + "eslint": "8.13.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.5.0", "eslint-import-resolver-typescript": "2.7.1", @@ -944,14 +944,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", - "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.19.0.tgz", + "integrity": "sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/type-utils": "5.18.0", - "@typescript-eslint/utils": "5.18.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/type-utils": "5.19.0", + "@typescript-eslint/utils": "5.19.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -978,23 +978,23 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.18.0.tgz", - "integrity": "sha512-hypiw5N0aM2aH91/uMmG7RpyUH3PN/iOhilMwkMFZIbm/Bn/G3ZnbaYdSoAN4PG/XHQjdhBYLi0ZoRZsRYT4hA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.19.0.tgz", + "integrity": "sha512-F+X/TTzmb2UXbghY1LrNLNDjMcGZMhKzXuzvu0xD+YEB77EamLM7zMOLuz2kP5807IJRDLBoAFFPYa7HT62sYg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.18.0" + "@typescript-eslint/utils": "5.19.0" } }, "@typescript-eslint/parser": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", - "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.19.0.tgz", + "integrity": "sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/typescript-estree": "5.18.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", "debug": "^4.3.2" }, "dependencies": { @@ -1016,22 +1016,22 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", - "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz", + "integrity": "sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g==", "dev": true, "requires": { - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/visitor-keys": "5.18.0" + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0" } }, "@typescript-eslint/type-utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", - "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.19.0.tgz", + "integrity": "sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.18.0", + "@typescript-eslint/utils": "5.19.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -1054,19 +1054,19 @@ } }, "@typescript-eslint/types": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", - "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.19.0.tgz", + "integrity": "sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", - "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz", + "integrity": "sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/visitor-keys": "5.18.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1092,26 +1092,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", - "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.19.0.tgz", + "integrity": "sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/typescript-estree": "5.18.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", - "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz", + "integrity": "sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/types": "5.19.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -1357,25 +1357,27 @@ "dev": true }, "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" } }, "arrify": { @@ -2702,6 +2704,15 @@ } } }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -2748,9 +2759,9 @@ } }, "eslint": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", - "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", "dev": true, "requires": { "@eslint/eslintrc": "^1.2.1", diff --git a/package.json b/package.json index fa3bdc0d..4e768033 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.8", + "@shm-open/eslint-config-bundle": "1.9.9", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From d447d4258ec22ac367041a58599a2d803cf4d090 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 12 Apr 2022 15:58:40 +0000 Subject: [PATCH 274/347] fix(deps): update dependency sequelize to v6.19.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1dfa1d24..10fbb8b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7010,9 +7010,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.18.0.tgz", - "integrity": "sha512-x8TW8ovqG8ljZq0Uow1mtMq44hSKPefWEC590R9IWgF2dajEHvKJJpXo1FiRPfj6spOHWOnmOs1Xbb1JPG3Ifg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.19.0.tgz", + "integrity": "sha512-B3oGIdpYBERDjRDm74h7Ky67f6ZLcmBXOA7HscYObiOSo4pD7VBc9mtm44wNV7unc0uk8I1d30nbZBTQCE377A==", "requires": { "@types/debug": "^4.1.7", "@types/validator": "^13.7.1", diff --git a/package.json b/package.json index 4e768033..304d788e 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "4.0.6", - "sequelize": "6.18.0", + "sequelize": "6.19.0", "slash": "3.0.0", "validator": "13.7.0", "yargs": "17.4.0", From 56590b84fb105cf29ddd7a79c87526b9e38175f0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 Apr 2022 18:28:33 +0000 Subject: [PATCH 275/347] chore(deps): update dependency @types/recursive-readdir to v2.2.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1dfa1d24..6006ca25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -902,9 +902,9 @@ "dev": true }, "@types/recursive-readdir": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.0.tgz", - "integrity": "sha512-HGk753KRu2N4mWduovY4BLjYq4jTOL29gV2OfGdGxHcPSWGFkC5RRIdk+VTs5XmYd7MVAD+JwKrcb5+5Y7FOCg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.1.tgz", + "integrity": "sha512-Xd+Ptc4/F2ueInqy5yK2FI5FxtwwbX2+VZpcg+9oYsFJVen8qQKGapCr+Bi5wQtHU1cTXT8s+07lo/nKPgu8Gg==", "dev": true, "requires": { "@types/node": "*" diff --git a/package.json b/package.json index 4e768033..250fa433 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "@types/lodash": "4.14.181", "@types/node-fetch": "2.6.1", "@types/nodemailer": "6.4.4", - "@types/recursive-readdir": "2.2.0", + "@types/recursive-readdir": "2.2.1", "@types/validator": "13.7.2", "@types/yazl": "2.4.2", "concurrently": "7.1.0", From f9068c2dcc4e83aec9820b05b21262fe859f88d6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 16 Apr 2022 02:09:47 +0000 Subject: [PATCH 276/347] fix(deps): update dependency qiniu to v7.5.0 --- package-lock.json | 144 ++++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 90 insertions(+), 56 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6006ca25..0632d664 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1176,9 +1176,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -1191,9 +1191,9 @@ } }, "agentkeepalive": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz", - "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "requires": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -1201,9 +1201,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -1713,9 +1713,9 @@ "dev": true }, "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "caching-transform": { "version": "4.0.0", @@ -2487,14 +2487,14 @@ } }, "degenerator": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.1.tgz", - "integrity": "sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", + "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", "requires": { "ast-types": "^0.13.2", "escodegen": "^1.8.1", "esprima": "^4.0.0", - "vm2": "^3.9.3" + "vm2": "^3.9.8" } }, "delayed-stream": { @@ -3964,9 +3964,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -4269,9 +4269,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -4294,18 +4294,18 @@ } }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "requires": { "agent-base": "6", "debug": "4" }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -5418,11 +5418,18 @@ } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" + }, + "dependencies": { + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + } } }, "mocha": { @@ -6087,9 +6094,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -6380,9 +6387,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -6555,9 +6562,9 @@ "dev": true }, "qiniu": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/qiniu/-/qiniu-7.4.0.tgz", - "integrity": "sha512-q4BXwglXY0Z2WS2TvRtQX2BJvgE0GUnASD7bm5m1RWcXfcL+OBMKJdN4kUe3H2PFfHL1B3srtR+FmJatFCOktA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/qiniu/-/qiniu-7.5.0.tgz", + "integrity": "sha512-GoO66LzPk6MK9LHBadnGjb3zWNmqpuyj/kbxUQzdS0uofkTUVFi76m6be/AwS7RQlny5bk9eDvAYAeJZTQ0PUQ==", "requires": { "agentkeepalive": "^4.0.2", "before": "^0.0.1", @@ -6579,9 +6586,12 @@ } }, "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } }, "querystring": { "version": "0.2.0", @@ -6620,14 +6630,38 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { - "bytes": "3.1.1", - "http-errors": "1.8.1", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "react-is": { @@ -7203,9 +7237,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -7963,9 +7997,9 @@ } }, "vm2": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.7.tgz", - "integrity": "sha512-g/GZ7V0Mlmch3eDVOATvAXr1GsJNg6kQ5PjvYy3HbJMCRn5slNbo/u73Uy7r5yUej1cRa3ZjtoVwcWSQuQ/fow==", + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz", + "integrity": "sha512-xwTm7NLh/uOjARRBs8/95H0e8fT3Ukw5D/JJWhxMbhKzNh1Nu981jQKvkep9iKYNxzlVrdzD0mlBGkDKZWprlw==", "requires": { "acorn": "^8.7.0", "acorn-walk": "^8.2.0" diff --git a/package.json b/package.json index 250fa433..b84dee03 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "node-fetch": "2.6.7", "nodemailer": "6.7.3", "pug": "3.0.2", - "qiniu": "7.4.0", + "qiniu": "7.5.0", "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "4.0.6", From 2699a4a6f2cf77d917a8cce5a0eac348149efa1a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 16 Apr 2022 19:42:59 +0000 Subject: [PATCH 277/347] fix(deps): update dependency fs-extra to v10.1.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6006ca25..2b95cc72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3752,9 +3752,9 @@ } }, "fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", diff --git a/package.json b/package.json index 250fa433..274df648 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "express": "4.17.3", "extract-zip": "2.0.1", "formidable": "2.0.1", - "fs-extra": "10.0.1", + "fs-extra": "10.1.0", "helmet": "5.0.2", "i18n": "0.14.2", "jsonwebtoken": "8.5.1", From b9af976fcd701aa3d1645c8b82f50932c4fb414c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 17 Apr 2022 18:46:23 +0000 Subject: [PATCH 278/347] fix(deps): update dependency moment to v2.29.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6006ca25..36801bbd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5583,9 +5583,9 @@ "dev": true }, "moment": { - "version": "2.29.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==" + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" }, "moment-timezone": { "version": "0.5.34", diff --git a/package.json b/package.json index 250fa433..6b717a48 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "jsonwebtoken": "8.5.1", "kv-logger": "0.5.3", "lodash": "4.17.21", - "moment": "2.29.2", + "moment": "2.29.3", "mysql2": "2.3.3", "node-fetch": "2.6.7", "nodemailer": "6.7.3", From f09b78d8c3e41514ec7a18eed43db7b7d1a4c8b9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 19 Apr 2022 01:44:59 +0000 Subject: [PATCH 279/347] chore(deps): update dependency @types/lodash to v4.14.182 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6006ca25..2aa5839d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -819,9 +819,9 @@ } }, "@types/lodash": { - "version": "4.14.181", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", - "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", + "version": "4.14.182", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", + "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index 250fa433..65838633 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.2", "@types/jsonwebtoken": "8.5.8", - "@types/lodash": "4.14.181", + "@types/lodash": "4.14.182", "@types/node-fetch": "2.6.1", "@types/nodemailer": "6.4.4", "@types/recursive-readdir": "2.2.1", From add7cc85a0b97a8278876175717ff0928684184f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 19 Apr 2022 05:47:26 +0000 Subject: [PATCH 280/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.10 --- package-lock.json | 143 ++++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 81 insertions(+), 64 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2aa5839d..5730db57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -680,13 +680,13 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.9", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.9.tgz", - "integrity": "sha512-YFpa3OgLdAPqsPiQ/zq8Wj8p9UIV+WryabD45HVQrZ4D+EWCGw9mGE1hQxiuObmMc/X4vriUaA+u1/F9kT/ZrQ==", + "version": "1.9.10", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.10.tgz", + "integrity": "sha512-p8OkEO90xlrSV/JmJ/4AgM+omg715NFJ5a3Hf4KN0e6U+CIqAz7DP7X807aRox+ioxcVT8aOMIamm1YXS9wyjA==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.19.0", - "@typescript-eslint/parser": "5.19.0", + "@typescript-eslint/eslint-plugin": "5.20.0", + "@typescript-eslint/parser": "5.20.0", "babel-eslint": "10.1.0", "eslint": "8.13.0", "eslint-config-airbnb-base": "15.0.0", @@ -944,14 +944,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.19.0.tgz", - "integrity": "sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.20.0.tgz", + "integrity": "sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.19.0", - "@typescript-eslint/type-utils": "5.19.0", - "@typescript-eslint/utils": "5.19.0", + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/type-utils": "5.20.0", + "@typescript-eslint/utils": "5.20.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -978,23 +978,23 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.19.0.tgz", - "integrity": "sha512-F+X/TTzmb2UXbghY1LrNLNDjMcGZMhKzXuzvu0xD+YEB77EamLM7zMOLuz2kP5807IJRDLBoAFFPYa7HT62sYg==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.20.0.tgz", + "integrity": "sha512-w5qtx2Wr9x13Dp/3ic9iGOGmVXK5gMwyc8rwVgZU46K9WTjPZSyPvdER9Ycy+B5lNHvoz+z2muWhUvlTpQeu+g==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.19.0" + "@typescript-eslint/utils": "5.20.0" } }, "@typescript-eslint/parser": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.19.0.tgz", - "integrity": "sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.20.0.tgz", + "integrity": "sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.19.0", - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/typescript-estree": "5.19.0", + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/typescript-estree": "5.20.0", "debug": "^4.3.2" }, "dependencies": { @@ -1016,22 +1016,22 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz", - "integrity": "sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.20.0.tgz", + "integrity": "sha512-h9KtuPZ4D/JuX7rpp1iKg3zOH0WNEa+ZIXwpW/KWmEFDxlA/HSfCMhiyF1HS/drTICjIbpA6OqkAhrP/zkCStg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/visitor-keys": "5.19.0" + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/visitor-keys": "5.20.0" } }, "@typescript-eslint/type-utils": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.19.0.tgz", - "integrity": "sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.20.0.tgz", + "integrity": "sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.19.0", + "@typescript-eslint/utils": "5.20.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -1054,19 +1054,19 @@ } }, "@typescript-eslint/types": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.19.0.tgz", - "integrity": "sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.20.0.tgz", + "integrity": "sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz", - "integrity": "sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.20.0.tgz", + "integrity": "sha512-36xLjP/+bXusLMrT9fMMYy1KJAGgHhlER2TqpUVDYUQg4w0q/NW/sg4UGAgVwAqb8V4zYg43KMUpM8vV2lve6w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/visitor-keys": "5.19.0", + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/visitor-keys": "5.20.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1092,26 +1092,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.19.0.tgz", - "integrity": "sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.20.0.tgz", + "integrity": "sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.19.0", - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/typescript-estree": "5.19.0", + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/typescript-estree": "5.20.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz", - "integrity": "sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.20.0.tgz", + "integrity": "sha512-1flRpNF+0CAQkMNlTJ6L/Z5jiODG/e5+7mk6XwtPOUS3UrTz3UOiAg9jG2VtKsWI6rZQfy4C6a232QNRZTRGlg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/types": "5.20.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -2305,9 +2305,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.1.tgz", - "integrity": "sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.0.tgz", + "integrity": "sha512-ylOC9nVy0ak1N+fPIZj00umoZHgUVqmucklP5RT5N+vJof38klKn8Ze6KGyvchdClvEBr6LcQqJpI216LUMqYA==", "dev": true }, "core-util-is": { @@ -2478,12 +2478,13 @@ } }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "degenerator": { @@ -2669,9 +2670,9 @@ } }, "es-abstract": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz", - "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -2685,7 +2686,7 @@ "is-callable": "^1.2.4", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", "object-inspect": "^1.12.0", @@ -3817,6 +3818,12 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "functions-have-names": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", + "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", + "dev": true + }, "generate-function": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", @@ -4184,6 +4191,15 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", @@ -6813,13 +6829,14 @@ "dev": true }, "regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" } }, "regexpp": { diff --git a/package.json b/package.json index 65838633..f8335571 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.9", + "@shm-open/eslint-config-bundle": "1.9.10", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From d74aa2a43670971e8eac227412931ddc9f39a91a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Apr 2022 04:45:40 +0000 Subject: [PATCH 281/347] fix(deps): update dependency cos-nodejs-sdk-v5 to v2.11.7 --- package-lock.json | 12 +++--------- package.json | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5730db57..4d4dfc41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2316,22 +2316,16 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cos-nodejs-sdk-v5": { - "version": "2.11.6", - "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.11.6.tgz", - "integrity": "sha512-K5z9g6yQns1h5tVUUt0T+x9SYrB6QYXslIi5bh8FLVtV4U/Gdv3zpedYSU5IvG+ly23ko9u6usdaKvb+x7Bm7Q==", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.11.7.tgz", + "integrity": "sha512-7/stUjnhqrLDKioKayZD2gYWfh0OSLAwsylr+eWvSsRg0a+C6XMZL9HbcO2UdHEeIye8NOgsg8Q8djfFtb7ZPQ==", "requires": { - "@types/node": "^14.14.20", "conf": "^9.0.0", "mime-types": "^2.1.24", "request": "^2.88.2", "xml2js": "^0.4.19" }, "dependencies": { - "@types/node": { - "version": "14.18.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" - }, "xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", diff --git a/package.json b/package.json index f8335571..8df3ef0f 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "bcryptjs": "2.4.3", "body-parser": "1.20.0", "cookie-parser": "1.4.6", - "cos-nodejs-sdk-v5": "2.11.6", + "cos-nodejs-sdk-v5": "2.11.7", "express": "4.17.3", "extract-zip": "2.0.1", "formidable": "2.0.1", From f59e9ae1d2605b2f5938fc6e8dde6c8e3a20711f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Apr 2022 18:53:51 +0000 Subject: [PATCH 282/347] fix(deps): update dependency aws-sdk to v2.1121.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5730db57..844ec247 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1434,9 +1434,9 @@ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, "aws-sdk": { - "version": "2.1109.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1109.0.tgz", - "integrity": "sha512-kcxDBPIpgN2mTgSxbbTPA5l63mCImDY+1YfZGAkZ9LIk+LYX3CPQC1vVP/iMrGioToB0KLSLechNuBif/6LXUA==", + "version": "2.1121.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1121.0.tgz", + "integrity": "sha512-SEbPk0cFxiqhx8s2n9ozPafWyoIH944fg8Tpy9AxqZlq/tSCphWNE0CgKATnNAKoltWdVHBTKeLwnOAK/7OX7A==", "requires": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index f8335571..0c03a8b3 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1109.0", + "aws-sdk": "2.1121.0", "bcryptjs": "2.4.3", "body-parser": "1.20.0", "cookie-parser": "1.4.6", From 9b2fee3cf87a79ad7d26bf7e342d70efb21af273 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Apr 2022 21:27:37 +0000 Subject: [PATCH 283/347] fix(deps): update dependency express to v4.18.0 --- package-lock.json | 163 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 96 insertions(+), 69 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5730db57..3928055b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3390,84 +3390,77 @@ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", + "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { - "body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" - } + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } }, "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" - }, - "raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "requires": { - "bytes": "3.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "side-channel": "^1.0.4" } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -3613,17 +3606,24 @@ } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "find-cache-dir": { @@ -5996,9 +5996,9 @@ } }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -6995,29 +6995,56 @@ } }, "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -7084,14 +7111,14 @@ } }, "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" } }, "set-blocking": { diff --git a/package.json b/package.json index f8335571..72be44e3 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "body-parser": "1.20.0", "cookie-parser": "1.4.6", "cos-nodejs-sdk-v5": "2.11.6", - "express": "4.17.3", + "express": "4.18.0", "extract-zip": "2.0.1", "formidable": "2.0.1", "fs-extra": "10.0.1", From 4a2d9e3f5f86269bc7be8b22ea6139bf68bef429 Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 26 Apr 2022 14:49:58 +0800 Subject: [PATCH 284/347] chore(release): 2.1.4 --- CHANGELOG.md | 14 ++++++++++++++ package-lock.json | 2 +- package.json | 5 +++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc0885b6..90a9c698 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.1.4](https://github.com/shm-open/code-push-server/compare/v2.1.3...v2.1.4) (2022-04-26) + + +### Bug Fixes + +* **deps:** update dependency aws-sdk to v2.1121.0 ([f59e9ae](https://github.com/shm-open/code-push-server/commit/f59e9ae1d2605b2f5938fc6e8dde6c8e3a20711f)) +* **deps:** update dependency cos-nodejs-sdk-v5 to v2.11.7 ([d74aa2a](https://github.com/shm-open/code-push-server/commit/d74aa2a43670971e8eac227412931ddc9f39a91a)) +* **deps:** update dependency express to v4.18.0 ([9b2fee3](https://github.com/shm-open/code-push-server/commit/9b2fee3cf87a79ad7d26bf7e342d70efb21af273)) +* **deps:** update dependency fs-extra to v10.1.0 ([2699a4a](https://github.com/shm-open/code-push-server/commit/2699a4a6f2cf77d917a8cce5a0eac348149efa1a)) +* **deps:** update dependency moment to v2.29.3 ([b9af976](https://github.com/shm-open/code-push-server/commit/b9af976fcd701aa3d1645c8b82f50932c4fb414c)) +* **deps:** update dependency qiniu to v7.5.0 ([f9068c2](https://github.com/shm-open/code-push-server/commit/f9068c2dcc4e83aec9820b05b21262fe859f88d6)) +* **deps:** update dependency sequelize to v6.19.0 ([d447d42](https://github.com/shm-open/code-push-server/commit/d447d4258ec22ac367041a58599a2d803cf4d090)) +* **deps:** update dependency yargs to v17.4.1 ([5431b62](https://github.com/shm-open/code-push-server/commit/5431b624a2b7b0d72a1dd79365c690c536b2b708)) + ### [2.1.3](https://github.com/shm-open/code-push-server/compare/v2.1.2...v2.1.3) (2022-04-07) diff --git a/package-lock.json b/package-lock.json index 786b213b..e2c0374f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "2.1.3", + "version": "2.1.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d8fa78f2..056664cf 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "2.1.3", + "version": "2.1.4", "license": "MIT", "repository": { "type": "git", @@ -36,7 +36,8 @@ "release-docker": "make release-docker", "test": "make test", "coverage": "make coverage", - "lint": "eslint src" + "lint": "eslint src", + "build-prd": "REDIS_PASSWORD=ryan@0623!redis RDS_PASSWORD=12345678 npm run release" }, "dependencies": { "aliyun-oss-upload-stream": "1.3.0", From f262522a2bbf1b4a3ef023b221848fd3d5aaf186 Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 26 Apr 2022 15:02:20 +0800 Subject: [PATCH 285/347] chore(release): 2.1.5 --- CHANGELOG.md | 2 ++ package-lock.json | 2 +- package.json | 5 ++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90a9c698..6ac08cb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.1.5](https://github.com/shm-open/code-push-server/compare/v2.1.4...v2.1.5) (2022-04-26) + ### [2.1.4](https://github.com/shm-open/code-push-server/compare/v2.1.3...v2.1.4) (2022-04-26) diff --git a/package-lock.json b/package-lock.json index e2c0374f..4a95f174 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "2.1.4", + "version": "2.1.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 056664cf..b6024fea 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "2.1.4", + "version": "2.1.5", "license": "MIT", "repository": { "type": "git", @@ -36,8 +36,7 @@ "release-docker": "make release-docker", "test": "make test", "coverage": "make coverage", - "lint": "eslint src", - "build-prd": "REDIS_PASSWORD=ryan@0623!redis RDS_PASSWORD=12345678 npm run release" + "lint": "eslint src" }, "dependencies": { "aliyun-oss-upload-stream": "1.3.0", From 59fa07ae6c0266f25791b315623b6610ccffc471 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 Apr 2022 12:32:28 +0000 Subject: [PATCH 286/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.11 --- package-lock.json | 168 ++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 83 insertions(+), 87 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a95f174..2d33f5b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -316,9 +316,9 @@ } }, "@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", + "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -680,15 +680,15 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.10.tgz", - "integrity": "sha512-p8OkEO90xlrSV/JmJ/4AgM+omg715NFJ5a3Hf4KN0e6U+CIqAz7DP7X807aRox+ioxcVT8aOMIamm1YXS9wyjA==", + "version": "1.9.11", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.11.tgz", + "integrity": "sha512-78iS8AFaUQLNZgeNCeEv8Jh8Amm2lMXzGX/rUVWl0NXhLc3sC7ocelsJEgb+NQ/D3NJyqaZ2kRsgtIROU2qJLA==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.20.0", - "@typescript-eslint/parser": "5.20.0", + "@typescript-eslint/eslint-plugin": "5.21.0", + "@typescript-eslint/parser": "5.21.0", "babel-eslint": "10.1.0", - "eslint": "8.13.0", + "eslint": "8.14.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.5.0", "eslint-import-resolver-typescript": "2.7.1", @@ -944,14 +944,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.20.0.tgz", - "integrity": "sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.21.0.tgz", + "integrity": "sha512-fTU85q8v5ZLpoZEyn/u1S2qrFOhi33Edo2CZ0+q1gDaWWm0JuPh3bgOyU8lM0edIEYgKLDkPFiZX2MOupgjlyg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.20.0", - "@typescript-eslint/type-utils": "5.20.0", - "@typescript-eslint/utils": "5.20.0", + "@typescript-eslint/scope-manager": "5.21.0", + "@typescript-eslint/type-utils": "5.21.0", + "@typescript-eslint/utils": "5.21.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -978,23 +978,23 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.20.0.tgz", - "integrity": "sha512-w5qtx2Wr9x13Dp/3ic9iGOGmVXK5gMwyc8rwVgZU46K9WTjPZSyPvdER9Ycy+B5lNHvoz+z2muWhUvlTpQeu+g==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.21.0.tgz", + "integrity": "sha512-mzF6ert/6iQoESV0z9v5/mEaJRKL4fv68rHoZ6exM38xjxkw4MNx54B7ferrnMTM/GIRKLDaJ3JPRi+Dxa5Hlg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.20.0" + "@typescript-eslint/utils": "5.21.0" } }, "@typescript-eslint/parser": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.20.0.tgz", - "integrity": "sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.21.0.tgz", + "integrity": "sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.20.0", - "@typescript-eslint/types": "5.20.0", - "@typescript-eslint/typescript-estree": "5.20.0", + "@typescript-eslint/scope-manager": "5.21.0", + "@typescript-eslint/types": "5.21.0", + "@typescript-eslint/typescript-estree": "5.21.0", "debug": "^4.3.2" }, "dependencies": { @@ -1016,22 +1016,22 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.20.0.tgz", - "integrity": "sha512-h9KtuPZ4D/JuX7rpp1iKg3zOH0WNEa+ZIXwpW/KWmEFDxlA/HSfCMhiyF1HS/drTICjIbpA6OqkAhrP/zkCStg==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz", + "integrity": "sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.20.0", - "@typescript-eslint/visitor-keys": "5.20.0" + "@typescript-eslint/types": "5.21.0", + "@typescript-eslint/visitor-keys": "5.21.0" } }, "@typescript-eslint/type-utils": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.20.0.tgz", - "integrity": "sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.21.0.tgz", + "integrity": "sha512-MxmLZj0tkGlkcZCSE17ORaHl8Th3JQwBzyXL/uvC6sNmu128LsgjTX0NIzy+wdH2J7Pd02GN8FaoudJntFvSOw==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.20.0", + "@typescript-eslint/utils": "5.21.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -1054,19 +1054,19 @@ } }, "@typescript-eslint/types": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.20.0.tgz", - "integrity": "sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.21.0.tgz", + "integrity": "sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.20.0.tgz", - "integrity": "sha512-36xLjP/+bXusLMrT9fMMYy1KJAGgHhlER2TqpUVDYUQg4w0q/NW/sg4UGAgVwAqb8V4zYg43KMUpM8vV2lve6w==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz", + "integrity": "sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.20.0", - "@typescript-eslint/visitor-keys": "5.20.0", + "@typescript-eslint/types": "5.21.0", + "@typescript-eslint/visitor-keys": "5.21.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1092,26 +1092,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.20.0.tgz", - "integrity": "sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.21.0.tgz", + "integrity": "sha512-q/emogbND9wry7zxy7VYri+7ydawo2HDZhRZ5k6yggIvXa7PvBbAAZ4PFH/oZLem72ezC4Pr63rJvDK/sTlL8Q==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.20.0", - "@typescript-eslint/types": "5.20.0", - "@typescript-eslint/typescript-estree": "5.20.0", + "@typescript-eslint/scope-manager": "5.21.0", + "@typescript-eslint/types": "5.21.0", + "@typescript-eslint/typescript-estree": "5.21.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.20.0.tgz", - "integrity": "sha512-1flRpNF+0CAQkMNlTJ6L/Z5jiODG/e5+7mk6XwtPOUS3UrTz3UOiAg9jG2VtKsWI6rZQfy4C6a232QNRZTRGlg==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz", + "integrity": "sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/types": "5.21.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -2305,9 +2305,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.0.tgz", - "integrity": "sha512-ylOC9nVy0ak1N+fPIZj00umoZHgUVqmucklP5RT5N+vJof38klKn8Ze6KGyvchdClvEBr6LcQqJpI216LUMqYA==", + "version": "3.22.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.2.tgz", + "integrity": "sha512-Lb+/XT4WC4PaCWWtZpNPaXmjiNDUe5CJuUtbkMrIM1kb1T/jJoAIp+bkVP/r5lHzMr+ZAAF8XHp7+my6Ol0ysQ==", "dev": true }, "core-util-is": { @@ -2754,12 +2754,12 @@ } }, "eslint": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", - "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz", + "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.1", + "@eslint/eslintrc": "^1.2.2", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -3317,9 +3317,9 @@ }, "dependencies": { "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true } } @@ -3813,9 +3813,9 @@ "dev": true }, "functions-have-names": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", - "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, "generate-function": { @@ -4174,9 +4174,9 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, "has-flag": { @@ -4256,18 +4256,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - } - }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -7896,15 +7884,23 @@ "optional": true }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + } } }, "unescape": { diff --git a/package.json b/package.json index b6024fea..7ae9195f 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.10", + "@shm-open/eslint-config-bundle": "1.9.11", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.2", From ab757fc56af496bef954f33fd2cc6784916664fc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 27 Apr 2022 00:55:34 +0000 Subject: [PATCH 287/347] chore(deps): update dependency supertest to v6.2.3 --- package-lock.json | 36 ++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d33f5b2..5571192b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7571,28 +7571,28 @@ "dev": true }, "superagent": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.1.tgz", - "integrity": "sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.3.tgz", + "integrity": "sha512-WA6et4nAvgBCS73lJvv1D0ssI5uk5Gh+TGN/kNe+B608EtcVs/yzfl+OLXTzDs7tOBDIpvgh/WUs1K2OK1zTeQ==", "dev": true, "requires": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.3", - "debug": "^4.3.3", + "debug": "^4.3.4", "fast-safe-stringify": "^2.1.1", "form-data": "^4.0.0", "formidable": "^2.0.1", "methods": "^1.1.2", "mime": "^2.5.0", - "qs": "^6.10.1", + "qs": "^6.10.3", "readable-stream": "^3.6.0", - "semver": "^7.3.5" + "semver": "^7.3.7" }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -7621,25 +7621,25 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "lru-cache": "^6.0.0" } } } }, "supertest": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.2.tgz", - "integrity": "sha512-wCw9WhAtKJsBvh07RaS+/By91NNE0Wh0DN19/hWPlBOU8tAfOtbZoVSV4xXeoKoxgPx0rx2y+y+8660XtE7jzg==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.3.tgz", + "integrity": "sha512-3GSdMYTMItzsSYjnIcljxMVZKPW1J9kYHZY+7yLfD0wpPwww97GeImZC1oOk0S5+wYl2niJwuFusBJqwLqYM3g==", "dev": true, "requires": { "methods": "^1.1.2", - "superagent": "^7.1.0" + "superagent": "^7.1.3" } }, "supervisor": { diff --git a/package.json b/package.json index 7ae9195f..aedb240b 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "nyc": "15.1.0", "should": "13.2.3", "standard-version": "9.3.2", - "supertest": "6.2.2", + "supertest": "6.2.3", "supervisor": "0.12.0", "typescript": "4.6.3" }, From aabb53e786f781b24c1e7e83715fb55dd14615f8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 27 Apr 2022 11:17:45 +0000 Subject: [PATCH 288/347] chore(deps): update dependency @types/cookie-parser to v1.4.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5571192b..e05908a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -734,9 +734,9 @@ } }, "@types/cookie-parser": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.2.tgz", - "integrity": "sha512-uwcY8m6SDQqciHsqcKDGbo10GdasYsPCYkH3hVegj9qAah6pX5HivOnOuI3WYmyQMnOATV39zv/Ybs0bC/6iVg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", "dev": true, "requires": { "@types/express": "*" diff --git a/package.json b/package.json index aedb240b..8e82958d 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "@shm-open/eslint-config-bundle": "1.9.11", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", - "@types/cookie-parser": "1.4.2", + "@types/cookie-parser": "1.4.3", "@types/formidable": "2.0.4", "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.2", From 7bdb226d8e49329553e68eb6728f5ce419807315 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 28 Apr 2022 23:17:30 +0000 Subject: [PATCH 289/347] chore(deps): update dependency typescript to v4.6.4 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index e05908a7..7d4c47ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7871,9 +7871,9 @@ } }, "typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 8e82958d..c4117427 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "standard-version": "9.3.2", "supertest": "6.2.3", "supervisor": "0.12.0", - "typescript": "4.6.3" + "typescript": "4.6.4" }, "files": [ "bin", From 2adad280d937fd9176cdc4a5f20547f9ecd88288 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 29 Apr 2022 20:05:48 +0000 Subject: [PATCH 290/347] fix(deps): update dependency express to v4.18.1 --- package-lock.json | 62 +++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d4c47ed..55499028 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3384,9 +3384,9 @@ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "express": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", - "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -3431,26 +3431,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -4256,6 +4236,30 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -7040,18 +7044,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", diff --git a/package.json b/package.json index c4117427..b0674922 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "body-parser": "1.20.0", "cookie-parser": "1.4.6", "cos-nodejs-sdk-v5": "2.11.7", - "express": "4.18.0", + "express": "4.18.1", "extract-zip": "2.0.1", "formidable": "2.0.1", "fs-extra": "10.1.0", From 9d662d3e15e96f6b995854ef1210facd3fe88ee5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 1 May 2022 05:57:41 +0000 Subject: [PATCH 291/347] chore(deps): update dependency mocha to v10 --- package-lock.json | 57 ++++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d4c47ed..f45a3733 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4108,12 +4108,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -5431,41 +5425,48 @@ } }, "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", - "debug": "4.3.3", + "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", - "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "4.2.1", + "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.1", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", + "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -5511,12 +5512,12 @@ } }, "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" } }, "ms": { @@ -5675,9 +5676,9 @@ } }, "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true }, "natural-compare": { @@ -8139,9 +8140,9 @@ "dev": true }, "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "wrap-ansi": { diff --git a/package.json b/package.json index c4117427..f84997eb 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "@types/validator": "13.7.2", "@types/yazl": "2.4.2", "concurrently": "7.1.0", - "mocha": "9.2.2", + "mocha": "10.0.0", "nyc": "15.1.0", "should": "13.2.3", "standard-version": "9.3.2", From 44470b447ac02134590bb409f840a51332a6dc6f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 2 May 2022 16:11:19 +0000 Subject: [PATCH 292/347] chore(deps): update dependency @types/formidable to v2.0.5 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index f45a3733..5d04b625 100644 --- a/package-lock.json +++ b/package-lock.json @@ -774,9 +774,9 @@ } }, "@types/formidable": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-2.0.4.tgz", - "integrity": "sha512-6HYcnmBCeby/nNGgX9kq1DxUpK2UcB3yoHCr3GzFjjqkpivOdcBSbsXP9NbxLcPEi11Fl/L41rbFCIsteF9sbg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-2.0.5.tgz", + "integrity": "sha512-uvMcdn/KK3maPOaVUAc3HEYbCEhjaGFwww4EsX6IJfWIJ1tzHtDHczuImH3GKdusPnAAmzB07St90uabZeCKPA==", "dev": true, "requires": { "@types/node": "*" diff --git a/package.json b/package.json index f84997eb..330306ff 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.3", - "@types/formidable": "2.0.4", + "@types/formidable": "2.0.5", "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.2", "@types/jsonwebtoken": "8.5.8", From b4e9093d60591d6522c5c0394b4422c5fea6381b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 15 May 2022 04:01:39 +0000 Subject: [PATCH 293/347] chore(deps): update dependency concurrently to v7.2.0 --- package-lock.json | 36 +++++++++++------------------------- package.json | 2 +- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5d04b625..d3213839 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1934,19 +1934,20 @@ } }, "concurrently": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.1.0.tgz", - "integrity": "sha512-Bz0tMlYKZRUDqJlNiF/OImojMB9ruKUz6GCfmhFnSapXgPe+3xzY4byqoKG9tUZ7L2PGEUjfLPOLfIX3labnmw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.2.0.tgz", + "integrity": "sha512-4KIVY5HopDRhN3ndAgfFOLsMk1PZUPgghlgTMZ5Pb5aTrqYg86RcZaIZC2Cz+qpZ9DsX36WHGjvWnXPqdnblhw==", "dev": true, "requires": { "chalk": "^4.1.0", "date-fns": "^2.16.1", "lodash": "^4.17.21", "rxjs": "^6.6.3", + "shell-quote": "^1.7.3", "spawn-command": "^0.0.2-1", "supports-color": "^8.1.0", "tree-kill": "^1.2.2", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "dependencies": { "chalk": { @@ -1984,27 +1985,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true } } }, @@ -7164,6 +7144,12 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, "should": { "version": "13.2.3", "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", diff --git a/package.json b/package.json index 330306ff..5303e978 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@types/recursive-readdir": "2.2.1", "@types/validator": "13.7.2", "@types/yazl": "2.4.2", - "concurrently": "7.1.0", + "concurrently": "7.2.0", "mocha": "10.0.0", "nyc": "15.1.0", "should": "13.2.3", From c1653e1db423c4a493f71ce63a6ee9a006972d22 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 15 May 2022 14:09:44 +0000 Subject: [PATCH 294/347] chore(deps): update dependency standard-version to v9.5.0 --- package-lock.json | 44 ++++++++++++++------------------------------ package.json | 2 +- 2 files changed, 15 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index d3213839..dec9fbdc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2035,9 +2035,9 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "conventional-changelog": { - "version": "3.1.24", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.24.tgz", - "integrity": "sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==", + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", + "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", "dev": true, "requires": { "conventional-changelog-angular": "^5.0.12", @@ -2088,9 +2088,9 @@ "dev": true }, "conventional-changelog-conventionalcommits": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.1.tgz", - "integrity": "sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", + "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, "requires": { "compare-func": "^2.0.0", @@ -3717,15 +3717,6 @@ "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "^1.0.0" - } - }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -5737,12 +5728,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, "nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -7367,22 +7352,21 @@ } }, "standard-version": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.3.2.tgz", - "integrity": "sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz", + "integrity": "sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==", "dev": true, "requires": { "chalk": "^2.4.2", - "conventional-changelog": "3.1.24", + "conventional-changelog": "3.1.25", "conventional-changelog-config-spec": "2.1.0", - "conventional-changelog-conventionalcommits": "4.6.1", + "conventional-changelog-conventionalcommits": "4.6.3", "conventional-recommended-bump": "6.1.0", "detect-indent": "^6.0.0", "detect-newline": "^3.1.0", "dotgitignore": "^2.1.0", "figures": "^3.1.0", "find-up": "^5.0.0", - "fs-access": "^1.0.1", "git-semver-tags": "^4.0.0", "semver": "^7.1.1", "stringify-package": "^1.0.1", @@ -7864,9 +7848,9 @@ "dev": true }, "uglify-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.1.tgz", - "integrity": "sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==", + "version": "3.15.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.5.tgz", + "integrity": "sha512-hNM5q5GbBRB5xB+PMqVRcgYe4c8jbyZ1pzZhS6jbq54/4F2gFK869ZheiE5A8/t+W5jtTNpWef/5Q9zk639FNQ==", "dev": true, "optional": true }, diff --git a/package.json b/package.json index 5303e978..3cddcbe1 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "mocha": "10.0.0", "nyc": "15.1.0", "should": "13.2.3", - "standard-version": "9.3.2", + "standard-version": "9.5.0", "supertest": "6.2.3", "supervisor": "0.12.0", "typescript": "4.6.4" From fd9f58e580e516cb188b4bea8da3eeb837bacae6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 16 May 2022 05:13:44 +0000 Subject: [PATCH 295/347] fix(deps): update dependency yargs to v17.5.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index dec9fbdc..016a661f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8178,9 +8178,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", - "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", diff --git a/package.json b/package.json index 3cddcbe1..7d1e4c4d 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "sequelize": "6.19.0", "slash": "3.0.0", "validator": "13.7.0", - "yargs": "17.4.1", + "yargs": "17.5.1", "yazl": "2.5.1" }, "devDependencies": { From aefde366d6eb98ea401214709051ebab5b6f9ecc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 17 May 2022 19:03:19 +0000 Subject: [PATCH 296/347] fix(deps): update dependency helmet to v5.1.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index dec9fbdc..deccbacf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4197,9 +4197,9 @@ "dev": true }, "helmet": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.0.2.tgz", - "integrity": "sha512-QWlwUZZ8BtlvwYVTSDTBChGf8EOcQ2LkGMnQJxSzD1mUu8CCjXJZq/BXP8eWw4kikRnzlhtYo3lCk0ucmYA3Vg==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.1.0.tgz", + "integrity": "sha512-klsunXs8rgNSZoaUrNeuCiWUxyc+wzucnEnFejUg3/A+CaF589k9qepLZZ1Jehnzig7YbD4hEuscGXuBY3fq+g==" }, "hexoid": { "version": "1.0.0", diff --git a/package.json b/package.json index 3cddcbe1..62317ca3 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "extract-zip": "2.0.1", "formidable": "2.0.1", "fs-extra": "10.1.0", - "helmet": "5.0.2", + "helmet": "5.1.0", "i18n": "0.14.2", "jsonwebtoken": "8.5.1", "kv-logger": "0.5.3", From 25ee4c9d712a1391d13b1d47ba6fbad619d574e0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 18 May 2022 15:04:40 +0000 Subject: [PATCH 297/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.12 --- package-lock.json | 291 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 173 insertions(+), 120 deletions(-) diff --git a/package-lock.json b/package-lock.json index dec9fbdc..4662528d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -316,19 +316,19 @@ } }, "@eslint/eslintrc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", - "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", + "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", + "espree": "^9.3.2", "globals": "^13.9.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -354,9 +354,9 @@ } }, "globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -368,6 +368,15 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -680,15 +689,15 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.11", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.11.tgz", - "integrity": "sha512-78iS8AFaUQLNZgeNCeEv8Jh8Amm2lMXzGX/rUVWl0NXhLc3sC7ocelsJEgb+NQ/D3NJyqaZ2kRsgtIROU2qJLA==", + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.12.tgz", + "integrity": "sha512-2v8zCS59PRn5cq5JI86jAtQOOCkCVDXZVwM24eZNfDY+5DBV56QqpziLZGShKl7XJ+PWRyyzTb6+FRd/HEIlOQ==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.21.0", - "@typescript-eslint/parser": "5.21.0", + "@typescript-eslint/eslint-plugin": "5.25.0", + "@typescript-eslint/parser": "5.25.0", "babel-eslint": "10.1.0", - "eslint": "8.14.0", + "eslint": "8.15.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.5.0", "eslint-import-resolver-typescript": "2.7.1", @@ -697,7 +706,7 @@ "eslint-plugin-jsx-a11y": "6.5.1", "eslint-plugin-prettier": "4.0.0", "eslint-plugin-react": "7.29.4", - "eslint-plugin-react-hooks": "4.4.0", + "eslint-plugin-react-hooks": "4.5.0", "eslint-plugin-react-native": "4.0.0", "eslint-plugin-taro": "3.3.20", "prettier": "2.6.2" @@ -806,7 +815,7 @@ "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "@types/jsonwebtoken": { @@ -944,19 +953,19 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.21.0.tgz", - "integrity": "sha512-fTU85q8v5ZLpoZEyn/u1S2qrFOhi33Edo2CZ0+q1gDaWWm0JuPh3bgOyU8lM0edIEYgKLDkPFiZX2MOupgjlyg==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.25.0.tgz", + "integrity": "sha512-icYrFnUzvm+LhW0QeJNKkezBu6tJs9p/53dpPLFH8zoM9w1tfaKzVurkPotEpAqQ8Vf8uaFyL5jHd0Vs6Z0ZQg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.21.0", - "@typescript-eslint/type-utils": "5.21.0", - "@typescript-eslint/utils": "5.21.0", - "debug": "^4.3.2", + "@typescript-eslint/scope-manager": "5.25.0", + "@typescript-eslint/type-utils": "5.25.0", + "@typescript-eslint/utils": "5.25.0", + "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", + "ignore": "^5.2.0", "regexpp": "^3.2.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { @@ -974,28 +983,37 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "@typescript-eslint/experimental-utils": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.21.0.tgz", - "integrity": "sha512-mzF6ert/6iQoESV0z9v5/mEaJRKL4fv68rHoZ6exM38xjxkw4MNx54B7ferrnMTM/GIRKLDaJ3JPRi+Dxa5Hlg==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.25.0.tgz", + "integrity": "sha512-YTe9rmslCh1xAvNa3X+uZe4L2lsyb8V3WIeK9z46nNiPswk/V/0SGLJSfo8W9Hj4R7ak7bolazXGn3DErmb8QA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.21.0" + "@typescript-eslint/utils": "5.25.0" } }, "@typescript-eslint/parser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.21.0.tgz", - "integrity": "sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.25.0.tgz", + "integrity": "sha512-r3hwrOWYbNKP1nTcIw/aZoH+8bBnh/Lh1iDHoFpyG4DnCpvEdctrSl6LOo19fZbzypjQMHdajolxs6VpYoChgA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.21.0", - "@typescript-eslint/types": "5.21.0", - "@typescript-eslint/typescript-estree": "5.21.0", - "debug": "^4.3.2" + "@typescript-eslint/scope-manager": "5.25.0", + "@typescript-eslint/types": "5.25.0", + "@typescript-eslint/typescript-estree": "5.25.0", + "debug": "^4.3.4" }, "dependencies": { "debug": { @@ -1016,23 +1034,23 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz", - "integrity": "sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.25.0.tgz", + "integrity": "sha512-p4SKTFWj+2VpreUZ5xMQsBMDdQ9XdRvODKXN4EksyBjFp2YvQdLkyHqOffakYZPuWJUDNu3jVXtHALDyTv3cww==", "dev": true, "requires": { - "@typescript-eslint/types": "5.21.0", - "@typescript-eslint/visitor-keys": "5.21.0" + "@typescript-eslint/types": "5.25.0", + "@typescript-eslint/visitor-keys": "5.25.0" } }, "@typescript-eslint/type-utils": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.21.0.tgz", - "integrity": "sha512-MxmLZj0tkGlkcZCSE17ORaHl8Th3JQwBzyXL/uvC6sNmu128LsgjTX0NIzy+wdH2J7Pd02GN8FaoudJntFvSOw==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.25.0.tgz", + "integrity": "sha512-B6nb3GK3Gv1Rsb2pqalebe/RyQoyG/WDy9yhj8EE0Ikds4Xa8RR28nHz+wlt4tMZk5bnAr0f3oC8TuDAd5CPrw==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.21.0", - "debug": "^4.3.2", + "@typescript-eslint/utils": "5.25.0", + "debug": "^4.3.4", "tsutils": "^3.21.0" }, "dependencies": { @@ -1054,23 +1072,23 @@ } }, "@typescript-eslint/types": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.21.0.tgz", - "integrity": "sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.25.0.tgz", + "integrity": "sha512-7fWqfxr0KNHj75PFqlGX24gWjdV/FDBABXL5dyvBOWHpACGyveok8Uj4ipPX/1fGU63fBkzSIycEje4XsOxUFA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz", - "integrity": "sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.25.0.tgz", + "integrity": "sha512-MrPODKDych/oWs/71LCnuO7NyR681HuBly2uLnX3r5i4ME7q/yBqC4hW33kmxtuauLTM0OuBOhhkFaxCCOjEEw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.21.0", - "@typescript-eslint/visitor-keys": "5.21.0", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "5.25.0", + "@typescript-eslint/visitor-keys": "5.25.0", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { @@ -1088,31 +1106,40 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "@typescript-eslint/utils": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.21.0.tgz", - "integrity": "sha512-q/emogbND9wry7zxy7VYri+7ydawo2HDZhRZ5k6yggIvXa7PvBbAAZ4PFH/oZLem72ezC4Pr63rJvDK/sTlL8Q==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.25.0.tgz", + "integrity": "sha512-qNC9bhnz/n9Kba3yI6HQgQdBLuxDoMgdjzdhSInZh6NaDnFpTUlwNGxplUFWfY260Ya0TRPvkg9dd57qxrJI9g==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.21.0", - "@typescript-eslint/types": "5.21.0", - "@typescript-eslint/typescript-estree": "5.21.0", + "@typescript-eslint/scope-manager": "5.25.0", + "@typescript-eslint/types": "5.25.0", + "@typescript-eslint/typescript-estree": "5.25.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz", - "integrity": "sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.25.0.tgz", + "integrity": "sha512-yd26vFgMsC4h2dgX4+LR+GeicSKIfUvZREFLf3DDjZPtqgLx5AJZr6TetMNwFP9hcKreTTeztQYBTNbNoOycwA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.21.0", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "5.25.0", + "eslint-visitor-keys": "^3.3.0" } }, "@ungap/promise-all-settled": { @@ -1338,14 +1365,14 @@ "dev": true }, "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" } @@ -1420,7 +1447,7 @@ "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, "asynckit": { @@ -1481,9 +1508,9 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axe-core": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", - "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz", + "integrity": "sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==", "dev": true }, "axobject-query": { @@ -2285,9 +2312,9 @@ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, "core-js-pure": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.2.tgz", - "integrity": "sha512-Lb+/XT4WC4PaCWWtZpNPaXmjiNDUe5CJuUtbkMrIM1kb1T/jJoAIp+bkVP/r5lHzMr+ZAAF8XHp7+my6Ol0ysQ==", + "version": "3.22.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.5.tgz", + "integrity": "sha512-8xo9R00iYD7TcV7OrC98GwxiUEAabVWO3dix+uyWjnYrx9fyASLlIX+f/3p5dW5qByaP2bcZ8X/T47s55et/tA==", "dev": true }, "core-util-is": { @@ -2644,17 +2671,19 @@ } }, "es-abstract": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", - "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", @@ -2666,9 +2695,10 @@ "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" }, "dependencies": { "has-symbols": { @@ -2734,12 +2764,12 @@ } }, "eslint": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz", - "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", + "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.2", + "@eslint/eslintrc": "^1.2.3", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -2750,7 +2780,7 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2766,7 +2796,7 @@ "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", @@ -2839,9 +2869,9 @@ } }, "globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -2869,6 +2899,15 @@ "type-check": "~0.4.0" } }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3222,9 +3261,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz", - "integrity": "sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz", + "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==", "dev": true }, "eslint-plugin-react-native": { @@ -3286,13 +3325,13 @@ "dev": true }, "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "dependencies": { @@ -3777,6 +3816,18 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -4902,9 +4953,9 @@ } }, "jsx-ast-utils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.2.tgz", - "integrity": "sha512-HDAyJ4MNQBboGpUnHAVUNJs6X0lh058s6FuixsFGP7MgJYpD6Vasd6nzSG5iIfXu1zAYlHJ/zsOKNlrenTUBnw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", + "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -5930,13 +5981,13 @@ } }, "object.hasown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "object.values": { @@ -7479,23 +7530,25 @@ } }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "string_decoder": { diff --git a/package.json b/package.json index 3cddcbe1..a9d081fd 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.11", + "@shm-open/eslint-config-bundle": "1.9.12", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.3", From 732a4ed6e82d2047b6df91ff004fc482aaffab6b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 8 Jun 2022 15:37:18 +0000 Subject: [PATCH 298/347] fix(deps): update dependency qiniu to v7.7.0 --- package-lock.json | 132 ++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 70 insertions(+), 64 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4662528d..b60f2722 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1190,9 +1190,9 @@ "dev": true }, "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", + "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==" }, "agent-base": { "version": "6.0.2", @@ -1310,7 +1310,7 @@ "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "anymatch": { "version": "3.1.2", @@ -1575,7 +1575,7 @@ "before": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/before/-/before-0.0.1.tgz", - "integrity": "sha1-0hJw6YdH6QlyU0QehorbMlrnLdo=" + "integrity": "sha512-1J5SWbkoVJH9DTALN8igB4p+nPKZzPrJ/HomqBDLpfUvDXCdjdBmBUcH5McZfur0lftVssVU6BZug5NYh87zTw==" }, "binary-extensions": { "version": "2.2.0", @@ -2309,7 +2309,7 @@ "copy-to": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", - "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==" }, "core-js-pure": { "version": "3.22.5", @@ -2352,7 +2352,7 @@ "crc32": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz", - "integrity": "sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo=" + "integrity": "sha512-PFZEGbDUeoNbL2GHIEpJRQGheXReDody/9axKTxhXtQqIL443wnNigtVZO9iuCIMPApKZRv7k2xr8euXHqNxQQ==" }, "cross-spawn": { "version": "7.0.3", @@ -2473,7 +2473,7 @@ "default-user-agent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", - "integrity": "sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY=", + "integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==", "requires": { "os-name": "~1.0.3" } @@ -2512,12 +2512,12 @@ "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detect-indent": { "version": "6.1.0", @@ -2549,7 +2549,7 @@ "digest-header": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/digest-header/-/digest-header-0.0.1.tgz", - "integrity": "sha1-Ecz23uxXZqw3l0TZAcEsuklRS+Y=", + "integrity": "sha512-Qi0KOZgRnkQJuvMWbs1ZRRajEnbsMU8xlJI4rHIbPC+skHQ30heO5cIHpUFT4jAvAe+zPtdavLSAxASqoyZ3cg==", "requires": { "utility": "0.1.11" }, @@ -3485,7 +3485,7 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "requires": { "is-extendable": "^0.1.0" } @@ -3782,7 +3782,7 @@ "ftp": { "version": "0.3.10", "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==", "requires": { "readable-stream": "1.1.x", "xregexp": "2.0.0" @@ -3791,12 +3791,12 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -4007,7 +4007,7 @@ "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "requires": { "graceful-fs": "^4.1.6" } @@ -4272,6 +4272,30 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -4334,7 +4358,7 @@ "humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "requires": { "ms": "^2.0.0" } @@ -4446,9 +4470,9 @@ } }, "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" }, "ipaddr.js": { "version": "1.9.1", @@ -4524,7 +4548,7 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" }, "is-extglob": { "version": "2.1.1", @@ -5010,7 +5034,7 @@ "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -5604,6 +5628,11 @@ } } }, + "mockdate": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", + "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" + }, "modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -6048,7 +6077,7 @@ "os-name": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", - "integrity": "sha1-GzefZINa98Wn9JizV8uVIVwVnt8=", + "integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==", "requires": { "osx-release": "^1.0.0", "win-release": "^1.0.0" @@ -6057,7 +6086,7 @@ "osx-release": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", - "integrity": "sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=", + "integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==", "requires": { "minimist": "^1.1.0" } @@ -6124,13 +6153,13 @@ } }, "pac-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz", - "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz", + "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==", "requires": { - "degenerator": "^3.0.1", + "degenerator": "^3.0.2", "ip": "^1.1.5", - "netmask": "^2.0.1" + "netmask": "^2.0.2" } }, "package-hash": { @@ -6207,7 +6236,7 @@ "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "requires": { "through": "~2.3" } @@ -6306,7 +6335,7 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, "prettier": { "version": "2.6.2", @@ -6577,9 +6606,9 @@ "dev": true }, "qiniu": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/qiniu/-/qiniu-7.5.0.tgz", - "integrity": "sha512-GoO66LzPk6MK9LHBadnGjb3zWNmqpuyj/kbxUQzdS0uofkTUVFi76m6be/AwS7RQlny5bk9eDvAYAeJZTQ0PUQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/qiniu/-/qiniu-7.7.0.tgz", + "integrity": "sha512-p8wZHDXzqCVtlPIygqIzpO6P59e5KcNAOf85oi6O7K5M4xjnwoi6L3e0F8IXgd38nb2PzWOH3XUkSbNAYW0g7Q==", "requires": { "agentkeepalive": "^4.0.2", "before": "^0.0.1", @@ -6589,6 +6618,7 @@ "encodeurl": "^1.0.1", "formstream": "^1.1.0", "mime": "^2.4.4", + "mockdate": "^3.0.5", "tunnel-agent": "^0.6.0", "urllib": "^2.34.1" }, @@ -6653,30 +6683,6 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } } }, "react-is": { @@ -8064,9 +8070,9 @@ }, "dependencies": { "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" } } }, diff --git a/package.json b/package.json index a9d081fd..6e1ce3dc 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "node-fetch": "2.6.7", "nodemailer": "6.7.3", "pug": "3.0.2", - "qiniu": "7.5.0", + "qiniu": "7.7.0", "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "4.0.6", From 5a744c6ea111e74a834307131bf0a8a5dbecb137 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 17:10:45 +0000 Subject: [PATCH 299/347] fix(deps): update dependency redis to v4.2.0 --- package-lock.json | 104 ++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 46 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4662528d..c6577622 100644 --- a/package-lock.json +++ b/package-lock.json @@ -572,42 +572,6 @@ "make-plural": "^7.0.0" } }, - "@node-redis/bloom": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@node-redis/bloom/-/bloom-1.0.1.tgz", - "integrity": "sha512-mXEBvEIgF4tUzdIN89LiYsbi6//EdpFA7L8M+DHCvePXg+bfHWi+ct5VI6nHUFQE5+ohm/9wmgihCH3HSkeKsw==" - }, - "@node-redis/client": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@node-redis/client/-/client-1.0.5.tgz", - "integrity": "sha512-ESZ3bd1f+od62h4MaBLKum+klVJfA4wAeLHcVQBkoXa1l0viFesOWnakLQqKg+UyrlJhZmXJWtu0Y9v7iTMrig==", - "requires": { - "cluster-key-slot": "1.1.0", - "generic-pool": "3.8.2", - "redis-parser": "3.0.0", - "yallist": "4.0.0" - } - }, - "@node-redis/graph": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@node-redis/graph/-/graph-1.0.0.tgz", - "integrity": "sha512-mRSo8jEGC0cf+Rm7q8mWMKKKqkn6EAnA9IA2S3JvUv/gaWW/73vil7GLNwion2ihTptAm05I9LkepzfIXUKX5g==" - }, - "@node-redis/json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@node-redis/json/-/json-1.0.2.tgz", - "integrity": "sha512-qVRgn8WfG46QQ08CghSbY4VhHFgaTY71WjpwRBGEuqGPfWwfRcIf3OqSpR7Q/45X+v3xd8mvYjywqh0wqJ8T+g==" - }, - "@node-redis/search": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@node-redis/search/-/search-1.0.5.tgz", - "integrity": "sha512-MCOL8iCKq4v+3HgEQv8zGlSkZyXSXtERgrAJ4TSryIG/eLFy84b57KmNNa/V7M1Q2Wd2hgn2nPCGNcQtk1R1OQ==" - }, - "@node-redis/time-series": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@node-redis/time-series/-/time-series-1.0.2.tgz", - "integrity": "sha512-HGQ8YooJ8Mx7l28tD7XjtB3ImLEjlUxG1wC1PAjxu6hPJqjPshUZxAICzDqDjtIbhDTf48WXXUcx8TQJB1XTKA==" - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -688,6 +652,41 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, + "@redis/bloom": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.0.2.tgz", + "integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==" + }, + "@redis/client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.2.0.tgz", + "integrity": "sha512-a8Nlw5fv2EIAFJxTDSSDVUT7yfBGpZO96ybZXzQpgkyLg/dxtQ1uiwTc0EGfzg1mrPjZokeBSEGTbGXekqTNOg==", + "requires": { + "cluster-key-slot": "1.1.0", + "generic-pool": "3.8.2", + "yallist": "4.0.0" + } + }, + "@redis/graph": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.0.1.tgz", + "integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==" + }, + "@redis/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.3.tgz", + "integrity": "sha512-4X0Qv0BzD9Zlb0edkUoau5c1bInWSICqXAGrpwEltkncUwcxJIGEcVryZhLgb0p/3PkKaLIWkjhHRtLe9yiA7Q==" + }, + "@redis/search": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.0.6.tgz", + "integrity": "sha512-pP+ZQRis5P21SD6fjyCeLcQdps+LuTzp2wdUbzxEmNhleighDDTD5ck8+cYof+WLec4csZX7ks+BuoMw0RaZrA==" + }, + "@redis/time-series": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz", + "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==" + }, "@shm-open/eslint-config-bundle": { "version": "1.9.12", "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.12.tgz", @@ -6830,29 +6829,16 @@ } }, "redis": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.0.6.tgz", - "integrity": "sha512-IaPAxgF5dV0jx+A9l6yd6R9/PAChZIoAskDVRzUODeLDNhsMlq7OLLTmu0AwAr0xjrJ1bibW5xdpRwqIQ8Q0Xg==", - "requires": { - "@node-redis/bloom": "1.0.1", - "@node-redis/client": "1.0.5", - "@node-redis/graph": "1.0.0", - "@node-redis/json": "1.0.2", - "@node-redis/search": "1.0.5", - "@node-redis/time-series": "1.0.2" - } - }, - "redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=" - }, - "redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=", - "requires": { - "redis-errors": "^1.0.0" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.2.0.tgz", + "integrity": "sha512-bCR0gKVhIXFg8zCQjXEANzgI01DDixtPZgIUZHBCmwqixnu+MK3Tb2yqGjh+HCLASQVVgApiwhNkv+FoedZOGQ==", + "requires": { + "@redis/bloom": "1.0.2", + "@redis/client": "1.2.0", + "@redis/graph": "1.0.1", + "@redis/json": "1.0.3", + "@redis/search": "1.0.6", + "@redis/time-series": "1.0.3" } }, "regenerator-runtime": { diff --git a/package.json b/package.json index a9d081fd..9591f3e2 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "qiniu": "7.5.0", "rand-token": "1.0.1", "recursive-readdir": "2.2.2", - "redis": "4.0.6", + "redis": "4.2.0", "sequelize": "6.19.0", "slash": "3.0.0", "validator": "13.7.0", From 85ad522d5b4cb31f57cf2b9bca35d9d64d35e45d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 13:25:56 +0000 Subject: [PATCH 300/347] fix(deps): update dependency nodemailer to v6.7.7 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4662528d..fdc4f0dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5757,9 +5757,9 @@ } }, "nodemailer": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.3.tgz", - "integrity": "sha512-KUdDsspqx89sD4UUyUKzdlUOper3hRkDVkrKh/89G+d9WKsU5ox51NWS4tB1XR5dPUdR4SP0E3molyEfOvSa3g==" + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", + "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" }, "normalize-package-data": { "version": "3.0.3", diff --git a/package.json b/package.json index a9d081fd..dd2bb608 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "moment": "2.29.3", "mysql2": "2.3.3", "node-fetch": "2.6.7", - "nodemailer": "6.7.3", + "nodemailer": "6.7.7", "pug": "3.0.2", "qiniu": "7.5.0", "rand-token": "1.0.1", From eb3c14abcc8b673f485088f1b8684504a34b60ac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Jul 2022 18:31:34 +0000 Subject: [PATCH 301/347] fix(deps): update dependency aws-sdk to v2.1176.0 --- package-lock.json | 136 +++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 92 insertions(+), 46 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4662528d..292dd657 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1460,10 +1460,15 @@ "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, "aws-sdk": { - "version": "2.1121.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1121.0.tgz", - "integrity": "sha512-SEbPk0cFxiqhx8s2n9ozPafWyoIH944fg8Tpy9AxqZlq/tSCphWNE0CgKATnNAKoltWdVHBTKeLwnOAK/7OX7A==", + "version": "2.1176.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1176.0.tgz", + "integrity": "sha512-jinSKjACYHIkkz0UlFwQXwz8HAHZIeJg5wOnZoMTKU3/WM6Vh26hZJJ6XkwDAfBmyWp3V9qFdQoSAiO8SeXKjw==", "requires": { "buffer": "4.9.2", "events": "1.1.1", @@ -1472,14 +1477,20 @@ "querystring": "0.2.0", "sax": "1.2.1", "url": "0.10.3", - "uuid": "3.3.2", + "util": "^0.12.4", + "uuid": "8.0.0", "xml2js": "0.4.19" }, "dependencies": { "sax": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==" }, "xml2js": { "version": "0.4.19", @@ -1493,7 +1504,7 @@ "xmlbuilder": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==" } } }, @@ -2482,7 +2493,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -2674,7 +2684,6 @@ "version": "1.20.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -2704,8 +2713,7 @@ "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" } } }, @@ -2722,7 +2730,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -3400,7 +3407,7 @@ "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==" }, "express": { "version": "4.18.0", @@ -3680,6 +3687,14 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, "foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -3820,7 +3835,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -3837,8 +3851,7 @@ "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, "generate-function": { "version": "2.3.1", @@ -3967,7 +3980,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -4192,8 +4204,7 @@ "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, "has-flag": { "version": "3.0.0", @@ -4205,7 +4216,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "requires": { "get-intrinsic": "^1.1.1" } @@ -4438,7 +4448,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -4455,6 +4464,15 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4465,7 +4483,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "requires": { "has-bigints": "^1.0.1" } @@ -4483,7 +4500,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -4492,8 +4508,7 @@ "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-core-module": { "version": "2.8.1", @@ -4507,7 +4522,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -4537,6 +4551,14 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -4549,8 +4571,7 @@ "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, "is-number": { "version": "7.0.0", @@ -4562,7 +4583,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -4601,7 +4621,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -4616,7 +4635,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -4625,7 +4643,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -4639,6 +4656,18 @@ "text-extensions": "^1.0.0" } }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -4654,7 +4683,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -5943,14 +5971,12 @@ "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -6568,7 +6594,7 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" }, "q": { "version": "1.5.1", @@ -6611,7 +6637,7 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" }, "queue-microtask": { "version": "1.2.3", @@ -6865,7 +6891,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -7533,7 +7558,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -7544,7 +7568,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -7911,7 +7934,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -7922,8 +7944,7 @@ "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" } } }, @@ -7963,7 +7984,7 @@ "url": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -7991,6 +8012,19 @@ "utility": "^1.16.1" } }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8102,7 +8136,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -8117,6 +8150,19 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, "win-release": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", diff --git a/package.json b/package.json index a9d081fd..e5149ffc 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "dependencies": { "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1121.0", + "aws-sdk": "2.1176.0", "bcryptjs": "2.4.3", "body-parser": "1.20.0", "cookie-parser": "1.4.6", From fa00c74cf951278ec547c00d0ed713b40a2710d3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Jul 2022 00:59:44 +0000 Subject: [PATCH 302/347] fix(deps): update dependency cos-nodejs-sdk-v5 to v2.11.12 --- package-lock.json | 44 ++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index 93cd274d..835f593c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1434,7 +1434,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, "ast-types": { "version": "0.13.4", @@ -1500,7 +1500,7 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" }, "aws4": { "version": "1.11.0", @@ -1562,7 +1562,7 @@ "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "requires": { "tweetnacl": "^0.14.3" } @@ -1805,7 +1805,7 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "chalk": { "version": "2.4.2", @@ -2323,9 +2323,9 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cos-nodejs-sdk-v5": { - "version": "2.11.7", - "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.11.7.tgz", - "integrity": "sha512-7/stUjnhqrLDKioKayZD2gYWfh0OSLAwsylr+eWvSsRg0a+C6XMZL9HbcO2UdHEeIye8NOgsg8Q8djfFtb7ZPQ==", + "version": "2.11.12", + "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.11.12.tgz", + "integrity": "sha512-XtSlcrwgcyO8K0LCwNmimtkBErC1yJ55cvZ7nWFWsT0c2AWBw8F/ftGvUhZIZhh7B2SlPdXsFZg+QOU7cwI2GQ==", "requires": { "conf": "^9.0.0", "mime-types": "^2.1.24", @@ -2380,7 +2380,7 @@ "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "requires": { "assert-plus": "^1.0.0" } @@ -2613,7 +2613,7 @@ "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -3499,7 +3499,7 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" }, "fast-deep-equal": { "version": "3.1.3", @@ -3673,7 +3673,7 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" }, "form-data": { "version": "2.3.3", @@ -4007,7 +4007,7 @@ "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "requires": { "assert-plus": "^1.0.0" } @@ -4126,7 +4126,7 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" }, "har-validator": { "version": "5.1.5", @@ -4304,7 +4304,7 @@ "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -4683,7 +4683,7 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -4837,7 +4837,7 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "jsesc": { "version": "2.5.2", @@ -6224,7 +6224,7 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "pg-connection-string": { "version": "2.5.0", @@ -6444,9 +6444,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "pug": { "version": "3.0.2", @@ -7846,7 +7846,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "type-check": { "version": "0.3.2", @@ -8039,7 +8039,7 @@ "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", diff --git a/package.json b/package.json index cad23425..12af9343 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "bcryptjs": "2.4.3", "body-parser": "1.20.0", "cookie-parser": "1.4.6", - "cos-nodejs-sdk-v5": "2.11.7", + "cos-nodejs-sdk-v5": "2.11.12", "express": "4.18.1", "extract-zip": "2.0.1", "formidable": "2.0.1", From b665b734d85bf6188da0abe9e70494c52e30b3a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Jul 2022 01:01:51 +0000 Subject: [PATCH 303/347] chore(deps): update dependency @shm-open/eslint-config-bundle to v1.9.13 --- package-lock.json | 286 +++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 157 insertions(+), 131 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4d4640cf..c61f18a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -242,18 +242,18 @@ "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" }, "@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", + "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz", - "integrity": "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.6.tgz", + "integrity": "sha512-cOu5wH2JFBgMjje+a+fz2JNIWU4GzYpl05oSob3UDvBEh6EuIn+TXFHMmBbhSb+k/4HMzgKCQfEEDArAWNF9Cw==", "dev": true, "requires": { "core-js-pure": "^3.20.2", @@ -316,15 +316,15 @@ } }, "@eslint/eslintrc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", - "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.2", - "globals": "^13.9.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -354,9 +354,9 @@ } }, "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -688,27 +688,27 @@ "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==" }, "@shm-open/eslint-config-bundle": { - "version": "1.9.12", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.12.tgz", - "integrity": "sha512-2v8zCS59PRn5cq5JI86jAtQOOCkCVDXZVwM24eZNfDY+5DBV56QqpziLZGShKl7XJ+PWRyyzTb6+FRd/HEIlOQ==", + "version": "1.9.13", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.13.tgz", + "integrity": "sha512-QwyV+aZm5aIcNV1payDz46z3yJE4tUvKFKUxtxLAqysPwJeSg6CklVXuWHc2e8hStcF5U0dMLEoKAg60EOxGBA==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "5.25.0", - "@typescript-eslint/parser": "5.25.0", + "@typescript-eslint/eslint-plugin": "5.30.6", + "@typescript-eslint/parser": "5.30.6", "babel-eslint": "10.1.0", - "eslint": "8.15.0", + "eslint": "8.19.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.5.0", "eslint-import-resolver-typescript": "2.7.1", "eslint-plugin-deprecation": "1.3.2", "eslint-plugin-import": "2.26.0", - "eslint-plugin-jsx-a11y": "6.5.1", - "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-react": "7.29.4", - "eslint-plugin-react-hooks": "4.5.0", + "eslint-plugin-jsx-a11y": "6.6.0", + "eslint-plugin-prettier": "4.2.1", + "eslint-plugin-react": "7.30.1", + "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-native": "4.0.0", "eslint-plugin-taro": "3.3.20", - "prettier": "2.6.2" + "prettier": "2.7.1" } }, "@tootallnate/once": { @@ -952,14 +952,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.25.0.tgz", - "integrity": "sha512-icYrFnUzvm+LhW0QeJNKkezBu6tJs9p/53dpPLFH8zoM9w1tfaKzVurkPotEpAqQ8Vf8uaFyL5jHd0Vs6Z0ZQg==", + "version": "5.30.6", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.6.tgz", + "integrity": "sha512-J4zYMIhgrx4MgnZrSDD7sEnQp7FmhKNOaqaOpaoQ/SfdMfRB/0yvK74hTnvH+VQxndZynqs5/Hn4t+2/j9bADg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.25.0", - "@typescript-eslint/type-utils": "5.25.0", - "@typescript-eslint/utils": "5.25.0", + "@typescript-eslint/scope-manager": "5.30.6", + "@typescript-eslint/type-utils": "5.30.6", + "@typescript-eslint/utils": "5.30.6", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -995,23 +995,23 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.25.0.tgz", - "integrity": "sha512-YTe9rmslCh1xAvNa3X+uZe4L2lsyb8V3WIeK9z46nNiPswk/V/0SGLJSfo8W9Hj4R7ak7bolazXGn3DErmb8QA==", + "version": "5.30.6", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.30.6.tgz", + "integrity": "sha512-bqvT+0L8IjtW7MCrMgm9oVNxs4g7mESro1mm5c1/SNfTnHuFTf9OUX1WzVkTz75M9cp//UrTrSmGvK48NEKshQ==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.25.0" + "@typescript-eslint/utils": "5.30.6" } }, "@typescript-eslint/parser": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.25.0.tgz", - "integrity": "sha512-r3hwrOWYbNKP1nTcIw/aZoH+8bBnh/Lh1iDHoFpyG4DnCpvEdctrSl6LOo19fZbzypjQMHdajolxs6VpYoChgA==", + "version": "5.30.6", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.6.tgz", + "integrity": "sha512-gfF9lZjT0p2ZSdxO70Xbw8w9sPPJGfAdjK7WikEjB3fcUI/yr9maUVEdqigBjKincUYNKOmf7QBMiTf719kbrA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.25.0", - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/typescript-estree": "5.25.0", + "@typescript-eslint/scope-manager": "5.30.6", + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/typescript-estree": "5.30.6", "debug": "^4.3.4" }, "dependencies": { @@ -1033,22 +1033,22 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.25.0.tgz", - "integrity": "sha512-p4SKTFWj+2VpreUZ5xMQsBMDdQ9XdRvODKXN4EksyBjFp2YvQdLkyHqOffakYZPuWJUDNu3jVXtHALDyTv3cww==", + "version": "5.30.6", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.6.tgz", + "integrity": "sha512-Hkq5PhLgtVoW1obkqYH0i4iELctEKixkhWLPTYs55doGUKCASvkjOXOd/pisVeLdO24ZX9D6yymJ/twqpJiG3g==", "dev": true, "requires": { - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/visitor-keys": "5.25.0" + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/visitor-keys": "5.30.6" } }, "@typescript-eslint/type-utils": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.25.0.tgz", - "integrity": "sha512-B6nb3GK3Gv1Rsb2pqalebe/RyQoyG/WDy9yhj8EE0Ikds4Xa8RR28nHz+wlt4tMZk5bnAr0f3oC8TuDAd5CPrw==", + "version": "5.30.6", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.6.tgz", + "integrity": "sha512-GFVVzs2j0QPpM+NTDMXtNmJKlF842lkZKDSanIxf+ArJsGeZUIaeT4jGg+gAgHt7AcQSFwW7htzF/rbAh2jaVA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.25.0", + "@typescript-eslint/utils": "5.30.6", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1071,19 +1071,19 @@ } }, "@typescript-eslint/types": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.25.0.tgz", - "integrity": "sha512-7fWqfxr0KNHj75PFqlGX24gWjdV/FDBABXL5dyvBOWHpACGyveok8Uj4ipPX/1fGU63fBkzSIycEje4XsOxUFA==", + "version": "5.30.6", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.6.tgz", + "integrity": "sha512-HdnP8HioL1F7CwVmT4RaaMX57RrfqsOMclZc08wGMiDYJBsLGBM7JwXM4cZJmbWLzIR/pXg1kkrBBVpxTOwfUg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.25.0.tgz", - "integrity": "sha512-MrPODKDych/oWs/71LCnuO7NyR681HuBly2uLnX3r5i4ME7q/yBqC4hW33kmxtuauLTM0OuBOhhkFaxCCOjEEw==", + "version": "5.30.6", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.6.tgz", + "integrity": "sha512-Z7TgPoeYUm06smfEfYF0RBkpF8csMyVnqQbLYiGgmUSTaSXTP57bt8f0UFXstbGxKIreTwQCujtaH0LY9w9B+A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/visitor-keys": "5.25.0", + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/visitor-keys": "5.30.6", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1118,26 +1118,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.25.0.tgz", - "integrity": "sha512-qNC9bhnz/n9Kba3yI6HQgQdBLuxDoMgdjzdhSInZh6NaDnFpTUlwNGxplUFWfY260Ya0TRPvkg9dd57qxrJI9g==", + "version": "5.30.6", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.6.tgz", + "integrity": "sha512-xFBLc/esUbLOJLk9jKv0E9gD/OH966M40aY9jJ8GiqpSkP2xOV908cokJqqhVd85WoIvHVHYXxSFE4cCSDzVvA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.25.0", - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/typescript-estree": "5.25.0", + "@typescript-eslint/scope-manager": "5.30.6", + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/typescript-estree": "5.30.6", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.25.0.tgz", - "integrity": "sha512-yd26vFgMsC4h2dgX4+LR+GeicSKIfUvZREFLf3DDjZPtqgLx5AJZr6TetMNwFP9hcKreTTeztQYBTNbNoOycwA==", + "version": "5.30.6", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.6.tgz", + "integrity": "sha512-41OiCjdL2mCaSDi2SvYbzFLlqqlm5v1ZW9Ym55wXKL/Rx6OOB1IbuFGo71Fj6Xy90gJDFTlgOS+vbmtGHPTQQA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.25.0", + "@typescript-eslint/types": "5.30.6", "eslint-visitor-keys": "^3.3.0" } }, @@ -1507,9 +1507,9 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axe-core": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz", - "integrity": "sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", + "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", "dev": true }, "axobject-query": { @@ -2311,9 +2311,9 @@ "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==" }, "core-js-pure": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.5.tgz", - "integrity": "sha512-8xo9R00iYD7TcV7OrC98GwxiUEAabVWO3dix+uyWjnYrx9fyASLlIX+f/3p5dW5qByaP2bcZ8X/T47s55et/tA==", + "version": "3.23.4", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.4.tgz", + "integrity": "sha512-lizxkcgj3XDmi7TUBFe+bQ1vNpD5E4t76BrBWI3HdUxdw/Mq1VF4CkiHzIKyieECKtcODK2asJttoofEeUKICQ==", "dev": true }, "core-util-is": { @@ -2763,12 +2763,12 @@ } }, "eslint": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", - "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.3", + "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -2786,7 +2786,7 @@ "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -2868,9 +2868,9 @@ } }, "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -3058,7 +3058,7 @@ "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "requires": { "locate-path": "^2.0.0" @@ -3067,7 +3067,7 @@ "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "requires": { "p-locate": "^2.0.0", @@ -3092,7 +3092,7 @@ "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "requires": { "p-limit": "^1.1.0" @@ -3101,7 +3101,7 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true } } @@ -3159,23 +3159,24 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz", + "integrity": "sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw==", "dev": true, "requires": { - "@babel/runtime": "^7.16.3", + "@babel/runtime": "^7.18.3", "aria-query": "^4.2.2", - "array-includes": "^3.1.4", + "array-includes": "^3.1.5", "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", + "axe-core": "^4.4.2", "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", + "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", + "jsx-ast-utils": "^3.3.1", "language-tags": "^1.0.5", - "minimatch": "^3.0.4" + "minimatch": "^3.1.2", + "semver": "^6.3.0" }, "dependencies": { "emoji-regex": { @@ -3183,38 +3184,53 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-react": { - "version": "7.29.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz", - "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==", + "version": "7.30.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz", + "integrity": "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==", "dev": true, "requires": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", "doctrine": "^2.1.0", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.5", "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", + "object.hasown": "^1.1.1", "object.values": "^1.1.5", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.3", "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" + "string.prototype.matchall": "^4.0.7" }, "dependencies": { "doctrine": { @@ -3232,6 +3248,15 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3242,13 +3267,14 @@ } }, "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "semver": { @@ -3260,9 +3286,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz", - "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true }, "eslint-plugin-react-native": { @@ -3654,9 +3680,9 @@ } }, "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, "foreground-child": { @@ -3810,7 +3836,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, "functions-have-names": { @@ -4874,7 +4900,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json-stringify-safe": { @@ -4956,12 +4982,12 @@ } }, "jsx-ast-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", - "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz", + "integrity": "sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==", "dev": true, "requires": { - "array-includes": "^3.1.4", + "array-includes": "^3.1.5", "object.assign": "^4.1.2" } }, @@ -4996,15 +5022,15 @@ "integrity": "sha512-ToBlw7HfX9/2MD1ek85tMa2Q3gSU/n5TXaoPPBuyZ8JX+f2w5OGjE10H+YzolJpMXbxsa0fVtj41Vq/MJPhUlQ==" }, "language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", "dev": true }, "language-tags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dev": true, "requires": { "language-subtag-registry": "~0.3.2" @@ -5714,7 +5740,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "negotiator": { @@ -6317,9 +6343,9 @@ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, "prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "prettier-linter-helpers": { @@ -7666,7 +7692,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "thenify": { diff --git a/package.json b/package.json index 7b12819f..9c8cb742 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "yazl": "2.5.1" }, "devDependencies": { - "@shm-open/eslint-config-bundle": "1.9.12", + "@shm-open/eslint-config-bundle": "1.9.13", "@types/bcryptjs": "2.4.2", "@types/body-parser": "1.19.2", "@types/cookie-parser": "1.4.3", From 5c5f31f7d872a505918659959b9cc68d572f5239 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Jul 2022 01:03:12 +0000 Subject: [PATCH 304/347] chore(deps): update dependency @types/node-fetch to v2.6.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4d4640cf..d160d7cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -860,9 +860,9 @@ "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" }, "@types/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", "dev": true, "requires": { "@types/node": "*", diff --git a/package.json b/package.json index 7b12819f..a6753d66 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "@types/i18n": "0.13.2", "@types/jsonwebtoken": "8.5.8", "@types/lodash": "4.14.182", - "@types/node-fetch": "2.6.1", + "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.4", "@types/recursive-readdir": "2.2.1", "@types/validator": "13.7.2", From b91bfd12b207a2a2275af992610518c96a0b14a9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Jul 2022 01:04:33 +0000 Subject: [PATCH 305/347] chore(deps): update dependency @types/validator to v13.7.4 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4d4640cf..1e384581 100644 --- a/package-lock.json +++ b/package-lock.json @@ -929,9 +929,9 @@ } }, "@types/validator": { - "version": "13.7.2", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.2.tgz", - "integrity": "sha512-KFcchQ3h0OPQgFirBRPZr5F/sVjxZsOrQHedj3zi8AH3Zv/hOLx2OLR4hxR5HcfoU+33n69ZuOfzthKVdMoTiw==" + "version": "13.7.4", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.4.tgz", + "integrity": "sha512-uAaSWegu2lymY18l+s5nmcXu3sFeeTOl1zhSGoYzcr6T3wz1M+3OcW4UjfPhIhHGd13tIMRDsEpR+d8w/MexwQ==" }, "@types/yauzl": { "version": "2.9.2", diff --git a/package.json b/package.json index 7b12819f..30905f79 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@types/node-fetch": "2.6.1", "@types/nodemailer": "6.4.4", "@types/recursive-readdir": "2.2.1", - "@types/validator": "13.7.2", + "@types/validator": "13.7.4", "@types/yazl": "2.4.2", "concurrently": "7.2.0", "mocha": "10.0.0", From 7cc216ce5eb88ab4ff299671547f5c39c1ea146a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Jul 2022 01:06:01 +0000 Subject: [PATCH 306/347] fix(deps): update dependency i18n to v0.15.0 --- package-lock.json | 24 ++++++++++++------------ package.json | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4d4640cf..865c2225 100644 --- a/package-lock.json +++ b/package-lock.json @@ -547,14 +547,14 @@ } }, "@messageformat/date-skeleton": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@messageformat/date-skeleton/-/date-skeleton-1.0.0.tgz", - "integrity": "sha512-vvj5Sd3VyXUHGbYpiFsPsSQ8pkdUM9vrR/NUbyP6ga3UqJH4p9eCwzfwaCAZatZMYMTyiKG/8QbUyGKHeTZ5kw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@messageformat/date-skeleton/-/date-skeleton-1.0.1.tgz", + "integrity": "sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg==" }, "@messageformat/number-skeleton": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@messageformat/number-skeleton/-/number-skeleton-1.0.0.tgz", - "integrity": "sha512-Pe1HX/VG0q7tclM/ri85I4FKYd7Uc3gluSZbRaK1+jcXdT9Biw2hLAKyMsiz2tM6zLiK1xX+K0NMDO4RIstQig==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@messageformat/number-skeleton/-/number-skeleton-1.1.0.tgz", + "integrity": "sha512-F0Io+GOSvFFxvp9Ze3L5kAoZ2NnOAT0Mr/jpGNd3fqo8A0t4NxNIAcCdggtl2B/gN2ErkIKSBVPrF7xcW1IGvA==" }, "@messageformat/parser": { "version": "5.0.0", @@ -800,9 +800,9 @@ } }, "@types/i18n": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@types/i18n/-/i18n-0.13.2.tgz", - "integrity": "sha512-FdzABEs0NNi99xN+FgWAAeCenaNo+5jolCxr2RhQrySinNPH8rkgjbw6OMGW9+HSgnGeuI7C6y2lC83m6JN3bg==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/@types/i18n/-/i18n-0.13.4.tgz", + "integrity": "sha512-PN4ZsplbpHZ2eaYixFNWkZKN51pcB02K2UKvqHVbrzq2jTO0sChPMuKKYAW1ZbElyHUvPgFeYsz9rqktChGyMw==", "dev": true }, "@types/json-schema": { @@ -4343,9 +4343,9 @@ } }, "i18n": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.14.2.tgz", - "integrity": "sha512-f/6Ns2skl6KrpumZsE0A4TaxiEoJRi3Ovko0O+NuD92Ot2sLICpw6Iy+04ph/4tfF7koAWVYElBJ4oftpyhhxw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.15.0.tgz", + "integrity": "sha512-TUOkuFbl8Y/q7zF0tHdtpk1/TtxH0T+Drp2NFrHhmN1Qs0Sob9/0uVLS2BPVkEXNh2jZrimOiFJk+tkaOumzog==", "requires": { "@messageformat/core": "^3.0.0", "debug": "^4.3.3", diff --git a/package.json b/package.json index 7b12819f..b29ccadd 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "formidable": "2.0.1", "fs-extra": "10.1.0", "helmet": "5.1.0", - "i18n": "0.14.2", + "i18n": "0.15.0", "jsonwebtoken": "8.5.1", "kv-logger": "0.5.3", "lodash": "4.17.21", @@ -77,7 +77,7 @@ "@types/cookie-parser": "1.4.3", "@types/formidable": "2.0.5", "@types/fs-extra": "9.0.13", - "@types/i18n": "0.13.2", + "@types/i18n": "0.13.4", "@types/jsonwebtoken": "8.5.8", "@types/lodash": "4.14.182", "@types/node-fetch": "2.6.1", From 746259467957a79b77d1ea1da69f9af5915b56b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Jul 2022 01:07:26 +0000 Subject: [PATCH 307/347] fix(deps): update dependency sequelize to v6.21.3 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4d4640cf..b5e77c5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7047,9 +7047,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.19.0.tgz", - "integrity": "sha512-B3oGIdpYBERDjRDm74h7Ky67f6ZLcmBXOA7HscYObiOSo4pD7VBc9mtm44wNV7unc0uk8I1d30nbZBTQCE377A==", + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.21.3.tgz", + "integrity": "sha512-cJPrTTVCofUxaaNKoIETiXCYh2xJ+OFq5jMHJQqftp34M4kNoLpTfUMPSwYtRUeTcSh1/5HodfJXIBi7troIFA==", "requires": { "@types/debug": "^4.1.7", "@types/validator": "^13.7.1", @@ -7726,7 +7726,7 @@ "toposort-class": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" }, "tough-cookie": { "version": "2.5.0", diff --git a/package.json b/package.json index 7b12819f..7be92023 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "rand-token": "1.0.1", "recursive-readdir": "2.2.2", "redis": "4.2.0", - "sequelize": "6.19.0", + "sequelize": "6.21.3", "slash": "3.0.0", "validator": "13.7.0", "yargs": "17.5.1", From 1e4f39241deef4b170232515627c3aef4fa180ac Mon Sep 17 00:00:00 2001 From: Roc Wu Date: Sun, 17 Jul 2022 09:14:40 +0800 Subject: [PATCH 308/347] chore(release): 2.1.6 --- CHANGELOG.md | 16 ++++++++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ac08cb8..719484d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,22 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.1.6](https://github.com/shm-open/code-push-server/compare/v2.1.5...v2.1.6) (2022-07-17) + + +### Bug Fixes + +* **deps:** update dependency aws-sdk to v2.1176.0 ([eb3c14a](https://github.com/shm-open/code-push-server/commit/eb3c14abcc8b673f485088f1b8684504a34b60ac)) +* **deps:** update dependency cos-nodejs-sdk-v5 to v2.11.12 ([fa00c74](https://github.com/shm-open/code-push-server/commit/fa00c74cf951278ec547c00d0ed713b40a2710d3)) +* **deps:** update dependency express to v4.18.1 ([2adad28](https://github.com/shm-open/code-push-server/commit/2adad280d937fd9176cdc4a5f20547f9ecd88288)) +* **deps:** update dependency helmet to v5.1.0 ([aefde36](https://github.com/shm-open/code-push-server/commit/aefde366d6eb98ea401214709051ebab5b6f9ecc)) +* **deps:** update dependency i18n to v0.15.0 ([7cc216c](https://github.com/shm-open/code-push-server/commit/7cc216ce5eb88ab4ff299671547f5c39c1ea146a)) +* **deps:** update dependency nodemailer to v6.7.7 ([85ad522](https://github.com/shm-open/code-push-server/commit/85ad522d5b4cb31f57cf2b9bca35d9d64d35e45d)) +* **deps:** update dependency qiniu to v7.7.0 ([732a4ed](https://github.com/shm-open/code-push-server/commit/732a4ed6e82d2047b6df91ff004fc482aaffab6b)) +* **deps:** update dependency redis to v4.2.0 ([5a744c6](https://github.com/shm-open/code-push-server/commit/5a744c6ea111e74a834307131bf0a8a5dbecb137)) +* **deps:** update dependency sequelize to v6.21.3 ([7462594](https://github.com/shm-open/code-push-server/commit/746259467957a79b77d1ea1da69f9af5915b56b1)) +* **deps:** update dependency yargs to v17.5.1 ([fd9f58e](https://github.com/shm-open/code-push-server/commit/fd9f58e580e516cb188b4bea8da3eeb837bacae6)) + ### [2.1.5](https://github.com/shm-open/code-push-server/compare/v2.1.4...v2.1.5) (2022-04-26) ### [2.1.4](https://github.com/shm-open/code-push-server/compare/v2.1.3...v2.1.4) (2022-04-26) diff --git a/package-lock.json b/package-lock.json index d49d0ffd..403fe257 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shm-open/code-push-server", - "version": "2.1.5", + "version": "2.1.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index a9f38f07..dc5478cc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shm-open/code-push-server", "description": "CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push", - "version": "2.1.5", + "version": "2.1.6", "license": "MIT", "repository": { "type": "git", From c4b7f3d032e485c3a4baa2d5eaf9b62d7674f083 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Jul 2022 03:47:50 +0000 Subject: [PATCH 309/347] chore(deps): update dependency concurrently to v7.2.2 --- package-lock.json | 26 +++++++++----------------- package.json | 2 +- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 403fe257..0a449c51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1971,15 +1971,15 @@ } }, "concurrently": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.2.0.tgz", - "integrity": "sha512-4KIVY5HopDRhN3ndAgfFOLsMk1PZUPgghlgTMZ5Pb5aTrqYg86RcZaIZC2Cz+qpZ9DsX36WHGjvWnXPqdnblhw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.2.2.tgz", + "integrity": "sha512-DcQkI0ruil5BA/g7Xy3EWySGrFJovF5RYAYxwGvv9Jf9q9B1v3jPFP2tl6axExNf1qgF30kjoNYrangZ0ey4Aw==", "dev": true, "requires": { "chalk": "^4.1.0", "date-fns": "^2.16.1", "lodash": "^4.17.21", - "rxjs": "^6.6.3", + "rxjs": "^7.0.0", "shell-quote": "^1.7.3", "spawn-command": "^0.0.2-1", "supports-color": "^8.1.0", @@ -7006,20 +7006,12 @@ } }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", "dev": true, "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "tslib": "^2.1.0" } }, "safe-buffer": { @@ -7319,7 +7311,7 @@ "spawn-command": { "version": "0.0.2-1", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", "dev": true }, "spawn-wrap": { diff --git a/package.json b/package.json index dc5478cc..4c9037b5 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@types/recursive-readdir": "2.2.1", "@types/validator": "13.7.4", "@types/yazl": "2.4.2", - "concurrently": "7.2.0", + "concurrently": "7.2.2", "mocha": "10.0.0", "nyc": "15.1.0", "should": "13.2.3", From ccb02bd2e459f78c949e7842bcced113e8d1c743 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Jul 2022 05:52:23 +0000 Subject: [PATCH 310/347] chore(deps): update dependency supertest to v6.2.4 --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0a449c51..97c7da43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7596,9 +7596,9 @@ "dev": true }, "superagent": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.3.tgz", - "integrity": "sha512-WA6et4nAvgBCS73lJvv1D0ssI5uk5Gh+TGN/kNe+B608EtcVs/yzfl+OLXTzDs7tOBDIpvgh/WUs1K2OK1zTeQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz", + "integrity": "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==", "dev": true, "requires": { "component-emitter": "^1.3.0", @@ -7608,7 +7608,7 @@ "form-data": "^4.0.0", "formidable": "^2.0.1", "methods": "^1.1.2", - "mime": "^2.5.0", + "mime": "2.6.0", "qs": "^6.10.3", "readable-stream": "^3.6.0", "semver": "^7.3.7" @@ -7658,13 +7658,13 @@ } }, "supertest": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.3.tgz", - "integrity": "sha512-3GSdMYTMItzsSYjnIcljxMVZKPW1J9kYHZY+7yLfD0wpPwww97GeImZC1oOk0S5+wYl2niJwuFusBJqwLqYM3g==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz", + "integrity": "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==", "dev": true, "requires": { "methods": "^1.1.2", - "superagent": "^7.1.3" + "superagent": "^8.0.0" } }, "supervisor": { diff --git a/package.json b/package.json index 4c9037b5..4aab6f95 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "nyc": "15.1.0", "should": "13.2.3", "standard-version": "9.5.0", - "supertest": "6.2.3", + "supertest": "6.2.4", "supervisor": "0.12.0", "typescript": "4.6.4" }, From f0f0ff2d231b2ee931069476e416e7017737c33f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Jul 2022 10:48:29 +0000 Subject: [PATCH 311/347] chore(deps): update dependency typescript to v4.7.4 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97c7da43..cd5d033c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7896,9 +7896,9 @@ } }, "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 4aab6f95..13ccf2fa 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "standard-version": "9.5.0", "supertest": "6.2.4", "supervisor": "0.12.0", - "typescript": "4.6.4" + "typescript": "4.7.4" }, "files": [ "bin", From 2cb65f3e9c216ac052c09f96e9fc61720cb03026 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Jul 2022 01:01:46 +0000 Subject: [PATCH 312/347] chore(deps): update dependency concurrently to v7.3.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd5d033c..4a5b1f12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1971,9 +1971,9 @@ } }, "concurrently": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.2.2.tgz", - "integrity": "sha512-DcQkI0ruil5BA/g7Xy3EWySGrFJovF5RYAYxwGvv9Jf9q9B1v3jPFP2tl6axExNf1qgF30kjoNYrangZ0ey4Aw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.3.0.tgz", + "integrity": "sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA==", "dev": true, "requires": { "chalk": "^4.1.0", diff --git a/package.json b/package.json index 13ccf2fa..082342bc 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@types/recursive-readdir": "2.2.1", "@types/validator": "13.7.4", "@types/yazl": "2.4.2", - "concurrently": "7.2.2", + "concurrently": "7.3.0", "mocha": "10.0.0", "nyc": "15.1.0", "should": "13.2.3", From 01c57630ee52b3d2b47fdd7cff8e4057d0d6803e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 Aug 2022 23:56:35 +0000 Subject: [PATCH 313/347] chore(deps): update dependency @types/validator to v13.7.5 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a5b1f12..0d79e03b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -929,9 +929,9 @@ } }, "@types/validator": { - "version": "13.7.4", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.4.tgz", - "integrity": "sha512-uAaSWegu2lymY18l+s5nmcXu3sFeeTOl1zhSGoYzcr6T3wz1M+3OcW4UjfPhIhHGd13tIMRDsEpR+d8w/MexwQ==" + "version": "13.7.5", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.5.tgz", + "integrity": "sha512-9rQHeAqz6Jw3gDhttkmWetoriW5FPbxylv/6h6mXtaj2NKRcOvOmvfcswVdLVpbuy10NrO486K3lCoLgoIhiIA==" }, "@types/yauzl": { "version": "2.9.2", diff --git a/package.json b/package.json index 082342bc..d5c6fe03 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.4", "@types/recursive-readdir": "2.2.1", - "@types/validator": "13.7.4", + "@types/validator": "13.7.5", "@types/yazl": "2.4.2", "concurrently": "7.3.0", "mocha": "10.0.0", From 9808da3c3a1346cf4e01f7245db31c7cde589515 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 5 Aug 2022 02:38:41 +0000 Subject: [PATCH 314/347] chore(deps): update dependency @types/nodemailer to v6.4.5 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d79e03b..7d46b57c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -883,9 +883,9 @@ } }, "@types/nodemailer": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.4.tgz", - "integrity": "sha512-Ksw4t7iliXeYGvIQcSIgWQ5BLuC/mljIEbjf615svhZL10PE9t+ei8O9gDaD3FPCasUJn9KTLwz2JFJyiiyuqw==", + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.5.tgz", + "integrity": "sha512-zuP3nBRQHI6M2PkXnGGy1Ww4VB+MyYHGgnfV2T+JR9KLkeWqPJuyVUgLpKXuFnA/b7pZaIDFh2sV4759B7jK1g==", "dev": true, "requires": { "@types/node": "*" diff --git a/package.json b/package.json index d5c6fe03..f76b38c3 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "@types/jsonwebtoken": "8.5.8", "@types/lodash": "4.14.182", "@types/node-fetch": "2.6.2", - "@types/nodemailer": "6.4.4", + "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", "@types/validator": "13.7.5", "@types/yazl": "2.4.2", From f9c39739886f3605ae1ad829d9c34477e916d5f8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 20:43:14 +0000 Subject: [PATCH 315/347] chore(deps): update dependency @types/lodash to v4.14.183 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d46b57c..2234c3be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -827,9 +827,9 @@ } }, "@types/lodash": { - "version": "4.14.182", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", - "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", + "version": "4.14.183", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.183.tgz", + "integrity": "sha512-UXavyuxzXKMqJPEpFPri6Ku5F9af6ZJXUneHhvQJxavrEjuHkFp2YnDWHcxJiG7hk8ZkWqjcyNeW1s/smZv5cw==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index f76b38c3..3a9a4eea 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.4", "@types/jsonwebtoken": "8.5.8", - "@types/lodash": "4.14.182", + "@types/lodash": "4.14.183", "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", From ebd78af24b1a777a05b5f04b8b3729c7dcb446eb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 09:43:05 +0000 Subject: [PATCH 316/347] chore(deps): update dependency @types/lodash to v4.14.184 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2234c3be..329ad393 100644 --- a/package-lock.json +++ b/package-lock.json @@ -827,9 +827,9 @@ } }, "@types/lodash": { - "version": "4.14.183", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.183.tgz", - "integrity": "sha512-UXavyuxzXKMqJPEpFPri6Ku5F9af6ZJXUneHhvQJxavrEjuHkFp2YnDWHcxJiG7hk8ZkWqjcyNeW1s/smZv5cw==", + "version": "4.14.184", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", + "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index 3a9a4eea..d10086d3 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.4", "@types/jsonwebtoken": "8.5.8", - "@types/lodash": "4.14.183", + "@types/lodash": "4.14.184", "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", From dbef1112f1e64364869b8427e307a55b224724e1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Aug 2022 13:28:24 +0000 Subject: [PATCH 317/347] chore(deps): update dependency @types/jsonwebtoken to v8.5.9 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 329ad393..4fc078ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -818,9 +818,9 @@ "dev": true }, "@types/jsonwebtoken": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", - "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", + "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", "dev": true, "requires": { "@types/node": "*" diff --git a/package.json b/package.json index d10086d3..d006c58e 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@types/formidable": "2.0.5", "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.4", - "@types/jsonwebtoken": "8.5.8", + "@types/jsonwebtoken": "8.5.9", "@types/lodash": "4.14.184", "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", From 7cf091272bdd1dfdce4fdf3e0fff9644eba79015 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 02:07:51 +0000 Subject: [PATCH 318/347] chore(deps): update dependency typescript to v4.8.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4fc078ec..4eba6056 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7896,9 +7896,9 @@ } }, "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index d006c58e..7c2e5b16 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "standard-version": "9.5.0", "supertest": "6.2.4", "supervisor": "0.12.0", - "typescript": "4.7.4" + "typescript": "4.8.2" }, "files": [ "bin", From 1e97820e1f39959723b0d0577ae96fff60acc152 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 27 Aug 2022 15:22:05 +0000 Subject: [PATCH 319/347] chore(deps): update dependency @types/validator to v13.7.6 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4eba6056..846e707a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -929,9 +929,9 @@ } }, "@types/validator": { - "version": "13.7.5", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.5.tgz", - "integrity": "sha512-9rQHeAqz6Jw3gDhttkmWetoriW5FPbxylv/6h6mXtaj2NKRcOvOmvfcswVdLVpbuy10NrO486K3lCoLgoIhiIA==" + "version": "13.7.6", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.6.tgz", + "integrity": "sha512-uBsnWETsUagQ0n6G2wcXNIufpTNJir0zqzG4p62fhnwzs48d/iuOWEEo0d3iUxN7D+9R/8CSvWGKS+KmaD0mWA==" }, "@types/yauzl": { "version": "2.9.2", diff --git a/package.json b/package.json index 7c2e5b16..63564214 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", - "@types/validator": "13.7.5", + "@types/validator": "13.7.6", "@types/yazl": "2.4.2", "concurrently": "7.3.0", "mocha": "10.0.0", From faa62d5135a5f951ea94866371995be6b49cbddc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 12:18:48 +0000 Subject: [PATCH 320/347] chore(deps): update dependency concurrently to v7.4.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 846e707a..f8e21975 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1971,13 +1971,13 @@ } }, "concurrently": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.3.0.tgz", - "integrity": "sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.4.0.tgz", + "integrity": "sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA==", "dev": true, "requires": { "chalk": "^4.1.0", - "date-fns": "^2.16.1", + "date-fns": "^2.29.1", "lodash": "^4.17.21", "rxjs": "^7.0.0", "shell-quote": "^1.7.3", @@ -2401,9 +2401,9 @@ "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" }, "date-fns": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", - "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", + "version": "2.29.2", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.2.tgz", + "integrity": "sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA==", "dev": true }, "dateformat": { diff --git a/package.json b/package.json index 63564214..9172b6dd 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@types/recursive-readdir": "2.2.1", "@types/validator": "13.7.6", "@types/yazl": "2.4.2", - "concurrently": "7.3.0", + "concurrently": "7.4.0", "mocha": "10.0.0", "nyc": "15.1.0", "should": "13.2.3", From 553f12262109f147c36a86d54c53eeff32378b34 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 12:25:27 +0000 Subject: [PATCH 321/347] chore(deps): update dependency @types/lodash to v4.14.185 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8e21975..982edd20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -827,9 +827,9 @@ } }, "@types/lodash": { - "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==", + "version": "4.14.185", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.185.tgz", + "integrity": "sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index 9172b6dd..b73f3608 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.4", "@types/jsonwebtoken": "8.5.9", - "@types/lodash": "4.14.184", + "@types/lodash": "4.14.185", "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", From d7157112a5effb0295a58165ef83c94d9ec99bfa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 15:47:06 +0000 Subject: [PATCH 322/347] chore(deps): update dependency typescript to v4.8.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 982edd20..56fde7af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7896,9 +7896,9 @@ } }, "typescript": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", - "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", + "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index b73f3608..1c81b3dd 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "standard-version": "9.5.0", "supertest": "6.2.4", "supervisor": "0.12.0", - "typescript": "4.8.2" + "typescript": "4.8.3" }, "files": [ "bin", From fa4acea2b285c78851ba55af16b4896dfe94427f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 15 Oct 2022 23:05:27 +0000 Subject: [PATCH 323/347] chore(deps): update dependency @types/validator to v13.7.8 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 56fde7af..c2a6a2c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -929,9 +929,9 @@ } }, "@types/validator": { - "version": "13.7.6", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.6.tgz", - "integrity": "sha512-uBsnWETsUagQ0n6G2wcXNIufpTNJir0zqzG4p62fhnwzs48d/iuOWEEo0d3iUxN7D+9R/8CSvWGKS+KmaD0mWA==" + "version": "13.7.8", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.8.tgz", + "integrity": "sha512-HKayOBe2ThTcQykiycCQYf70Fvo0WaJEJdxxNjvX3D/mnC0IUAhMe6wsIb1wwthmjiqBAR3qGkEzHYx74MS2yw==" }, "@types/yauzl": { "version": "2.9.2", diff --git a/package.json b/package.json index 1c81b3dd..0814f094 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", - "@types/validator": "13.7.6", + "@types/validator": "13.7.8", "@types/yazl": "2.4.2", "concurrently": "7.4.0", "mocha": "10.0.0", From 5f51e87c0180f017d38bcc91ab06051bc5ec241b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 16 Oct 2022 01:41:20 +0000 Subject: [PATCH 324/347] chore(deps): update dependency @types/lodash to v4.14.186 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2a6a2c3..db79405d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -827,9 +827,9 @@ } }, "@types/lodash": { - "version": "4.14.185", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.185.tgz", - "integrity": "sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==", + "version": "4.14.186", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index 0814f094..8789050a 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.4", "@types/jsonwebtoken": "8.5.9", - "@types/lodash": "4.14.185", + "@types/lodash": "4.14.186", "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", From da46858573341679d04c75806aa09ec95afc721d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Nov 2022 22:50:08 +0000 Subject: [PATCH 325/347] chore(deps): update dependency typescript to v4.9.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index db79405d..86bd34a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7896,9 +7896,9 @@ } }, "typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 8789050a..51dff579 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "standard-version": "9.5.0", "supertest": "6.2.4", "supervisor": "0.12.0", - "typescript": "4.8.3" + "typescript": "4.9.3" }, "files": [ "bin", From 3ee1387923dd0cd04793f166e1cafe9992f01e5c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Nov 2022 01:46:19 +0000 Subject: [PATCH 326/347] chore(deps): update dependency @types/lodash to v4.14.189 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 86bd34a5..936d3627 100644 --- a/package-lock.json +++ b/package-lock.json @@ -827,9 +827,9 @@ } }, "@types/lodash": { - "version": "4.14.186", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", - "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", + "version": "4.14.189", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz", + "integrity": "sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index 51dff579..543485ba 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.4", "@types/jsonwebtoken": "8.5.9", - "@types/lodash": "4.14.186", + "@types/lodash": "4.14.189", "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", From 4ff7770eae7b7fcaa8c47d0bd99ab84839176b42 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Nov 2022 04:00:02 +0000 Subject: [PATCH 327/347] chore(deps): update dependency @types/validator to v13.7.10 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 936d3627..d7aff8ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -929,9 +929,9 @@ } }, "@types/validator": { - "version": "13.7.8", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.8.tgz", - "integrity": "sha512-HKayOBe2ThTcQykiycCQYf70Fvo0WaJEJdxxNjvX3D/mnC0IUAhMe6wsIb1wwthmjiqBAR3qGkEzHYx74MS2yw==" + "version": "13.7.10", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.10.tgz", + "integrity": "sha512-t1yxFAR2n0+VO6hd/FJ9F2uezAZVWHLmpmlJzm1eX03+H7+HsuTAp7L8QJs+2pQCfWkP1+EXsGK9Z9v7o/qPVQ==" }, "@types/yauzl": { "version": "2.9.2", diff --git a/package.json b/package.json index 543485ba..3df59889 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", - "@types/validator": "13.7.8", + "@types/validator": "13.7.10", "@types/yazl": "2.4.2", "concurrently": "7.4.0", "mocha": "10.0.0", From b247b1d759e1623daa6020214ea5d6b24e02af67 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 12:12:26 +0000 Subject: [PATCH 328/347] chore(deps): update dependency @types/lodash to v4.14.194 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index d7aff8ea..7100ae8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -827,9 +827,9 @@ } }, "@types/lodash": { - "version": "4.14.189", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz", - "integrity": "sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==", + "version": "4.14.194", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz", + "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index 3df59889..838f0e96 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.4", "@types/jsonwebtoken": "8.5.9", - "@types/lodash": "4.14.189", + "@types/lodash": "4.14.194", "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", From 5207e300c5cb5a776d5f52e80bc31b80d9012fad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 16:06:56 +0000 Subject: [PATCH 329/347] chore(deps): update dependency typescript to v4.9.5 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7100ae8a..1d9dd9b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7896,9 +7896,9 @@ } }, "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 838f0e96..f4281242 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "standard-version": "9.5.0", "supertest": "6.2.4", "supervisor": "0.12.0", - "typescript": "4.9.3" + "typescript": "4.9.5" }, "files": [ "bin", From 23fefba5dbff00e42e1f6f2d648a99a11d5f2a8d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 28 May 2023 13:01:40 +0000 Subject: [PATCH 330/347] chore(deps): update dependency @types/lodash to v4.14.195 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1d9dd9b9..c3999141 100644 --- a/package-lock.json +++ b/package-lock.json @@ -827,9 +827,9 @@ } }, "@types/lodash": { - "version": "4.14.194", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz", - "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", + "version": "4.14.195", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", + "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==", "dev": true }, "@types/long": { diff --git a/package.json b/package.json index f4281242..eb65046c 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/fs-extra": "9.0.13", "@types/i18n": "0.13.4", "@types/jsonwebtoken": "8.5.9", - "@types/lodash": "4.14.194", + "@types/lodash": "4.14.195", "@types/node-fetch": "2.6.2", "@types/nodemailer": "6.4.5", "@types/recursive-readdir": "2.2.1", From 194acbb05d123b30db83561a18413aaf669bf9a4 Mon Sep 17 00:00:00 2001 From: Bill Xie Date: Mon, 4 Mar 2024 10:26:02 +0800 Subject: [PATCH 331/347] Add npm scripts --- tea.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 tea.yaml diff --git a/tea.yaml b/tea.yaml new file mode 100644 index 00000000..aad4b70f --- /dev/null +++ b/tea.yaml @@ -0,0 +1,6 @@ +# https://tea.xyz/what-is-this-file +--- +version: 1.0.0 +codeOwners: + - '0x6498bd929aA09f9a8ccdF8F176E09B24136388cb' +quorum: 1 From a2a79435a2cd798bbef512ef9e2414a017cb0f65 Mon Sep 17 00:00:00 2001 From: msun4100 Date: Sun, 16 Nov 2025 01:54:35 +0900 Subject: [PATCH 332/347] chore: remove .env from repo --- .env | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index 8f019587..00000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -COMPOSE_PROJECT_NAME=code-push-server From 13db771862a321cb55fc72164d395fd9f323f377 Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Sun, 16 Nov 2025 02:06:15 +0900 Subject: [PATCH 333/347] feat: update Node.js to 24.6.0 and apply Korean locale default configs --- .env.example | 99 + .gitignore | 3 + README.ko.md | 93 + README.md | 14 +- package-lock.json | 9500 ++++++++++++++++++++++++++++--------------- package.json | 1 + public/favicon.ico | Bin 0 -> 1150 bytes src/core/config.ts | 6 +- src/db.ts | 24 +- src/routes/index.ts | 7 + src/www.ts | 2 +- 11 files changed, 6340 insertions(+), 3409 deletions(-) create mode 100644 .env.example create mode 100644 README.ko.md create mode 100644 public/favicon.ico diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..7b4121a0 --- /dev/null +++ b/.env.example @@ -0,0 +1,99 @@ +############################################### +# CodePush Server Configuration (.env) +############################################### + +# ------------------------------- +# General / Logs +# ------------------------------- +# 클론시 유일한 환경변수 값 +COMPOSE_PROJECT_NAME=code-push-server +LOG_LEVEL=debug +LOG_FORMAT=text + +# ------------------------------- +# Database (MySQL) +# - 유저/앱/패키지 메타데이터 저장 +# ------------------------------- +RDS_USERNAME=codepush +RDS_PASSWORD=codepush +RDS_DATABASE=codepush +RDS_HOST=127.0.0.1 +RDS_PORT=3306 + +# ------------------------------- +# Storage Settings +# storageType: local | s3 | qiniu | oss | tencentcloud +# ------------------------------- +STORAGE_TYPE=local + +# Local storage (default) +# 저장 파일이 위치할 경로 (미설정 시 OS tmpdir 사용) +STORAGE_DIR=./storage + +# 파일 다운로드 URL - 반드시 본인 서버 URL로 수정 +LOCAL_DOWNLOAD_URL=http://127.0.0.1:3000/download + +# 공통 Download URL 우선순위: +# LOCAL_DOWNLOAD_URL > DOWNLOAD_URL +DOWNLOAD_URL=http://127.0.0.1:3000/download + +# ------------------------------- +# JWT Token +# ------------------------------- +TOKEN_SECRET=REPLACE_WITH_RANDOM_LONG_SECRET + +# ------------------------------- +# Common Behavior +# ------------------------------- +ALLOW_REGISTRATION=true +TRY_LOGIN_TIMES=4 +DIFF_NUMS=3 +DATA_DIR=./data +UPDATE_CHECK_CACHE=false +ROLLOUT_CLIENT_UNIQUE_ID_CACHE=false + +# ------------------------------- +# Redis (optional: only needed for login attempt limit or caching) +# ------------------------------- +REDIS_HOST=127.0.0.1 +REDIS_PORT=6379 +REDIS_PASSWORD= +REDIS_DB=0 + +# ------------------------------- +# Email SMTP (optional: only used for registration + verification) +# ------------------------------- +SMTP_HOST= +SMTP_PORT=465 +SMTP_USERNAME= +SMTP_PASSWORD= + +# ------------------------------- +# Cloud Storage (Optional) +# Qiniu / S3 / OSS / Tencent Cloud +# ------------------------------- +QINIU_ACCESS_KEY= +QINIU_SECRET_KEY= +QINIU_BUCKET_NAME= +QINIU_DOWNLOAD_URL= + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_SESSION_TOKEN= +AWS_BUCKET_NAME= +AWS_REGION= +AWS_DOWNLOAD_URL= + +OSS_ACCESS_KEY_ID= +OSS_SECRET_ACCESS_KEY= +OSS_ENDPOINT= +OSS_BUCKET_NAME= +OSS_PREFIX= +OSS_DOWNLOAD_URL= + +COS_ACCESS_KEY_ID= +COS_SECRET_ACCESS_KEY= +COS_BUCKET_NAME= +COS_REGION= +COS_DOWNLOAD_URL= + diff --git a/.gitignore b/.gitignore index c91f3f9a..666d2f1e 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,6 @@ node_modules/ # vs code .history .idea + +# environment variables +.env \ No newline at end of file diff --git a/README.ko.md b/README.ko.md new file mode 100644 index 00000000..59ebe933 --- /dev/null +++ b/README.ko.md @@ -0,0 +1,93 @@ +# CodePush Server ![Node.js CI](https://github.com/shm-open/code-push-server/workflows/Node.js%20CI/badge.svg) + +[[영어 버전 English]](./README.md) [[중국어 버전 中文版]](./README.cn.md) + +CodePush Server는 CodePush 프로그램 서버입니다. +Microsoft 공식 CodePush 서비스는 아시아 지역에서 속도가 느린 경우가 많기 때문에, 우리는 자체 서버를 구축하여 사용합니다. + +- (해당 Repo의 오너가 중국인이므로 중국어 위주의 안내를 단순 한국어로 번역 했음을 미리 안내합니다.) + +## Requirement + +- Node.js v24.6.0 +- npm install -g install @shm-open/code-push-cli + +## 이 포크(Fork)에 대하여 + +원본 프로젝트인 [code-push-server](https://github.com/lisong/code-push-server)가 현재 활발히 유지·보수되고 있지 않기 때문에, 우리는 다음 목적을 위해 이 포크를 만들었습니다: + +- 의존성을 최신 상태로 유지 +- 최신 공식 CodePush 클라이언트와의 호환성 문제 해결 +- 공식 `react-native-code-push` 클라이언트만 사용하기 때문에, + [is_use_diff_text](https://github.com/lisong/code-push-server#advance-feature) 같은 커스텀 기능은 지원하지 않습니다. +- 프로덕션에서는 `react-native-code-push`만 사용합니다. + 다른 CodePush 클라이언트도 대부분 동일하게 동작할 것이지만, 문제가 있다면 Issue 또는 PR 환영합니다. + +## 지원되는 저장소(Storage) 모드 + +- local: 로컬 머신(서버 디스크)에 번들 파일 저장 +- qiniu: [qiniu](http://www.qiniu.com/)에 저장 +- s3: [AWS S3](https://aws.amazon.com/)에 저장 +- oss: [Alibaba Cloud OSS](https://www.aliyun.com/product/oss)에 저장 +- tencentcloud: [Tencent Cloud COS](https://cloud.tencent.com/product/cos)에 저장 + +## CodePush 핫 업데이트 올바르게 사용하기 + +- Apple App은 핫 업데이트 사용을 허용하지만, + [Apple 개발자 약관](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf)에 따라 사용자 경험을 해치지 않도록 **반드시 Silent Update(무알림 업데이트)** 로만 사용해야 합니다. + + Google Play는 silent update를 허용하지 않으며, **업데이트 안내 팝업을 반드시 표시해야 합니다.** + + 중국 Android 마켓은 **Silent Update만 허용**합니다. + 팝업을 띄우면 “최신 버전의 바이너리 앱을 제출하세요”라는 이유로 반려될 수 있습니다. + +- React Native는 플랫폼별로 bundle 파일이 다르기 때문에, + CodePush Server 사용 시 **iOS/Android 앱을 각각 따로 생성**해야 합니다. + 예: `CodePushDemo-ios`, `CodePushDemo-android` + +- `react-native-code-push`는 리소스 파일만 업데이트하고, + **Java / Objective-C 네이티브 코드는 업데이트하지 않습니다.** + + 따라서 npm 패키지 버전을 올렸는데 해당 패키지가 네이티브 코드를 변경했다면, + 반드시 **앱 버전(ios: Info.plist의 CFBundleShortVersionString / android: build.gradle의 versionName)** 을 증가시키고 + **새로운 앱을 스토어에 제출해야 합니다.** + +- `code-push release-react` 명령을 사용하여 배포할 것을 추천합니다. + (예: `code-push release-react CodePushDemo-ios ios -d Production`) + 이 명령은 번들 생성과 배포를 한 번에 수행합니다. + +- App Store에 새 버전을 제출할 때는 반드시 **해당 버전에 대한 초기 CodePush 릴리즈도 함께 업로드**해야 합니다. + 이후 모든 CodePush 릴리즈는 이 초기 버전을 기준으로 diff 패치를 생성하기 때문입니다. + +### CodePush CLI + +- 앱 관리 및 CodePush 릴리즈 배포는 다음 [code-push-cli](https://github.com/shm-open/code-push-cli)를 사용하세요. + +### 클라이언트 + +- [React Native](https://github.com/Microsoft/react-native-code-push) +- [Cordova](https://github.com/microsoft/cordova-plugin-code-push) +- [Capacitor](https://github.com/mapiacompany/capacitor-codepush) + +## CodePush Server 설치 방법 + +- [docker](./docs/install-server-by-docker.md) (추천) +- [수동 설치](./docs/install-server.md) + +## 기본 계정 정보 + +- 계정: `admin` +- 비밀번호: `123456` + +## FAQ + +- [비밀번호 변경](https://github.com/lisong/code-push-server/issues/43) +- [code-push-server 일반적인 문제 해결 (중국어)](https://github.com/lisong/code-push-server/issues/135) +- 지원되는 targetBinaryVersion 형식 + - `*` + - `1.2.3` + - `1.2` / `1.2.*` + - `1.2.3 - 1.2.7` + - `>=1.2.3 <1.2.7` + - `~1.2.3` + - `^1.2.3` diff --git a/README.md b/README.md index c3f3d692..c2bb93f2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # CodePush Server ![Node.js CI](https://github.com/shm-open/code-push-server/workflows/Node.js%20CI/badge.svg) -[[Chinese version 中文版]](./README.cn.md) +[[Korean version 한국어]](./README.ko.md) [[Chinese version 中文版]](./README.cn.md) CodePush Server is a CodePush program server. The official Microsoft CodePush service is slow in China, therefore we use this to host our own server. @@ -9,7 +9,7 @@ CodePush Server is a CodePush program server. The official Microsoft CodePush se Since the original [code-push-server](https://github.com/lisong/code-push-server) project is not actively maintained, we created this fork to: - keep dependencies up-to-date -- fix any compatiblity issue with latest official code-push clients +- fix any compatibility issue with latest official code-push clients - we only stick to official react-native-code-push client, therefore the customized feature like [is_use_diff_text](https://github.com/lisong/code-push-server#advance-feature) won't be supported. - we only use react-native-code-push client in production, most of the feature should be no difference for the rest CodePush clients, but if you found any, issues and PRs are always welcome. @@ -23,11 +23,11 @@ Since the original [code-push-server](https://github.com/lisong/code-push-server ## Correct use of code-push hot update -- Apple App allows the use of hot updates [Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), in order not to affect the user experience, it is stipulated that silent updates must be used. Google Play cannot use silent updates, and a pop-up box must inform users that there is an update to the app. China's android market must use silent updates (if the pop-up box prompts, the app will be rejected by the reason of "please upload the latest version of the binary application package"). -- The bundles of react-native are different for different platforms. When using code-push-server, you must create different applications to distinguish them (eg. CodePushDemo-ios and CodePushDemo-android) -- react-native-code-push only updates resource files, not java and Objective C, so when npm upgrades the version of the dependent package, if the localized implementation used by the dependent package, the application version number must be changed at this time (ios modify Info CFBundleShortVersionString in .plist, android modify versionName in build.gradle), then recompile the app and publish it to the app store. -- It is recommended to use the code-push release-react command to release the application, which combines the packaging and release commands (eg. code-push release-react CodePushDemo-ios ios -d Production) -- Every time a new version is submitted to the App Store, an initial version should also be released to code-push-server based on the submitted version. (Because every time a version is released to code-push-server, code-puse-server will compare it with the initial version to generate a patch version) +- Apple App allows the use of hot updates [Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), in order not to affect the user experience, it is stipulated that silent updates must be used. Google Play cannot use silent updates, and a pop-up box must inform users that there is an update to the app. China's android market must use silent updates (if the pop-up box prompts, the app will be rejected by the reason of "please upload the latest version of the binary application package"). +- The bundles of react-native are different for different platforms. When using code-push-server, you must create different applications to distinguish them (eg. CodePushDemo-ios and CodePushDemo-android) +- react-native-code-push only updates resource files, not java and Objective C, so when npm upgrades the version of the dependent package, if the localized implementation used by the dependent package, the application version number must be changed at this time (ios modify Info CFBundleShortVersionString in .plist, android modify versionName in build.gradle), then recompile the app and publish it to the app store. +- It is recommended to use the code-push release-react command to release the application, which combines the packaging and release commands (eg. code-push release-react CodePushDemo-ios ios -d Production) +- Every time a new version is submitted to the App Store, an initial version should also be released to code-push-server based on the submitted version. (Because every time a version is released to code-push-server, code-puse-server will compare it with the initial version to generate a patch version) ### CodePush Cli diff --git a/package-lock.json b/package-lock.json index c3999141..863ce39e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,39 +1,118 @@ { "name": "@shm-open/code-push-server", "version": "2.1.6", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@ampproject/remapping": { + "packages": { + "": { + "name": "@shm-open/code-push-server", + "version": "2.1.6", + "license": "MIT", + "dependencies": { + "aliyun-oss-upload-stream": "1.3.0", + "aliyun-sdk": "1.12.4", + "aws-sdk": "2.1176.0", + "bcryptjs": "2.4.3", + "body-parser": "1.20.0", + "cookie-parser": "1.4.6", + "cos-nodejs-sdk-v5": "2.11.12", + "dotenv": "^17.2.3", + "express": "4.18.1", + "extract-zip": "2.0.1", + "formidable": "2.0.1", + "fs-extra": "10.1.0", + "helmet": "5.1.0", + "i18n": "0.15.0", + "jsonwebtoken": "8.5.1", + "kv-logger": "0.5.3", + "lodash": "4.17.21", + "moment": "2.29.3", + "mysql2": "2.3.3", + "node-fetch": "2.6.7", + "nodemailer": "6.7.7", + "pug": "3.0.2", + "qiniu": "7.7.0", + "rand-token": "1.0.1", + "recursive-readdir": "2.2.2", + "redis": "4.2.0", + "sequelize": "6.21.3", + "slash": "3.0.0", + "validator": "13.7.0", + "yargs": "17.5.1", + "yazl": "2.5.1" + }, + "bin": { + "code-push-server": "bin/www.js", + "code-push-server-db": "bin/db.js" + }, + "devDependencies": { + "@shm-open/eslint-config-bundle": "1.9.13", + "@types/bcryptjs": "2.4.2", + "@types/body-parser": "1.19.2", + "@types/cookie-parser": "1.4.3", + "@types/formidable": "2.0.5", + "@types/fs-extra": "9.0.13", + "@types/i18n": "0.13.4", + "@types/jsonwebtoken": "8.5.9", + "@types/lodash": "4.14.195", + "@types/node-fetch": "2.6.2", + "@types/nodemailer": "6.4.5", + "@types/recursive-readdir": "2.2.1", + "@types/validator": "13.7.10", + "@types/yazl": "2.4.2", + "concurrently": "7.4.0", + "mocha": "10.0.0", + "nyc": "15.1.0", + "should": "13.2.3", + "standard-version": "9.5.0", + "supertest": "6.2.4", + "supervisor": "0.12.0", + "typescript": "4.9.5" + }, + "engines": { + "node": ">= 6.0", + "npm": ">= 3.10.8" + } + }, + "node_modules/@ampproject/remapping": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/code-frame": { + "node_modules/@babel/code-frame": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, - "requires": { + "dependencies": { "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/compat-data": { + "node_modules/@babel/compat-data": { "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/core": { + "node_modules/@babel/core": { "version": "7.17.5", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", "dev": true, - "requires": { + "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.3", @@ -50,131 +129,179 @@ "json5": "^2.1.2", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/generator": { + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { "version": "7.17.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "@babel/helper-compilation-targets": { + "node_modules/@babel/helper-compilation-targets": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.16.4", "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "@babel/helper-environment-visitor": { + "node_modules/@babel/helper-environment-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-function-name": { + "node_modules/@babel/helper-function-name": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-get-function-arity": { + "node_modules/@babel/helper-get-function-arity": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-hoist-variables": { + "node_modules/@babel/helper-hoist-variables": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-imports": { + "node_modules/@babel/helper-module-imports": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-transforms": { + "node_modules/@babel/helper-module-transforms": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", "@babel/helper-simple-access": "^7.16.7", @@ -183,100 +310,136 @@ "@babel/template": "^7.16.7", "@babel/traverse": "^7.16.7", "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-simple-access": { + "node_modules/@babel/helper-simple-access": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-split-export-declaration": { + "node_modules/@babel/helper-split-export-declaration": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-validator-identifier": { + "node_modules/@babel/helper-validator-identifier": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-option": { + "node_modules/@babel/helper-validator-option": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helpers": { + "node_modules/@babel/helpers": { "version": "7.17.2", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.0", "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/highlight": { + "node_modules/@babel/highlight": { "version": "7.16.10", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { + "node_modules/@babel/parser": { "version": "7.17.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/runtime": { + "node_modules/@babel/runtime": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", "dev": true, - "requires": { + "dependencies": { "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/runtime-corejs3": { + "node_modules/@babel/runtime-corejs3": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.6.tgz", "integrity": "sha512-cOu5wH2JFBgMjje+a+fz2JNIWU4GzYpl05oSob3UDvBEh6EuIn+TXFHMmBbhSb+k/4HMzgKCQfEEDArAWNF9Cw==", "dev": true, - "requires": { + "dependencies": { "core-js-pure": "^3.20.2", "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/template": { + "node_modules/@babel/template": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/traverse": { + "node_modules/@babel/traverse": { "version": "7.17.3", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.3", "@babel/helper-environment-visitor": "^7.16.7", @@ -288,39 +451,51 @@ "debug": "^4.1.0", "globals": "^11.1.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/types": { + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/types": { "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@eslint/eslintrc": { + "node_modules/@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, - "requires": { + "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.2", @@ -331,213 +506,277 @@ "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@humanwhocodes/config-array": { + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "requires": { + "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@humanwhocodes/object-schema": { + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true }, - "@hutson/parse-repository-url": { + "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@istanbuljs/load-nyc-config": { + "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" } }, - "@istanbuljs/schema": { + "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "@jridgewell/resolve-uri": { + "node_modules/@jridgewell/resolve-uri": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/sourcemap-codec": { + "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.11", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", "dev": true }, - "@jridgewell/trace-mapping": { + "node_modules/@jridgewell/trace-mapping": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@messageformat/core": { + "node_modules/@messageformat/core": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@messageformat/core/-/core-3.0.1.tgz", "integrity": "sha512-yxj2+0e46hcZqJfNf0ZYbC2q6WlcGoh4g11mCyRtTueR0AD8F9z4JMYAS1aOiFG8Vl1LZg/h5hZHKmWTAyZq8g==", - "requires": { + "dependencies": { "@messageformat/date-skeleton": "^1.0.0", "@messageformat/number-skeleton": "^1.0.0", "@messageformat/parser": "^5.0.0", @@ -546,153 +785,180 @@ "safe-identifier": "^0.4.1" } }, - "@messageformat/date-skeleton": { + "node_modules/@messageformat/date-skeleton": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@messageformat/date-skeleton/-/date-skeleton-1.0.1.tgz", "integrity": "sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg==" }, - "@messageformat/number-skeleton": { + "node_modules/@messageformat/number-skeleton": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@messageformat/number-skeleton/-/number-skeleton-1.1.0.tgz", "integrity": "sha512-F0Io+GOSvFFxvp9Ze3L5kAoZ2NnOAT0Mr/jpGNd3fqo8A0t4NxNIAcCdggtl2B/gN2ErkIKSBVPrF7xcW1IGvA==" }, - "@messageformat/parser": { + "node_modules/@messageformat/parser": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.0.0.tgz", "integrity": "sha512-WiDKhi8F0zQaFU8cXgqq69eYFarCnTVxKcvhAONufKf0oUxbqLMW6JX6rV4Hqh+BEQWGyKKKHY4g1XA6bCLylA==", - "requires": { + "dependencies": { "moo": "^0.5.1" } }, - "@messageformat/runtime": { + "node_modules/@messageformat/runtime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@messageformat/runtime/-/runtime-3.0.1.tgz", "integrity": "sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg==", - "requires": { + "dependencies": { "make-plural": "^7.0.0" } }, - "@nodelib/fs.scandir": { + "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "@nodelib/fs.stat": { + "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 8" + } }, - "@nodelib/fs.walk": { + "node_modules/@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "@protobufjs/aspromise": { + "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" }, - "@protobufjs/base64": { + "node_modules/@protobufjs/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, - "@protobufjs/codegen": { + "node_modules/@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" }, - "@protobufjs/eventemitter": { + "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" }, - "@protobufjs/fetch": { + "node_modules/@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { + "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, - "@protobufjs/float": { + "node_modules/@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" }, - "@protobufjs/inquire": { + "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" }, - "@protobufjs/path": { + "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" }, - "@protobufjs/pool": { + "node_modules/@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" }, - "@protobufjs/utf8": { + "node_modules/@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, - "@redis/bloom": { + "node_modules/@redis/bloom": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.0.2.tgz", - "integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==" + "integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } }, - "@redis/client": { + "node_modules/@redis/client": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.2.0.tgz", "integrity": "sha512-a8Nlw5fv2EIAFJxTDSSDVUT7yfBGpZO96ybZXzQpgkyLg/dxtQ1uiwTc0EGfzg1mrPjZokeBSEGTbGXekqTNOg==", - "requires": { + "dependencies": { "cluster-key-slot": "1.1.0", "generic-pool": "3.8.2", "yallist": "4.0.0" + }, + "engines": { + "node": ">=14" } }, - "@redis/graph": { + "node_modules/@redis/graph": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.0.1.tgz", - "integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==" + "integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } }, - "@redis/json": { + "node_modules/@redis/json": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.3.tgz", - "integrity": "sha512-4X0Qv0BzD9Zlb0edkUoau5c1bInWSICqXAGrpwEltkncUwcxJIGEcVryZhLgb0p/3PkKaLIWkjhHRtLe9yiA7Q==" + "integrity": "sha512-4X0Qv0BzD9Zlb0edkUoau5c1bInWSICqXAGrpwEltkncUwcxJIGEcVryZhLgb0p/3PkKaLIWkjhHRtLe9yiA7Q==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } }, - "@redis/search": { + "node_modules/@redis/search": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.0.6.tgz", - "integrity": "sha512-pP+ZQRis5P21SD6fjyCeLcQdps+LuTzp2wdUbzxEmNhleighDDTD5ck8+cYof+WLec4csZX7ks+BuoMw0RaZrA==" + "integrity": "sha512-pP+ZQRis5P21SD6fjyCeLcQdps+LuTzp2wdUbzxEmNhleighDDTD5ck8+cYof+WLec4csZX7ks+BuoMw0RaZrA==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } }, - "@redis/time-series": { + "node_modules/@redis/time-series": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz", - "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==" + "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } }, - "@shm-open/eslint-config-bundle": { + "node_modules/@shm-open/eslint-config-bundle": { "version": "1.9.13", "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.13.tgz", "integrity": "sha512-QwyV+aZm5aIcNV1payDz46z3yJE4tUvKFKUxtxLAqysPwJeSg6CklVXuWHc2e8hStcF5U0dMLEoKAg60EOxGBA==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/eslint-plugin": "5.30.6", "@typescript-eslint/parser": "5.30.6", "babel-eslint": "10.1.0", @@ -711,252 +977,256 @@ "prettier": "2.7.1" } }, - "@tootallnate/once": { + "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } }, - "@types/bcryptjs": { + "node_modules/@types/bcryptjs": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz", "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==", "dev": true }, - "@types/body-parser": { + "node_modules/@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, - "requires": { + "dependencies": { "@types/connect": "*", "@types/node": "*" } }, - "@types/connect": { + "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/cookie-parser": { + "node_modules/@types/cookie-parser": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", "dev": true, - "requires": { + "dependencies": { "@types/express": "*" } }, - "@types/debug": { + "node_modules/@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "requires": { + "dependencies": { "@types/ms": "*" } }, - "@types/express": { + "node_modules/@types/express": { "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, - "requires": { + "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", "@types/qs": "*", "@types/serve-static": "*" } }, - "@types/express-serve-static-core": { + "node_modules/@types/express-serve-static-core": { "version": "4.17.28", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*" } }, - "@types/formidable": { + "node_modules/@types/formidable": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-2.0.5.tgz", "integrity": "sha512-uvMcdn/KK3maPOaVUAc3HEYbCEhjaGFwww4EsX6IJfWIJ1tzHtDHczuImH3GKdusPnAAmzB07St90uabZeCKPA==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/fs-extra": { + "node_modules/@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/i18n": { + "node_modules/@types/i18n": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/@types/i18n/-/i18n-0.13.4.tgz", "integrity": "sha512-PN4ZsplbpHZ2eaYixFNWkZKN51pcB02K2UKvqHVbrzq2jTO0sChPMuKKYAW1ZbElyHUvPgFeYsz9rqktChGyMw==", "dev": true }, - "@types/json-schema": { + "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "@types/json5": { + "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "@types/jsonwebtoken": { + "node_modules/@types/jsonwebtoken": { "version": "8.5.9", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/lodash": { + "node_modules/@types/lodash": { "version": "4.14.195", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==", "dev": true }, - "@types/long": { + "node_modules/@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, - "@types/mime": { + "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, - "@types/minimist": { + "node_modules/@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, - "@types/ms": { + "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, - "@types/node": { + "node_modules/@types/node": { "version": "17.0.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" }, - "@types/node-fetch": { + "node_modules/@types/node-fetch": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*", "form-data": "^3.0.0" - }, + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "@types/nodemailer": { + "node_modules/@types/nodemailer": { "version": "6.4.5", "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.5.tgz", "integrity": "sha512-zuP3nBRQHI6M2PkXnGGy1Ww4VB+MyYHGgnfV2T+JR9KLkeWqPJuyVUgLpKXuFnA/b7pZaIDFh2sV4759B7jK1g==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/normalize-package-data": { + "node_modules/@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "@types/qs": { + "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, - "@types/range-parser": { + "node_modules/@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, - "@types/recursive-readdir": { + "node_modules/@types/recursive-readdir": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.1.tgz", "integrity": "sha512-Xd+Ptc4/F2ueInqy5yK2FI5FxtwwbX2+VZpcg+9oYsFJVen8qQKGapCr+Bi5wQtHU1cTXT8s+07lo/nKPgu8Gg==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/serve-static": { + "node_modules/@types/serve-static": { "version": "1.13.10", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, - "requires": { + "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, - "@types/validator": { + "node_modules/@types/validator": { "version": "13.7.10", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.10.tgz", "integrity": "sha512-t1yxFAR2n0+VO6hd/FJ9F2uezAZVWHLmpmlJzm1eX03+H7+HsuTAp7L8QJs+2pQCfWkP1+EXsGK9Z9v7o/qPVQ==" }, - "@types/yauzl": { + "node_modules/@types/yauzl": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", "optional": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/yazl": { + "node_modules/@types/yazl": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@types/yazl/-/yazl-2.4.2.tgz", "integrity": "sha512-T+9JH8O2guEjXNxqmybzQ92mJUh2oCwDDMSSimZSe1P+pceZiFROZLYmcbqkzV5EUwz6VwcKXCO2S2yUpra6XQ==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@typescript-eslint/eslint-plugin": { + "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.30.6", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.6.tgz", "integrity": "sha512-J4zYMIhgrx4MgnZrSDD7sEnQp7FmhKNOaqaOpaoQ/SfdMfRB/0yvK74hTnvH+VQxndZynqs5/Hn4t+2/j9bADg==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/scope-manager": "5.30.6", "@typescript-eslint/type-utils": "5.30.6", "@typescript-eslint/utils": "5.30.6", @@ -967,121 +1237,215 @@ "semver": "^7.3.7", "tsutils": "^3.21.0" }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "@typescript-eslint/experimental-utils": { + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { "version": "5.30.6", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.30.6.tgz", "integrity": "sha512-bqvT+0L8IjtW7MCrMgm9oVNxs4g7mESro1mm5c1/SNfTnHuFTf9OUX1WzVkTz75M9cp//UrTrSmGvK48NEKshQ==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/utils": "5.30.6" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "@typescript-eslint/parser": { + "node_modules/@typescript-eslint/parser": { "version": "5.30.6", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.6.tgz", "integrity": "sha512-gfF9lZjT0p2ZSdxO70Xbw8w9sPPJGfAdjK7WikEjB3fcUI/yr9maUVEdqigBjKincUYNKOmf7QBMiTf719kbrA==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/scope-manager": "5.30.6", "@typescript-eslint/types": "5.30.6", "@typescript-eslint/typescript-estree": "5.30.6", "debug": "^4.3.4" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/scope-manager": { "version": "5.30.6", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.6.tgz", "integrity": "sha512-Hkq5PhLgtVoW1obkqYH0i4iELctEKixkhWLPTYs55doGUKCASvkjOXOd/pisVeLdO24ZX9D6yymJ/twqpJiG3g==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/types": "5.30.6", "@typescript-eslint/visitor-keys": "5.30.6" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "@typescript-eslint/type-utils": { + "node_modules/@typescript-eslint/type-utils": { "version": "5.30.6", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.6.tgz", "integrity": "sha512-GFVVzs2j0QPpM+NTDMXtNmJKlF842lkZKDSanIxf+ArJsGeZUIaeT4jGg+gAgHt7AcQSFwW7htzF/rbAh2jaVA==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/utils": "5.30.6", "debug": "^4.3.4", "tsutils": "^3.21.0" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@typescript-eslint/types": { + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/types": { "version": "5.30.6", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.6.tgz", "integrity": "sha512-HdnP8HioL1F7CwVmT4RaaMX57RrfqsOMclZc08wGMiDYJBsLGBM7JwXM4cZJmbWLzIR/pXg1kkrBBVpxTOwfUg==", - "dev": true + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "@typescript-eslint/typescript-estree": { + "node_modules/@typescript-eslint/typescript-estree": { "version": "5.30.6", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.6.tgz", "integrity": "sha512-Z7TgPoeYUm06smfEfYF0RBkpF8csMyVnqQbLYiGgmUSTaSXTP57bt8f0UFXstbGxKIreTwQCujtaH0LY9w9B+A==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/types": "5.30.6", "@typescript-eslint/visitor-keys": "5.30.6", "debug": "^4.3.4", @@ -1090,385 +1454,530 @@ "semver": "^7.3.7", "tsutils": "^3.21.0" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@typescript-eslint/utils": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { "version": "5.30.6", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.6.tgz", "integrity": "sha512-xFBLc/esUbLOJLk9jKv0E9gD/OH966M40aY9jJ8GiqpSkP2xOV908cokJqqhVd85WoIvHVHYXxSFE4cCSDzVvA==", "dev": true, - "requires": { + "dependencies": { "@types/json-schema": "^7.0.9", "@typescript-eslint/scope-manager": "5.30.6", "@typescript-eslint/types": "5.30.6", "@typescript-eslint/typescript-estree": "5.30.6", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "@typescript-eslint/visitor-keys": { + "node_modules/@typescript-eslint/visitor-keys": { "version": "5.30.6", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.6.tgz", "integrity": "sha512-41OiCjdL2mCaSDi2SvYbzFLlqqlm5v1ZW9Ym55wXKL/Rx6OOB1IbuFGo71Fj6Xy90gJDFTlgOS+vbmtGHPTQQA==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/types": "5.30.6", "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "@ungap/promise-all-settled": { + "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "accepts": { + "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { + "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "acorn": { + "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "acorn-jsx": { + "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "acorn-walk": { + "node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } }, - "add-stream": { + "node_modules/add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", "dev": true }, - "address": { + "node_modules/address": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==" + "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", + "engines": { + "node": ">= 10.0.0" + } }, - "agent-base": { + "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { + "dependencies": { "debug": "4" }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "agentkeepalive": { + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/agentkeepalive": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "requires": { + "dependencies": { "debug": "^4.1.0", "depd": "^1.1.2", "humanize-ms": "^1.2.1" }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/agentkeepalive/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "aggregate-error": { + "node_modules/agentkeepalive/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "requires": { + "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "ajv": { + "node_modules/ajv": { "version": "7.2.4", "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", - "requires": { + "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "ajv-formats": { + "node_modules/ajv-formats": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-1.6.1.tgz", "integrity": "sha512-4CjkH20If1lhR5CGtqkrVg3bbOtFEG80X9v6jDOIUhbzzbB+UzPBGy8GQhUNVZ0yvMHdMpawCOcy5ydGMsagGQ==", - "requires": { + "dependencies": { + "ajv": "^7.0.0" + }, + "peerDependencies": { "ajv": "^7.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "aliyun-oss-upload-stream": { + "node_modules/aliyun-oss-upload-stream": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/aliyun-oss-upload-stream/-/aliyun-oss-upload-stream-1.3.0.tgz", "integrity": "sha1-ODAbGfA0QGhDjrY5d6DNldYEcMA=" }, - "aliyun-sdk": { + "node_modules/aliyun-sdk": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/aliyun-sdk/-/aliyun-sdk-1.12.4.tgz", "integrity": "sha512-g8BQkmWO3clzWMp49MuXVUKqEQl2IV19/SaIyyoQXq6e0UjqFGTZsn5PFN9C4UQeGDO9cxsGlgWZE8ZOD3Au5Q==", - "requires": { + "dependencies": { "node_memcached": "1.1.3", "pomelo-protobuf": "^0.4.0", "protobufjs": ">=5.0.3", "xml2js": "0.4.4", "xmlbuilder": "^13.0.2" + }, + "engines": { + "node": ">= 0.6.0" } }, - "ansi-colors": { + "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { + "dependencies": { "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "any-promise": { + "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, - "anymatch": { + "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, - "requires": { + "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "append-transform": { + "node_modules/append-transform": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, - "requires": { + "dependencies": { "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "archy": { + "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, - "argparse": { + "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "aria-query": { + "node_modules/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.10.2", "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" } }, - "array-flatten": { + "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "array-ify": { + "node_modules/array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, - "array-includes": { + "node_modules/array-includes": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.19.5", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "array-union": { + "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "array.prototype.flat": { + "node_modules/array.prototype.flat": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.2", "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "array.prototype.flatmap": { + "node_modules/array.prototype.flatmap": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.2", "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "arrify": { + "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "asap": { + "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "asn1": { + "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { + "dependencies": { "safer-buffer": "~2.1.0" } }, - "assert-never": { + "node_modules/assert-never": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==" }, - "assert-plus": { + "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } }, - "ast-types": { + "node_modules/ast-types": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "requires": { + "dependencies": { "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" } }, - "ast-types-flow": { + "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, - "asynckit": { + "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "atomically": { + "node_modules/atomically": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", - "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" + "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", + "engines": { + "node": ">=10.12.0" + } }, - "available-typed-arrays": { + "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "aws-sdk": { + "node_modules/aws-sdk": { "version": "2.1176.0", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1176.0.tgz", "integrity": "sha512-jinSKjACYHIkkz0UlFwQXwz8HAHZIeJg5wOnZoMTKU3/WM6Vh26hZJJ6XkwDAfBmyWp3V9qFdQoSAiO8SeXKjw==", - "requires": { + "dependencies": { "buffer": "4.9.2", "events": "1.1.1", "ieee754": "1.1.13", @@ -1480,61 +1989,75 @@ "uuid": "8.0.0", "xml2js": "0.4.19" }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/aws-sdk/node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dependencies": { - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" - }, - "uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==" - } + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/aws-sdk/node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", + "engines": { + "node": ">=4.0" } }, - "aws-sign2": { + "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } }, - "aws4": { + "node_modules/aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, - "axe-core": { + "node_modules/axe-core": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "axobject-query": { + "node_modules/axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, - "babel-eslint": { + "node_modules/babel-eslint": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.7.0", "@babel/traverse": "^7.7.0", @@ -1542,70 +2065,100 @@ "eslint-visitor-keys": "^1.0.0", "resolve": "^1.12.0" }, - "dependencies": { - "eslint-visitor-keys": { - "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==", - "dev": true - } + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { + "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==", + "dev": true, + "engines": { + "node": ">=4" } }, - "babel-walk": { + "node_modules/babel-walk": { "version": "3.0.0-canary-5", "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "requires": { + "dependencies": { "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base64-js": { + "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "bcrypt-pbkdf": { + "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "requires": { + "dependencies": { "tweetnacl": "^0.14.3" } }, - "bcryptjs": { + "node_modules/bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" }, - "before": { + "node_modules/before": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/before/-/before-0.0.1.tgz", - "integrity": "sha512-1J5SWbkoVJH9DTALN8igB4p+nPKZzPrJ/HomqBDLpfUvDXCdjdBmBUcH5McZfur0lftVssVU6BZug5NYh87zTw==" + "integrity": "sha512-1J5SWbkoVJH9DTALN8igB4p+nPKZzPrJ/HomqBDLpfUvDXCdjdBmBUcH5McZfur0lftVssVU6BZug5NYh87zTw==", + "engines": { + "node": "*" + } }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "block-stream2": { + "node_modules/block-stream2": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", - "requires": { + "dependencies": { "readable-stream": "^3.4.0" } }, - "body-parser": { + "node_modules/body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { + "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", @@ -1619,363 +2172,470 @@ "type-is": "~1.6.18", "unpipe": "1.0.0" }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "node_modules/body-parser/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/body-parser/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, - "buffer-crc32": { + "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } }, - "buffer-equal-constant-time": { + "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, - "buffer-from": { + "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "bytes": { + "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } }, - "caching-transform": { + "node_modules/caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, - "requires": { + "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", "package-hash": "^4.0.0", "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "call-bind": { + "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { + "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "callsites": { + "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "camelcase": { + "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "camelcase-keys": { + "node_modules/camelcase-keys": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" } }, - "caniuse-lite": { + "node_modules/caniuse-lite": { "version": "1.0.30001312", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", - "dev": true + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } }, - "caseless": { + "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, - "chalk": { + "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - } + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" } }, - "character-parser": { + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/character-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", - "requires": { + "dependencies": { "is-regex": "^1.0.3" } }, - "chokidar": { + "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "clean-stack": { + "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "cliui": { + "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { + "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, - "cluster-key-slot": { + "node_modules/cluster-key-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", - "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==" + "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==", + "engines": { + "node": ">=0.10.0" + } }, - "color-convert": { + "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { + "dependencies": { "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "combined-stream": { + "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { + "dependencies": { "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "commondir": { + "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "compare-func": { + "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, - "requires": { + "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" - }, + } + }, + "node_modules/compare-func/node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - } + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "component-emitter": { + "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "concat-stream": { + "node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, - "requires": { + "engines": [ + "node >= 6.0" + ], + "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, - "concurrently": { + "node_modules/concurrently": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.4.0.tgz", "integrity": "sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.0", "date-fns": "^2.29.1", "lodash": "^4.17.21", @@ -1986,50 +2646,74 @@ "tree-kill": "^1.2.2", "yargs": "^17.3.1" }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "conf": { + "node_modules/conf": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/conf/-/conf-9.0.2.tgz", "integrity": "sha512-rLSiilO85qHgaTBIIHQpsv8z+NnVfZq3cKuYNCXN1AOqPzced0GWZEe/A517VldRLyQYXUMyV+vszavE2jSAqw==", - "requires": { + "dependencies": { "ajv": "^7.0.3", "ajv-formats": "^1.5.1", "atomically": "^1.7.0", @@ -2041,42 +2725,54 @@ "onetime": "^5.1.2", "pkg-up": "^3.1.0", "semver": "^7.3.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "confusing-browser-globals": { + "node_modules/confusing-browser-globals": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, - "constantinople": { + "node_modules/constantinople": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "requires": { + "dependencies": { "@babel/parser": "^7.6.0", "@babel/types": "^7.6.1" } }, - "content-disposition": { + "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { + "dependencies": { "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" } }, - "content-type": { + "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } }, - "conventional-changelog": { + "node_modules/conventional-changelog": { "version": "3.1.25", "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", "dev": true, - "requires": { + "dependencies": { "conventional-changelog-angular": "^5.0.12", "conventional-changelog-atom": "^2.0.8", "conventional-changelog-codemirror": "^2.0.8", @@ -2088,59 +2784,74 @@ "conventional-changelog-jquery": "^3.0.11", "conventional-changelog-jshint": "^2.0.9", "conventional-changelog-preset-loader": "^2.3.4" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-angular": { + "node_modules/conventional-changelog-angular": { "version": "5.0.13", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, - "requires": { + "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-atom": { + "node_modules/conventional-changelog-atom": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", "dev": true, - "requires": { + "dependencies": { "q": "^1.5.1" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-codemirror": { + "node_modules/conventional-changelog-codemirror": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", "dev": true, - "requires": { + "dependencies": { "q": "^1.5.1" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-config-spec": { + "node_modules/conventional-changelog-config-spec": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", "dev": true }, - "conventional-changelog-conventionalcommits": { + "node_modules/conventional-changelog-conventionalcommits": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, - "requires": { + "dependencies": { "compare-func": "^2.0.0", "lodash": "^4.17.15", "q": "^1.5.1" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-core": { + "node_modules/conventional-changelog-core": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, - "requires": { + "dependencies": { "add-stream": "^1.0.0", "conventional-changelog-writer": "^5.0.0", "conventional-commits-parser": "^3.2.0", @@ -2155,66 +2866,87 @@ "read-pkg": "^3.0.0", "read-pkg-up": "^3.0.0", "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-ember": { + "node_modules/conventional-changelog-ember": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", "dev": true, - "requires": { + "dependencies": { "q": "^1.5.1" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-eslint": { + "node_modules/conventional-changelog-eslint": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", "dev": true, - "requires": { + "dependencies": { "q": "^1.5.1" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-express": { + "node_modules/conventional-changelog-express": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", "dev": true, - "requires": { + "dependencies": { "q": "^1.5.1" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-jquery": { + "node_modules/conventional-changelog-jquery": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", "dev": true, - "requires": { + "dependencies": { "q": "^1.5.1" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-jshint": { + "node_modules/conventional-changelog-jshint": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", "dev": true, - "requires": { + "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" + }, + "engines": { + "node": ">=10" } }, - "conventional-changelog-preset-loader": { + "node_modules/conventional-changelog-preset-loader": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + } }, - "conventional-changelog-writer": { + "node_modules/conventional-changelog-writer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, - "requires": { + "dependencies": { "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", "handlebars": "^4.7.7", @@ -2225,45 +2957,61 @@ "split": "^1.0.0", "through2": "^4.0.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "conventional-commits-filter": { + "node_modules/conventional-commits-filter": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, - "requires": { + "dependencies": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" } }, - "conventional-commits-parser": { + "node_modules/conventional-commits-parser": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, - "requires": { - "JSONStream": "^1.0.4", + "dependencies": { "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "conventional-recommended-bump": { + "node_modules/conventional-recommended-bump": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, - "requires": { + "dependencies": { "concat-stream": "^2.0.0", "conventional-changelog-preset-loader": "^2.3.4", "conventional-commits-filter": "^2.0.7", @@ -2272,418 +3020,562 @@ "git-semver-tags": "^4.1.1", "meow": "^8.0.0", "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "safe-buffer": "~5.1.1" } }, - "cookie": { + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } }, - "cookie-parser": { + "node_modules/cookie-parser": { "version": "1.4.6", "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", - "requires": { + "dependencies": { "cookie": "0.4.1", "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" } }, - "cookie-signature": { + "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "cookiejar": { + "node_modules/cookiejar": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", "dev": true }, - "copy-to": { + "node_modules/copy-to": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==" }, - "core-js-pure": { + "node_modules/core-js-pure": { "version": "3.23.4", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.4.tgz", "integrity": "sha512-lizxkcgj3XDmi7TUBFe+bQ1vNpD5E4t76BrBWI3HdUxdw/Mq1VF4CkiHzIKyieECKtcODK2asJttoofEeUKICQ==", - "dev": true + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "cos-nodejs-sdk-v5": { + "node_modules/cos-nodejs-sdk-v5": { "version": "2.11.12", "resolved": "https://registry.npmjs.org/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.11.12.tgz", "integrity": "sha512-XtSlcrwgcyO8K0LCwNmimtkBErC1yJ55cvZ7nWFWsT0c2AWBw8F/ftGvUhZIZhh7B2SlPdXsFZg+QOU7cwI2GQ==", - "requires": { + "dependencies": { "conf": "^9.0.0", "mime-types": "^2.1.24", "request": "^2.88.2", "xml2js": "^0.4.19" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cos-nodejs-sdk-v5/node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "dependencies": { - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - } + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "crc32": { + "node_modules/cos-nodejs-sdk-v5/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/crc32": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz", - "integrity": "sha512-PFZEGbDUeoNbL2GHIEpJRQGheXReDody/9axKTxhXtQqIL443wnNigtVZO9iuCIMPApKZRv7k2xr8euXHqNxQQ==" + "integrity": "sha512-PFZEGbDUeoNbL2GHIEpJRQGheXReDody/9axKTxhXtQqIL443wnNigtVZO9iuCIMPApKZRv7k2xr8euXHqNxQQ==", + "bin": { + "crc32": "bin/runner.js" + }, + "engines": { + "node": ">= 0.4.0" + } }, - "cross-spawn": { + "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { + "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "damerau-levenshtein": { + "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "dargs": { + "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true - }, - "dashdash": { + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "requires": { + "dependencies": { "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" } }, - "data-uri-to-buffer": { + "node_modules/data-uri-to-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "engines": { + "node": ">= 6" + } }, - "date-fns": { + "node_modules/date-fns": { "version": "2.29.2", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.2.tgz", "integrity": "sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } }, - "dateformat": { + "node_modules/dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "debounce-fn": { + "node_modules/debounce-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", - "requires": { + "dependencies": { "mimic-fn": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "debug": { + "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { + "dependencies": { "ms": "2.0.0" } }, - "decamelize": { + "node_modules/decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "decamelize-keys": { + "node_modules/decamelize-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, - "requires": { + "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "deep-is": { + "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, - "default-require-extensions": { + "node_modules/default-require-extensions": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", "dev": true, - "requires": { + "dependencies": { "strip-bom": "^4.0.0" }, - "dependencies": { - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - } + "engines": { + "node": ">=8" + } + }, + "node_modules/default-require-extensions/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" } }, - "default-user-agent": { + "node_modules/default-user-agent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", "integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==", - "requires": { + "dependencies": { "os-name": "~1.0.3" + }, + "engines": { + "node": ">= 0.10.0" } }, - "define-properties": { + "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { + "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "degenerator": { + "node_modules/degenerator": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", - "requires": { + "dependencies": { "ast-types": "^0.13.2", "escodegen": "^1.8.1", "esprima": "^4.0.0", "vm2": "^3.9.8" + }, + "engines": { + "node": ">= 6" } }, - "delayed-stream": { + "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } }, - "denque": { + "node_modules/denque": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", - "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", + "engines": { + "node": ">=0.10" + } }, - "depd": { + "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } }, - "destroy": { + "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, - "detect-indent": { + "node_modules/detect-indent": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "detect-newline": { + "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "dezalgo": { + "node_modules/dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "requires": { + "dependencies": { "asap": "^2.0.0", "wrappy": "1" } }, - "diff": { + "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.3.1" + } }, - "digest-header": { + "node_modules/digest-header": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/digest-header/-/digest-header-0.0.1.tgz", "integrity": "sha512-Qi0KOZgRnkQJuvMWbs1ZRRajEnbsMU8xlJI4rHIbPC+skHQ30heO5cIHpUFT4jAvAe+zPtdavLSAxASqoyZ3cg==", - "requires": { + "dependencies": { "utility": "0.1.11" }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/digest-header/node_modules/utility": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/utility/-/utility-0.1.11.tgz", + "integrity": "sha1-/eYM+bTkdRlHoM9dEEzik2ciZxU=", "dependencies": { - "utility": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/utility/-/utility-0.1.11.tgz", - "integrity": "sha1-/eYM+bTkdRlHoM9dEEzik2ciZxU=", - "requires": { - "address": ">=0.0.1" - } - } + "address": ">=0.0.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "dir-glob": { + "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "requires": { + "dependencies": { "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "doctrine": { + "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { + "dependencies": { "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "doctypes": { + "node_modules/doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, - "dot-prop": { + "node_modules/dot-prop": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "requires": { + "dependencies": { "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "dotgitignore": { + "node_modules/dotgitignore": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", "dev": true, - "requires": { + "dependencies": { "find-up": "^3.0.0", "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=6" } }, - "dottie": { + "node_modules/dottie": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" }, - "ecc-jsbn": { + "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { + "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, - "ecdsa-sig-formatter": { + "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { + "dependencies": { "safe-buffer": "^5.0.1" } }, - "ee-first": { + "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "electron-to-chromium": { + "node_modules/electron-to-chromium": { "version": "1.4.71", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==", "dev": true }, - "emoji-regex": { + "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "encodeurl": { + "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } }, - "end-of-stream": { + "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { + "dependencies": { "once": "^1.4.0" } }, - "env-paths": { + "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { + "dependencies": { "is-arrayish": "^0.2.1" } }, - "es-abstract": { + "node_modules/es-abstract": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -2708,73 +3600,105 @@ "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" }, - "dependencies": { - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - } + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es-shim-unscopables": { + "node_modules/es-abstract/node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, - "requires": { + "dependencies": { "has": "^1.0.3" } }, - "es-to-primitive": { + "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { + "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es6-error": { + "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "escalade": { + "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } }, - "escape-html": { + "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "escodegen": { + "node_modules/escodegen": { "version": "1.14.3", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { + "dependencies": { "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { "source-map": "~0.6.1" } }, - "eslint": { + "node_modules/eslint": { "version": "8.19.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "requires": { + "dependencies": { "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", @@ -2811,325 +3735,231 @@ "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - } + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "eslint-config-airbnb-base": { + "node_modules/eslint-config-airbnb-base": { "version": "15.0.0", "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, - "requires": { + "dependencies": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", "object.entries": "^1.1.5", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "eslint-config-prettier": { + "node_modules/eslint-config-prettier": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } }, - "eslint-import-resolver-node": { + "node_modules/eslint-import-resolver-node": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, - "requires": { + "dependencies": { "debug": "^3.2.7", "resolve": "^1.20.0" - }, + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } + "ms": "^2.1.1" } }, - "eslint-import-resolver-typescript": { + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-import-resolver-typescript": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", "dev": true, - "requires": { + "dependencies": { "debug": "^4.3.4", "glob": "^7.2.0", "is-glob": "^4.0.3", "resolve": "^1.22.0", "tsconfig-paths": "^3.14.1" }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "eslint-module-utils": { + "node_modules/eslint-import-resolver-typescript/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/eslint-module-utils": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", "dev": true, - "requires": { + "dependencies": { "debug": "^3.2.7", "find-up": "^2.1.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - } + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" } }, - "eslint-plugin-deprecation": { + "node_modules/eslint-module-utils/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-deprecation": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.2.tgz", "integrity": "sha512-z93wbx9w7H/E3ogPw6AZMkkNJ6m51fTZRNZPNQqxQLmx+KKt7aLkMU9wN67s71i+VVHN4tLOZ3zT3QLbnlC0Mg==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/experimental-utils": "^5.0.0", "tslib": "^2.3.1", "tsutils": "^3.21.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0", + "typescript": "^3.7.5 || ^4.0.0" } }, - "eslint-plugin-import": { + "node_modules/eslint-plugin-import": { "version": "2.26.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dev": true, - "requires": { + "dependencies": { "array-includes": "^3.1.4", "array.prototype.flat": "^1.2.5", "debug": "^2.6.9", @@ -3144,33 +3974,43 @@ "resolve": "^1.22.0", "tsconfig-paths": "^3.14.1" }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "eslint-plugin-jsx-a11y": { + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz", "integrity": "sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.18.3", "aria-query": "^4.2.2", "array-includes": "^3.1.5", @@ -3185,45 +4025,67 @@ "minimatch": "^3.1.2", "semver": "^6.3.0" }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "eslint-plugin-prettier": { + "node_modules/eslint-plugin-prettier": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, - "requires": { + "dependencies": { "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "eslint-plugin-react": { + "node_modules/eslint-plugin-react": { "version": "7.30.1", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz", "integrity": "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==", "dev": true, - "requires": { + "dependencies": { "array-includes": "^3.1.5", "array.prototype.flatmap": "^1.3.0", "doctrine": "^2.1.0", @@ -3239,206 +4101,500 @@ "semver": "^6.3.0", "string.prototype.matchall": "^4.0.7" }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "eslint-plugin-react-hooks": { + "node_modules/eslint-plugin-react-hooks": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true - }, - "eslint-plugin-react-native": { + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-native": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-4.0.0.tgz", "integrity": "sha512-kMmdxrSY7A1WgdqaGC+rY/28rh7kBGNBRsk48ovqkQmdg5j4K+DaFmegENDzMrdLkoufKGRNkKX6bgSwQTCAxQ==", "dev": true, - "requires": { + "dependencies": { "@babel/traverse": "^7.7.4", "eslint-plugin-react-native-globals": "^0.1.1" + }, + "peerDependencies": { + "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "eslint-plugin-react-native-globals": { + "node_modules/eslint-plugin-react-native-globals": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", "dev": true }, - "eslint-plugin-taro": { + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-taro": { "version": "3.3.20", "resolved": "https://registry.npmjs.org/eslint-plugin-taro/-/eslint-plugin-taro-3.3.20.tgz", "integrity": "sha512-Pse/peAk2s+6DTrD9VnkE4IcHQZ4JWgIKI3tcYbt7pPbAtNWSQJd0+IKAwqvxmNoGepsr5o5JeYOIXVsdZzMPg==", "dev": true, - "requires": { + "dependencies": { "has": "^1.0.1" + }, + "peerDependencies": { + "babel-eslint": "*", + "eslint": "*" } }, - "eslint-scope": { + "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "requires": { + "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "eslint-utils": { + "node_modules/eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "requires": { + "dependencies": { "eslint-visitor-keys": "^2.0.0" }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" } }, - "eslint-visitor-keys": { + "node_modules/eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "espree": { + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/espree": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, - "requires": { + "dependencies": { "acorn": "^8.7.1", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, - "dependencies": { - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - } + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "esquery": { + "node_modules/esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.1.0" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" } }, - "esrecurse": { + "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.2.0" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "engines": { + "node": ">=4.0" } }, - "estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } }, - "etag": { + "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } }, - "events": { + "node_modules/events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==" + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "engines": { + "node": ">=0.4.x" + } }, - "express": { + "node_modules/express": { "version": "4.18.1", "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { + "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.0", @@ -3471,170 +4627,221 @@ "utils-merge": "1.0.1", "vary": "~1.1.2" }, - "dependencies": { - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" } }, - "extend": { + "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "extend-shallow": { + "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { + "dependencies": { "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "extract-zip": { + "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "requires": { - "@types/yauzl": "^2.9.1", + "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "extsprintf": { + "node_modules/extract-zip/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] }, - "fast-deep-equal": { + "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "fast-diff": { + "node_modules/fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "fast-glob": { + "node_modules/fast-glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "fast-json-stable-stringify": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "fast-levenshtein": { + "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "fast-printf": { + "node_modules/fast-printf": { "version": "1.6.9", "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz", "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==", - "requires": { + "dependencies": { "boolean": "^3.1.4" + }, + "engines": { + "node": ">=10.0" } }, - "fast-safe-stringify": { + "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, - "fastq": { + "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, - "requires": { + "dependencies": { "reusify": "^1.0.4" } }, - "fd-slicer": { + "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { + "dependencies": { "pend": "~1.2.0" } }, - "figures": { + "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "requires": { + "dependencies": { "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "file-entry-cache": { + "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { + "dependencies": { "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "file-uri-to-path": { + "node_modules/file-uri-to-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" + "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", + "engines": { + "node": ">= 6" + } }, - "fill-range": { + "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "finalhandler": { + "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { + "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -3643,358 +4850,475 @@ "statuses": "2.0.1", "unpipe": "~1.0.0" }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" } }, - "find-cache-dir": { + "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, - "requires": { + "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "find-up": { + "node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { + "dependencies": { "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "flat": { + "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true + "dev": true, + "bin": { + "flat": "cli.js" + } }, - "flat-cache": { + "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "requires": { + "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "flatted": { + "node_modules/flatted": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, - "for-each": { + "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { + "dependencies": { "is-callable": "^1.1.3" } }, - "foreground-child": { + "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, - "requires": { + "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" } }, - "forever-agent": { + "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } }, - "form-data": { + "node_modules/form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { + "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" } }, - "formidable": { + "node_modules/formidable": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", - "requires": { + "deprecated": "ACTION REQUIRED: SWITCH TO v3 - v1 and v2 are VULNERABLE! v1 is DEPRECATED FOR OVER 2 YEARS! Use formidable@latest or try formidable-mini for fresh projects", + "dependencies": { "dezalgo": "1.0.3", "hexoid": "1.0.0", "once": "1.4.0", "qs": "6.9.3" }, - "dependencies": { - "qs": { - "version": "6.9.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", - "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" - } + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/formidable/node_modules/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "formstream": { + "node_modules/formstream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/formstream/-/formstream-1.1.1.tgz", "integrity": "sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q==", - "requires": { + "dependencies": { "destroy": "^1.0.4", "mime": "^2.5.2", "pause-stream": "~0.0.11" + } + }, + "node_modules/formstream/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" }, - "dependencies": { - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - } + "engines": { + "node": ">=4.0.0" } }, - "forwarded": { + "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } }, - "fresh": { + "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } }, - "fromentries": { + "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "fs-extra": { + "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { + "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { + "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "ftp": { + "node_modules/ftp": { "version": "0.3.10", "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==", - "requires": { + "dependencies": { "readable-stream": "1.1.x", "xregexp": "2.0.0" }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ftp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/ftp/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "function-bind": { + "node_modules/ftp/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "function.prototype.name": { + "node_modules/function.prototype.name": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0", "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "functional-red-black-tree": { + "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, - "functions-have-names": { + "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "generate-function": { + "node_modules/generate-function": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "requires": { + "dependencies": { "is-property": "^1.0.2" } }, - "generic-pool": { + "node_modules/generic-pool": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz", - "integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==" + "integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==", + "engines": { + "node": ">= 4" + } }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "get-caller-file": { + "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "get-intrinsic": { + "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { + "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "get-package-type": { + "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8.0.0" + } }, - "get-pkg-repo": { + "node_modules/get-pkg-repo": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, - "requires": { + "dependencies": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", "through2": "^2.0.0", "yargs": "^16.2.0" }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" } }, - "get-stream": { + "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { + "dependencies": { "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "get-symbol-description": { + "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "get-uri": { + "node_modules/get-uri": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", - "requires": { + "dependencies": { "@tootallnate/once": "1", "data-uri-to-buffer": "3", "debug": "4", @@ -4002,387 +5326,529 @@ "fs-extra": "^8.1.0", "ftp": "^0.3.10" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/get-uri/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "getpass": { + "node_modules/get-uri/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/get-uri/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/get-uri/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/get-uri/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "requires": { + "dependencies": { "assert-plus": "^1.0.0" } }, - "git-raw-commits": { + "node_modules/git-raw-commits": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, - "requires": { + "dependencies": { "dargs": "^7.0.0", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "git-remote-origin-url": { + "node_modules/git-remote-origin-url": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", "dev": true, - "requires": { + "dependencies": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" } }, - "git-semver-tags": { + "node_modules/git-semver-tags": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, - "requires": { + "dependencies": { "meow": "^8.0.0", "semver": "^6.0.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "gitconfiglocal": { + "node_modules/gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", "dev": true, - "requires": { + "dependencies": { "ini": "^1.3.2" } }, - "glob": { + "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "requires": { + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "globals": { + "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "globby": { + "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "requires": { + "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "graceful-fs": { + "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, - "handlebars": { + "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, - "requires": { + "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", - "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "har-schema": { + "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } }, - "har-validator": { + "node_modules/har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { + "deprecated": "this library is no longer supported", + "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - } + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "hard-rejection": { + "node_modules/har-validator/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-bigints": { + "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-flag": { + "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "has-property-descriptors": { + "node_modules/has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { + "dependencies": { "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-tostringtag": { + "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "hasha": { + "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, - "requires": { + "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" } }, - "he": { + "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "dev": true, + "bin": { + "he": "bin/he" + } }, - "helmet": { + "node_modules/helmet": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.1.0.tgz", - "integrity": "sha512-klsunXs8rgNSZoaUrNeuCiWUxyc+wzucnEnFejUg3/A+CaF589k9qepLZZ1Jehnzig7YbD4hEuscGXuBY3fq+g==" + "integrity": "sha512-klsunXs8rgNSZoaUrNeuCiWUxyc+wzucnEnFejUg3/A+CaF589k9qepLZZ1Jehnzig7YbD4hEuscGXuBY3fq+g==", + "engines": { + "node": ">=12.0.0" + } }, - "hexoid": { + "node_modules/hexoid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "engines": { + "node": ">=8" + } }, - "hosted-git-info": { + "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "requires": { + "dependencies": { "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "html-escaper": { + "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "http-errors": { + "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { + "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" } }, - "http-proxy-agent": { + "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "requires": { + "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "http-signature": { + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "requires": { + "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "https-proxy-agent": { + "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { + "dependencies": { "agent-base": "6", "debug": "4" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "humanize-ms": { + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "requires": { + "dependencies": { "ms": "^2.0.0" } }, - "i18n": { + "node_modules/i18n": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.15.0.tgz", "integrity": "sha512-TUOkuFbl8Y/q7zF0tHdtpk1/TtxH0T+Drp2NFrHhmN1Qs0Sob9/0uVLS2BPVkEXNh2jZrimOiFJk+tkaOumzog==", - "requires": { + "dependencies": { "@messageformat/core": "^3.0.0", "debug": "^4.3.3", "fast-printf": "^1.6.9", @@ -4390,395 +5856,565 @@ "math-interval-parser": "^2.0.1", "mustache": "^4.2.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/mashpie" + } + }, + "node_modules/i18n/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "iconv-lite": { + "node_modules/i18n/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { + "dependencies": { "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "ieee754": { + "node_modules/ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, - "ignore": { + "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 4" + } }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.19" + } }, - "indent-string": { + "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "inflection": { + "node_modules/inflection": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", - "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==" + "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==", + "engines": [ + "node >= 0.4.0" + ] }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { + "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "internal-slot": { + "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { + "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "ip": { + "node_modules/ip": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" }, - "ipaddr.js": { + "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } }, - "is-arguments": { + "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-bigint": { + "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { + "dependencies": { "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-boolean-object": { + "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-callable": { + "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "requires": { + "dependencies": { "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-date-object": { + "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-expression": { + "node_modules/is-expression": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "requires": { + "dependencies": { "acorn": "^7.1.1", "object-assign": "^4.1.1" } }, - "is-extendable": { + "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } }, - "is-generator-function": { + "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-negative-zero": { + "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "is-number-object": { + "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-obj": { + "node_modules/is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } }, - "is-plain-obj": { + "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-promise": { + "node_modules/is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, - "is-property": { + "node_modules/is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" }, - "is-regex": { + "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-shared-array-buffer": { + "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-stream": { + "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-string": { + "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-symbol": { + "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-text-path": { + "node_modules/is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, - "requires": { + "dependencies": { "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-typed-array": { + "node_modules/is-typed-array": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { + "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-abstract": "^1.20.0", "for-each": "^0.3.3", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-typedarray": { + "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-unicode-supported": { + "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-weakref": { + "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { + "dependencies": { "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-windows": { + "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "isarray": { + "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isstream": { + "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, - "istanbul-lib-coverage": { + "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "istanbul-lib-hook": { + "node_modules/istanbul-lib-hook": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, - "requires": { + "dependencies": { "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "istanbul-lib-instrument": { + "node_modules/istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, - "requires": { + "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "istanbul-lib-processinfo": { + "node_modules/istanbul-lib-processinfo": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", "dev": true, - "requires": { + "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.0", "istanbul-lib-coverage": "^3.0.0-alpha.1", @@ -4787,184 +6423,244 @@ "rimraf": "^3.0.0", "uuid": "^3.3.3" }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "istanbul-lib-report": { + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, - "requires": { + "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "istanbul-lib-source-maps": { + "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "requires": { + "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "istanbul-reports": { + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/istanbul-reports": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, - "requires": { + "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "jmespath": { + "node_modules/jmespath": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "engines": { + "node": ">= 0.6.0" + } }, - "js-stringify": { + "node_modules/js-stringify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "js-yaml": { + "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "requires": { + "dependencies": { "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsbn": { + "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, - "jsesc": { + "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, - "json-parse-better-errors": { + "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "json-parse-even-better-errors": { + "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema": { + "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "json-schema-typed": { + "node_modules/json-schema-typed": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" }, - "json-stable-stringify-without-jsonify": { + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "json-stringify-safe": { + "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, - "json5": { + "node_modules/json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, - "requires": { + "dependencies": { "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "jsonfile": { + "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", + "dependencies": { "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "jsonparse": { + "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true + "dev": true, + "engines": [ + "node >= 0.2.0" + ] }, - "jsonwebtoken": { + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { + "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", @@ -4976,307 +6672,375 @@ "ms": "^2.1.1", "semver": "^5.6.0" }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "engines": { + "node": ">=4", + "npm": ">=1.4.28" } }, - "jsprim": { + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { + "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" } }, - "jstransformer": { + "node_modules/jstransformer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", - "requires": { + "dependencies": { "is-promise": "^2.0.0", "promise": "^7.0.1" } }, - "jsx-ast-utils": { + "node_modules/jsx-ast-utils": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz", "integrity": "sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==", "dev": true, - "requires": { + "dependencies": { "array-includes": "^3.1.5", "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" } }, - "jwa": { + "node_modules/jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { + "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, - "jws": { + "node_modules/jws": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { + "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, - "kind-of": { + "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "kv-logger": { + "node_modules/kv-logger": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/kv-logger/-/kv-logger-0.5.3.tgz", "integrity": "sha512-ToBlw7HfX9/2MD1ek85tMa2Q3gSU/n5TXaoPPBuyZ8JX+f2w5OGjE10H+YzolJpMXbxsa0fVtj41Vq/MJPhUlQ==" }, - "language-subtag-registry": { + "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", "dev": true }, - "language-tags": { + "node_modules/language-tags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dev": true, - "requires": { + "dependencies": { "language-subtag-registry": "~0.3.2" } }, - "levn": { + "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { + "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "lines-and-columns": { + "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "load-json-file": { + "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" } }, - "locate-path": { + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { + "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "lodash": { + "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.flattendeep": { + "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, - "lodash.includes": { + "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" }, - "lodash.isboolean": { + "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" }, - "lodash.isinteger": { + "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" }, - "lodash.ismatch": { + "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", "dev": true }, - "lodash.isnumber": { + "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" }, - "lodash.isplainobject": { + "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, - "lodash.isstring": { + "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" }, - "lodash.merge": { + "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.once": { + "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, - "log-symbols": { + "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "long": { + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, - "loose-envify": { + "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "requires": { + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lru-cache": { + "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { + "dependencies": { "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "make-dir": { + "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { + "dependencies": { "semver": "^6.0.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "make-plural": { + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-plural": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.1.0.tgz", "integrity": "sha512-PKkwVlAxYVo98NrbclaQIT4F5Oy+X58PZM5r2IwUSCe3syya6PXkIRCn2XCdz7p58Scgpp50PBeHmepXVDG3hg==" }, - "map-obj": { + "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "math-interval-parser": { + "node_modules/math-interval-parser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz", - "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==" + "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==", + "engines": { + "node": ">=0.10.0" + } }, - "media-typer": { + "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } }, - "meow": { + "node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, - "requires": { + "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", @@ -5289,226 +7053,300 @@ "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" } }, - "merge-descriptors": { + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "merge2": { + "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 8" + } }, - "methods": { + "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } }, - "micromatch": { + "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "requires": { + "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "mime": { + "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.34", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { + "dependencies": { "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mimic-fn": { + "node_modules/mimic-fn": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "engines": { + "node": ">=8" + } }, - "min-indent": { + "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "minimatch": { + "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "minimist-options": { + "node_modules/minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, - "requires": { + "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" }, - "dependencies": { - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - } + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "mkdirp": { + "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { + "dependencies": { "minimist": "^1.2.6" }, - "dependencies": { - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - } + "bin": { + "mkdirp": "bin/cmd.js" } }, - "mocha": { + "node_modules/mkdirp/node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mocha": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", "dev": true, - "requires": { + "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -5532,179 +7370,257 @@ "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true + "optional": true } } }, - "mockdate": { + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mockdate": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" }, - "modify-values": { + "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "moment": { + "node_modules/moment": { "version": "2.29.3", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", + "engines": { + "node": "*" + } }, - "moment-timezone": { + "node_modules/moment-timezone": { "version": "0.5.34", "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", - "requires": { + "dependencies": { "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" } }, - "moo": { + "node_modules/moo": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" }, - "ms": { + "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "mustache": { + "node_modules/mustache": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==" + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "bin": { + "mustache": "bin/mustache" + } }, - "mysql2": { + "node_modules/mysql2": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", - "requires": { + "dependencies": { "denque": "^2.0.1", "generate-function": "^2.3.1", "iconv-lite": "^0.6.3", @@ -5714,139 +7630,179 @@ "seq-queue": "^0.0.5", "sqlstring": "^2.3.2" }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "mz": { + "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "requires": { + "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, - "named-placeholders": { + "node_modules/named-placeholders": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", - "requires": { + "dependencies": { "lru-cache": "^4.1.3" }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/named-placeholders/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "nanoid": { + "node_modules/named-placeholders/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "node_modules/nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "negotiator": { + "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "netmask": { + "node_modules/netmask": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node_memcached": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node_memcached/-/node_memcached-1.1.3.tgz", + "integrity": "sha1-icFSr4itKIF/ANiRyZBFHV1xLqg=", + "dependencies": { + "debug": "^2.1.0" + } }, - "node-fetch": { + "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node-preload": { + "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, - "requires": { + "dependencies": { "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "node-releases": { + "node_modules/node-releases": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", "dev": true }, - "node_memcached": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/node_memcached/-/node_memcached-1.1.3.tgz", - "integrity": "sha1-icFSr4itKIF/ANiRyZBFHV1xLqg=", - "requires": { - "debug": "^2.1.0" - } - }, - "nodemailer": { + "node_modules/nodemailer": { "version": "6.7.7", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", - "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" + "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==", + "engines": { + "node": ">=6.0.0" + } }, - "normalize-package-data": { + "node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "requires": { + "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" } }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "nyc": { + "node_modules/nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, - "requires": { + "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "caching-transform": "^4.0.0", @@ -5875,288 +7831,398 @@ "test-exclude": "^6.0.0", "yargs": "^15.0.2" }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" } }, - "oauth-sign": { + "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } }, - "object-inspect": { + "node_modules/object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { + "node_modules/object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { + "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.entries": { + "node_modules/object.entries": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" } }, - "object.fromentries": { + "node_modules/object.fromentries": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.hasown": { + "node_modules/object.hasown": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", "dev": true, - "requires": { + "dependencies": { "define-properties": "^1.1.4", "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.values": { + "node_modules/object.values": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "on-finished": { + "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { + "dependencies": { "wrappy": "1" } }, - "onetime": { + "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { + "dependencies": { "mimic-fn": "^2.1.0" }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - } + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" } }, - "optionator": { + "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { + "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" } }, - "os-name": { + "node_modules/os-name": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", "integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==", - "requires": { + "dependencies": { "osx-release": "^1.0.0", "win-release": "^1.0.0" + }, + "bin": { + "os-name": "cli.js" + }, + "engines": { + "node": ">=0.10.0" } }, - "osx-release": { + "node_modules/osx-release": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", "integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==", - "requires": { + "dependencies": { "minimist": "^1.1.0" + }, + "bin": { + "osx-release": "cli.js" + }, + "engines": { + "node": ">=0.10.0" } }, - "p-limit": { + "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { + "dependencies": { "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { + "node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { + "dependencies": { "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "p-map": { + "node_modules/p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "requires": { + "dependencies": { "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "p-try": { + "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } }, - "pac-proxy-agent": { + "node_modules/pac-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", - "requires": { + "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4", @@ -6167,261 +8233,344 @@ "raw-body": "^2.2.0", "socks-proxy-agent": "5" }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/pac-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "pac-resolver": { + "node_modules/pac-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/pac-resolver": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz", "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==", - "requires": { + "dependencies": { "degenerator": "^3.0.2", "ip": "^1.1.5", "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 8" } }, - "package-hash": { + "node_modules/package-hash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parse-json": { + "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parseurl": { + "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } }, - "path-exists": { + "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "path-to-regexp": { + "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "path-type": { + "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "pause-stream": { + "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "requires": { + "dependencies": { "through": "~2.3" } }, - "pend": { + "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, - "performance-now": { + "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, - "pg-connection-string": { + "node_modules/pg-connection-string": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pify": { + "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pkg-dir": { + "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "requires": { + "dependencies": { "find-up": "^4.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" } }, - "pkg-up": { + "node_modules/pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { + "dependencies": { "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "pomelo-protobuf": { + "node_modules/pomelo-protobuf": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/pomelo-protobuf/-/pomelo-protobuf-0.4.0.tgz", "integrity": "sha1-5F6aCkRusYZn4MbhPutT1Hrdvag=" }, - "prelude-ls": { + "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } }, - "prettier": { + "node_modules/prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } }, - "prettier-linter-helpers": { + "node_modules/prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "requires": { + "dependencies": { "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "process-on-spawn": { + "node_modules/process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", "dev": true, - "requires": { + "dependencies": { "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" } }, - "promise": { + "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { + "dependencies": { "asap": "~2.0.3" } }, - "prop-types": { + "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, - "requires": { + "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, - "protobufjs": { + "node_modules/protobufjs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "requires": { + "hasInstallScript": true, + "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", @@ -6435,22 +8584,29 @@ "@types/long": "^4.0.1", "@types/node": ">=13.7.0", "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" } }, - "proxy-addr": { + "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { + "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "proxy-agent": { + "node_modules/proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", - "requires": { + "dependencies": { "agent-base": "^6.0.0", "debug": "4", "http-proxy-agent": "^4.0.0", @@ -6460,55 +8616,64 @@ "proxy-from-env": "^1.0.0", "socks-proxy-agent": "^5.0.0" }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "proxy-from-env": { + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/proxy-agent/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "pseudomap": { + "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, - "psl": { + "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, - "pug": { + "node_modules/pug": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", - "requires": { + "dependencies": { "pug-code-gen": "^3.0.2", "pug-filters": "^4.0.0", "pug-lexer": "^5.0.1", @@ -6519,21 +8684,21 @@ "pug-strip-comments": "^2.0.0" } }, - "pug-attrs": { + "node_modules/pug-attrs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "requires": { + "dependencies": { "constantinople": "^4.0.1", "js-stringify": "^1.0.2", "pug-runtime": "^3.0.0" } }, - "pug-code-gen": { + "node_modules/pug-code-gen": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", - "requires": { + "dependencies": { "constantinople": "^4.0.1", "doctypes": "^1.1.0", "js-stringify": "^1.0.2", @@ -6544,16 +8709,16 @@ "with": "^7.0.0" } }, - "pug-error": { + "node_modules/pug-error": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" }, - "pug-filters": { + "node_modules/pug-filters": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "requires": { + "dependencies": { "constantinople": "^4.0.1", "jstransformer": "1.0.0", "pug-error": "^2.0.0", @@ -6561,86 +8726,91 @@ "resolve": "^1.15.1" } }, - "pug-lexer": { + "node_modules/pug-lexer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "requires": { + "dependencies": { "character-parser": "^2.2.0", "is-expression": "^4.0.0", "pug-error": "^2.0.0" } }, - "pug-linker": { + "node_modules/pug-linker": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "requires": { + "dependencies": { "pug-error": "^2.0.0", "pug-walk": "^2.0.0" } }, - "pug-load": { + "node_modules/pug-load": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "requires": { + "dependencies": { "object-assign": "^4.1.1", "pug-walk": "^2.0.0" } }, - "pug-parser": { + "node_modules/pug-parser": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "requires": { + "dependencies": { "pug-error": "^2.0.0", "token-stream": "1.0.0" } }, - "pug-runtime": { + "node_modules/pug-runtime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" }, - "pug-strip-comments": { + "node_modules/pug-strip-comments": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "requires": { + "dependencies": { "pug-error": "^2.0.0" } }, - "pug-walk": { + "node_modules/pug-walk": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" }, - "pump": { + "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { + "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "punycode": { + "node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" }, - "q": { + "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } }, - "qiniu": { + "node_modules/qiniu": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/qiniu/-/qiniu-7.7.0.tgz", "integrity": "sha512-p8wZHDXzqCVtlPIygqIzpO6P59e5KcNAOf85oi6O7K5M4xjnwoi6L3e0F8IXgd38nb2PzWOH3XUkSbNAYW0g7Q==", - "requires": { + "dependencies": { "agentkeepalive": "^4.0.2", "before": "^0.0.1", "block-stream2": "^2.0.0", @@ -6653,224 +8823,305 @@ "tunnel-agent": "^0.6.0", "urllib": "^2.34.1" }, - "dependencies": { - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - } + "engines": { + "node": ">= 6" + } + }, + "node_modules/qiniu/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" } }, - "qs": { + "node_modules/qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { + "dependencies": { "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "querystring": { + "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } }, - "queue-microtask": { + "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "quick-lru": { + "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "rand-token": { + "node_modules/rand-token": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rand-token/-/rand-token-1.0.1.tgz", - "integrity": "sha512-Zri5SfJmEzBJ3IexFdigvPSCamslJ7UjLkUn0tlgH7COJvaUr5V7FyUYgKifEMTw7gFO8ZLcWjcU+kq8akipzg==" + "integrity": "sha512-Zri5SfJmEzBJ3IexFdigvPSCamslJ7UjLkUn0tlgH7COJvaUr5V7FyUYgKifEMTw7gFO8ZLcWjcU+kq8akipzg==", + "engines": { + "node": ">= 10" + } }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "^5.1.0" } }, - "range-parser": { + "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } }, - "raw-body": { + "node_modules/raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { + "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "react-is": { + "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, - "read-pkg": { + "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, - "requires": { + "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "engines": { + "node": ">=4" } }, - "read-pkg-up": { + "node_modules/read-pkg-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, - "requires": { + "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { + "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "readdirp": { + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "recursive-readdir": { + "node_modules/recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "requires": { + "dependencies": { "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "redent": { + "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "requires": { + "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "redis": { + "node_modules/redis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/redis/-/redis-4.2.0.tgz", "integrity": "sha512-bCR0gKVhIXFg8zCQjXEANzgI01DDixtPZgIUZHBCmwqixnu+MK3Tb2yqGjh+HCLASQVVgApiwhNkv+FoedZOGQ==", - "requires": { + "dependencies": { "@redis/bloom": "1.0.2", "@redis/client": "1.2.0", "@redis/graph": "1.0.1", @@ -6879,42 +9130,58 @@ "@redis/time-series": "1.0.3" } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, - "regexp.prototype.flags": { + "node_modules/regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regexpp": { + "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } }, - "release-zalgo": { + "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, - "requires": { + "dependencies": { "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" } }, - "request": { + "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", @@ -6936,117 +9203,181 @@ "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, - "dependencies": { - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - } + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" } }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } }, - "require-from-string": { + "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } }, - "require-main-filename": { + "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "resolve": { + "node_modules/resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "requires": { + "dependencies": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "retry-as-promised": { + "node_modules/retry-as-promised": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-5.0.0.tgz", "integrity": "sha512-6S+5LvtTl2ggBumk04hBo/4Uf6fRJUwIgunGZ7CYEBCeufGFW1Pu6ucUf/UskHeWOIsUcLOGLFXPig5tR5V1nA==" }, - "reusify": { + "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "run-parallel": { + "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "queue-microtask": "^1.2.2" } }, - "rxjs": { + "node_modules/rxjs": { "version": "7.5.6", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", "dev": true, - "requires": { + "dependencies": { "tslib": "^2.1.0" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "safe-identifier": { + "node_modules/safe-identifier": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sax": { + "node_modules/sax": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=" }, - "semver": { + "node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { + "dependencies": { "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "send": { + "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { + "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -7061,39 +9392,56 @@ "range-parser": "~1.2.1", "statuses": "2.0.1" }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" } }, - "seq-queue": { + "node_modules/seq-queue": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, - "sequelize": { + "node_modules/sequelize": { "version": "6.21.3", "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.21.3.tgz", "integrity": "sha512-cJPrTTVCofUxaaNKoIETiXCYh2xJ+OFq5jMHJQqftp34M4kNoLpTfUMPSwYtRUeTcSh1/5HodfJXIBi7troIFA==", - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "dependencies": { "@types/debug": "^4.1.7", "@types/validator": "^13.7.1", "debug": "^4.3.3", @@ -7111,90 +9459,140 @@ "validator": "^13.7.0", "wkx": "^0.5.0" }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "ibm_db": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "pg": { + "optional": true }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "pg-hstore": { + "optional": true + }, + "snowflake-sdk": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true } } }, - "sequelize-pool": { + "node_modules/sequelize-pool": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", - "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==" + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/sequelize/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sequelize/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/sequelize/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "serialize-javascript": { + "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, - "requires": { + "dependencies": { "randombytes": "^2.1.0" } }, - "serve-static": { + "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { + "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "set-blocking": { + "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "setprototypeof": { + "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "shell-quote": { + "node_modules/shell-quote": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, - "should": { + "node_modules/should": { "version": "13.2.3", "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", "dev": true, - "requires": { + "dependencies": { "should-equal": "^2.0.0", "should-format": "^3.0.3", "should-type": "^1.4.0", @@ -7202,198 +9600,234 @@ "should-util": "^1.0.0" } }, - "should-equal": { + "node_modules/should-equal": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "dev": true, - "requires": { + "dependencies": { "should-type": "^1.4.0" } }, - "should-format": { + "node_modules/should-format": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", "dev": true, - "requires": { + "dependencies": { "should-type": "^1.3.0", "should-type-adaptors": "^1.0.1" } }, - "should-type": { + "node_modules/should-type": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", "dev": true }, - "should-type-adaptors": { + "node_modules/should-type-adaptors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "dev": true, - "requires": { + "dependencies": { "should-type": "^1.3.0", "should-util": "^1.0.0" } }, - "should-util": { + "node_modules/should-util": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", "dev": true }, - "side-channel": { + "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { + "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "signal-exit": { + "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "slash": { + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } }, - "smart-buffer": { + "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } }, - "socks": { + "node_modules/socks": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", - "requires": { + "dependencies": { "ip": "^1.1.5", "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" } }, - "socks-proxy-agent": { + "node_modules/socks-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "requires": { + "dependencies": { "agent-base": "^6.0.2", "debug": "4", "socks": "^2.3.3" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "source-map": { + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } }, - "spawn-command": { + "node_modules/spawn-command": { "version": "0.0.2-1", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", "dev": true }, - "spawn-wrap": { + "node_modules/spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, - "requires": { + "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", "make-dir": "^3.0.0", "rimraf": "^3.0.0", "signal-exit": "^3.0.2", "which": "^2.0.1" + }, + "engines": { + "node": ">=8" } }, - "spdx-correct": { + "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "requires": { + "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-exceptions": { + "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "spdx-expression-parse": { + "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "requires": { + "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-license-ids": { + "node_modules/spdx-license-ids": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, - "split": { + "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, - "requires": { + "dependencies": { "through": "2" + }, + "engines": { + "node": "*" } }, - "split2": { + "node_modules/split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^3.0.0" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sqlstring": { + "node_modules/sqlstring": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", - "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==" + "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==", + "engines": { + "node": ">= 0.6" + } }, - "sshpk": { + "node_modules/sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { + "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", @@ -7403,117 +9837,176 @@ "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/standard-version": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz", + "integrity": "sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "conventional-changelog": "3.1.25", + "conventional-changelog-config-spec": "2.1.0", + "conventional-changelog-conventionalcommits": "4.6.3", + "conventional-recommended-bump": "6.1.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "dotgitignore": "^2.1.0", + "figures": "^3.1.0", + "find-up": "^5.0.0", + "git-semver-tags": "^4.0.0", + "semver": "^7.1.1", + "stringify-package": "^1.0.1", + "yargs": "^16.0.0" + }, + "bin": { + "standard-version": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard-version/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "standard-version": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz", - "integrity": "sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==", + "node_modules/standard-version/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/standard-version/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "requires": { - "chalk": "^2.4.2", - "conventional-changelog": "3.1.25", - "conventional-changelog-config-spec": "2.1.0", - "conventional-changelog-conventionalcommits": "4.6.3", - "conventional-recommended-bump": "6.1.0", - "detect-indent": "^6.0.0", - "detect-newline": "^3.1.0", - "dotgitignore": "^2.1.0", - "figures": "^3.1.0", - "find-up": "^5.0.0", - "git-semver-tags": "^4.0.0", - "semver": "^7.1.1", - "stringify-package": "^1.0.1", - "yargs": "^16.0.0" - }, "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard-version/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" } }, - "statuses": { + "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } }, - "string-width": { + "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { + "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "string.prototype.matchall": { + "node_modules/string.prototype.matchall": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1", @@ -7523,84 +10016,106 @@ "regexp.prototype.flags": "^1.4.1", "side-channel": "^1.0.4" }, - "dependencies": { - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trimend": { + "node_modules/string.prototype.trimend": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trimstart": { + "node_modules/string.prototype.trimstart": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "stringify-package": { + "node_modules/stringify-package": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", + "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json", "dev": true }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "strip-indent": { + "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, - "requires": { + "dependencies": { "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "superagent": { + "node_modules/superagent": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz", "integrity": "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==", + "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", "dev": true, - "requires": { + "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.3", "debug": "^4.3.4", @@ -7613,366 +10128,485 @@ "readable-stream": "^3.6.0", "semver": "^7.3.7" }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "supertest": { + "node_modules/superagent/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/superagent/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supertest": { "version": "6.2.4", "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz", "integrity": "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==", + "deprecated": "Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net", "dev": true, - "requires": { + "dependencies": { "methods": "^1.1.2", "superagent": "^8.0.0" + }, + "engines": { + "node": ">=6.4.0" } }, - "supervisor": { + "node_modules/supervisor": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/supervisor/-/supervisor-0.12.0.tgz", "integrity": "sha1-3n5jNwFbKRhRwQ81OMSn8EkX7ME=", - "dev": true + "dev": true, + "bin": { + "node-supervisor": "lib/cli-wrapper.js", + "supervisor": "lib/cli-wrapper.js" + }, + "engines": { + "node": ">=0.6.0" + } }, - "supports-color": { + "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "test-exclude": { + "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "requires": { + "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "text-extensions": { + "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "thenify": { + "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "requires": { + "dependencies": { "any-promise": "^1.0.0" } }, - "thenify-all": { + "node_modules/thenify-all": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "requires": { + "dependencies": { "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" } }, - "through": { + "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, - "through2": { + "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "3" } }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "toidentifier": { + "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } }, - "token-stream": { + "node_modules/token-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" }, - "toposort-class": { + "node_modules/toposort-class": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" }, - "tough-cookie": { + "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { + "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, - "tree-kill": { + "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true + "dev": true, + "bin": { + "tree-kill": "cli.js" + } }, - "trim-newlines": { + "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "tsconfig-paths": { + "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, - "requires": { + "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", "minimist": "^1.2.6", "strip-bom": "^3.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - } } }, - "tslib": { + "node_modules/tsconfig-paths/node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "tsutils": { + "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "requires": { + "dependencies": { "tslib": "^1.8.1" }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "tunnel-agent": { + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { + "dependencies": { "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "tweetnacl": { + "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, - "type-check": { + "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { + "dependencies": { "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "type-fest": { + "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "type-is": { + "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { + "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, - "typedarray": { + "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "typedarray-to-buffer": { + "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "requires": { + "dependencies": { "is-typedarray": "^1.0.0" } }, - "typescript": { + "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "uglify-js": { + "node_modules/uglify-js": { "version": "3.15.5", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.5.tgz", "integrity": "sha512-hNM5q5GbBRB5xB+PMqVRcgYe4c8jbyZ1pzZhS6jbq54/4F2gFK869ZheiE5A8/t+W5jtTNpWef/5Q9zk639FNQ==", "dev": true, - "optional": true + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } }, - "unbox-primitive": { + "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, - "dependencies": { - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - } + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive/node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "unescape": { + "node_modules/unescape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", - "requires": { + "dependencies": { "extend-shallow": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "universalify": { + "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } }, - "unpipe": { + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - }, "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" } }, - "url": { + "node_modules/url": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "requires": { + "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" } }, - "urllib": { + "node_modules/urllib": { "version": "2.38.0", "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.38.0.tgz", "integrity": "sha512-8nim/hlS5GXtWe2BJ6usPimKx5VE3nenXgcG26ip5Ru+MKPddINH8uLpZ948n6ADhlus6A0AYj8xTYNmGQi8yA==", - "requires": { + "dependencies": { "any-promise": "^1.3.0", "content-type": "^1.0.2", "debug": "^2.6.9", @@ -7988,13 +10622,16 @@ "qs": "^6.4.0", "statuses": "^1.3.1", "utility": "^1.16.1" + }, + "engines": { + "node": ">= 0.10.0" } }, - "util": { + "node_modules/util": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { + "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", @@ -8003,262 +10640,338 @@ "which-typed-array": "^1.1.2" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "utility": { + "node_modules/utility": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/utility/-/utility-1.17.0.tgz", "integrity": "sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw==", - "requires": { + "dependencies": { "copy-to": "^2.0.1", "escape-html": "^1.0.3", "mkdirp": "^0.5.1", "mz": "^2.7.0", "unescape": "^1.0.1" + }, + "engines": { + "node": ">= 0.12.0" } }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } }, - "uuid": { + "node_modules/uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } }, - "v8-compile-cache": { + "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "validate-npm-package-license": { + "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "requires": { + "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "validator": { + "node_modules/validator": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "engines": { + "node": ">= 0.10" + } }, - "vary": { + "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } }, - "verror": { + "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "requires": { + "engines": [ + "node >=0.6.0" + ], + "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, - "vm2": { + "node_modules/vm2": { "version": "3.9.9", "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz", "integrity": "sha512-xwTm7NLh/uOjARRBs8/95H0e8fT3Ukw5D/JJWhxMbhKzNh1Nu981jQKvkep9iKYNxzlVrdzD0mlBGkDKZWprlw==", - "requires": { + "deprecated": "The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm.", + "dependencies": { "acorn": "^8.7.0", "acorn-walk": "^8.2.0" }, - "dependencies": { - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" - } + "bin": { + "vm2": "bin/vm2" + }, + "engines": { + "node": ">=6.0" } }, - "void-elements": { + "node_modules/vm2/node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=" + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=", + "engines": { + "node": ">=0.10.0" + } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { + "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-module": { + "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "which-typed-array": { + "node_modules/which-typed-array": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "requires": { + "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-abstract": "^1.20.0", "for-each": "^0.3.3", "has-tostringtag": "^1.0.0", "is-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "win-release": { + "node_modules/win-release": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", - "requires": { + "dependencies": { "semver": "^5.0.1" }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "engines": { + "node": ">=0.10.0" } }, - "with": { + "node_modules/win-release/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/with": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "requires": { + "dependencies": { "@babel/parser": "^7.9.6", "@babel/types": "^7.9.6", "assert-never": "^1.2.1", "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" } }, - "wkx": { + "node_modules/wkx": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", - "requires": { + "dependencies": { "@types/node": "*" } }, - "word-wrap": { + "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } }, - "wordwrap": { + "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, - "workerpool": { + "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "xml2js": { + "node_modules/xml2js": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", - "requires": { + "dependencies": { "sax": "0.6.x", "xmlbuilder": ">=1.0.0" } }, - "xmlbuilder": { + "node_modules/xmlbuilder": { "version": "13.0.2", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", - "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" + "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==", + "engines": { + "node": ">=6.0" + } }, - "xregexp": { + "node_modules/xregexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "engines": { + "node": "*" + } }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } }, - "yallist": { + "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "yargs": { + "node_modules/yargs": { "version": "17.5.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "requires": { + "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -8266,47 +10979,62 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "21.0.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "engines": { + "node": ">=12" + } }, - "yargs-unparser": { + "node_modules/yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" } }, - "yauzl": { + "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { + "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "yazl": { + "node_modules/yazl": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "requires": { + "dependencies": { "buffer-crc32": "~0.2.3" } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index eb65046c..001c9fee 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "body-parser": "1.20.0", "cookie-parser": "1.4.6", "cos-nodejs-sdk-v5": "2.11.12", + "dotenv": "^17.2.3", "express": "4.18.1", "extract-zip": "2.0.1", "formidable": "2.0.1", diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0a88c596e144df219617a56953da5136f59dc807 GIT binary patch literal 1150 zcmeIwze_?<6u|Kl2#;tH2g9Z(578IW4{WIaBL9o_7HbjA8k&-#rM1O=KwAw_O-*Kv z8I^^hV1-6d1j6fk@&*nM8d`mi&%N)Qd(M52#}ygi4hDtMmbrjPSVR&aMW&l)5@9Vg z)b$hh2j4%i(;5>DB8_Pi`_}p;O?`y<5`{ndm)Rq2_DM0XVPhm_t!_7x2TMoJ7I7Z4 zSiu4cSVtBwILACT@r6pnvCimkW{S}V;y2tw*Y5CvHlFYd&FOj-P0ZvDo!I{Scr{bB zABjKFf%a=%9mml3R-pa2xWF~s6E8JPf0_O(;u`jFgA!h$-(AKiCXKj>ty6C*K)<`V k8`YzngdS_H)tU*zW$s`9_ye9N(yPOXQnt^Yy>-9O-@j^d?EnA( literal 0 HcmV?d00001 diff --git a/src/core/config.ts b/src/core/config.ts index dacae058..8cacac0e 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -29,8 +29,8 @@ export const config = { }, // Config for database, only support mysql. db: { - username: process.env.RDS_USERNAME || 'root', - password: process.env.RDS_PASSWORD || 'password', + username: process.env.RDS_USERNAME || 'codepush', + password: process.env.RDS_PASSWORD || 'codepush', database: process.env.RDS_DATABASE || 'codepush', host: process.env.RDS_HOST || '127.0.0.1', port: toNumber(process.env.RDS_PORT, 3306), @@ -82,7 +82,7 @@ export const config = { downloadUrl: process.env.LOCAL_DOWNLOAD_URL || process.env.DOWNLOAD_URL || - 'http://127.0.0.1:3000/download', + 'http://172.30.1.85:3000/download', // public static download spacename. public: '/download', }, diff --git a/src/db.ts b/src/db.ts index 6c7aac9a..33aee675 100755 --- a/src/db.ts +++ b/src/db.ts @@ -13,13 +13,13 @@ import { CURRENT_DB_VERSION } from './core/const'; const argv = yargs .usage('Usage: $0 [options]') - .command('init', '初始化数据库', { + .command('init', '데이터베이스 초기화', { dbpassword: { alias: 'dbpassword', type: 'string', }, }) - .command('upgrade', '升级数据库', { + .command('upgrade', '데이터베이스 업그레이드', { dbpassword: { alias: 'dbpassword', type: 'string', @@ -27,17 +27,17 @@ const argv = yargs }) .example( '$0 init --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306 --force', - '初始化code-push-server数据库', + 'code-push-server 데이터베이스 초기화', ) .example( '$0 upgrade --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306', - '升级code-push-server数据库', + 'code-push-server 데이터베이스 업그레이드', ) .default({ dbname: 'codepush', dbhost: 'localhost', - dbuser: 'root', - dbpassword: null, + dbuser: 'codepush', + dbpassword: 'codepush', }) .help('h') .alias('h', 'help') @@ -46,7 +46,7 @@ const argv = yargs const command = argv._[0]; const dbname = argv.dbname ? argv.dbname : 'codepush'; const dbhost = argv.dbhost ? argv.dbhost : 'localhost'; -const dbuser = argv.dbuser ? argv.dbuser : 'root'; +const dbuser = argv.dbuser ? argv.dbuser : 'codepush'; const dbport = argv.dbport ? argv.dbport : 3306; const { dbpassword } = argv; @@ -112,7 +112,7 @@ if (command === 'init') { .promise(); connection.connect(); } catch (e) { - console.error('connect mysql error, check params', e); + console.error('MySQL 연결 오류, 입력한 설정을 확인하세요.', e); process.exit(1); } @@ -122,7 +122,7 @@ if (command === 'init') { .then((rs) => { versionNo = _.get(rs, '0.version', '0.0.1'); if (versionNo === CURRENT_DB_VERSION) { - console.log('Everything up-to-date.'); + console.log('모든 항목이 최신 버전입니다.'); process.exit(0); } const allSqlFile = [ @@ -152,14 +152,14 @@ if (command === 'init') { return prev; } const sql = fs.readFileSync(sqlFile.path, 'utf-8'); - console.log(`exec sql file:${sqlFile.path}`); + console.log(`SQL 파일 실행 중: ${sqlFile.path}`); return connection.query(sql).then(() => { - console.log(`success exec sql file:${sqlFile.path}`); + console.log(`SQL 파일 실행 성공: ${sqlFile.path}`); }); }, Promise.resolve()); }) .then(() => { - console.log('Upgrade success.'); + console.log('업그레이드 성공.'); }) .catch((e) => { console.error(e); diff --git a/src/routes/index.ts b/src/routes/index.ts index 03315b48..06327715 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -10,6 +10,13 @@ indexRouter.get('/', (req, res) => { res.render('index', { title: 'CodePushServer' }); }); +indexRouter.get('/healthcheck', (req, res) => { + res.status(200).json({ + success: true, + timestamp: new Date().toISOString(), + }); +}); + indexRouter.get('/tokens', (req, res) => { // eslint-disable-next-line no-underscore-dangle res.render('tokens', { title: `${i18n.__('Obtain')} token` }); diff --git a/src/www.ts b/src/www.ts index fb829392..9f37e305 100755 --- a/src/www.ts +++ b/src/www.ts @@ -1,5 +1,5 @@ #!/usr/bin/env node - +import 'dotenv/config'; import http from 'http'; import { logger } from 'kv-logger'; import _ from 'lodash'; From e9bead82e7c2790c6f001a8dfbce28e7335fb4d4 Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Sun, 16 Nov 2025 16:06:29 +0900 Subject: [PATCH 334/347] chore: add AWS_S3_KEY_PREFIX environment variable support. --- .env.example | 22 ++++++++++++++-------- .gitignore | 4 +++- Procfile | 1 + README.ko.md | 1 + data/.gitignore | 2 ++ src/core/config.ts | 1 + src/core/utils/storage.ts | 16 ++++++++++++++-- storage/.gitignore | 3 +++ storage/README.md | 7 +++++++ 9 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 Procfile create mode 100644 data/.gitignore create mode 100644 storage/.gitignore create mode 100644 storage/README.md diff --git a/.env.example b/.env.example index 7b4121a0..39d602f4 100644 --- a/.env.example +++ b/.env.example @@ -5,13 +5,13 @@ # ------------------------------- # General / Logs # ------------------------------- -# 클론시 유일한 환경변수 값 +# 클론시 유일한 환경변수 값 (*) COMPOSE_PROJECT_NAME=code-push-server LOG_LEVEL=debug LOG_FORMAT=text # ------------------------------- -# Database (MySQL) +# Database (MySQL) (*) # - 유저/앱/패키지 메타데이터 저장 # ------------------------------- RDS_USERNAME=codepush @@ -21,12 +21,12 @@ RDS_HOST=127.0.0.1 RDS_PORT=3306 # ------------------------------- -# Storage Settings +# Storage Settings (*) # storageType: local | s3 | qiniu | oss | tencentcloud # ------------------------------- STORAGE_TYPE=local -# Local storage (default) +# Local storage (default) (*) # 저장 파일이 위치할 경로 (미설정 시 OS tmpdir 사용) STORAGE_DIR=./storage @@ -38,22 +38,25 @@ LOCAL_DOWNLOAD_URL=http://127.0.0.1:3000/download DOWNLOAD_URL=http://127.0.0.1:3000/download # ------------------------------- -# JWT Token +# JWT Token (*) # ------------------------------- TOKEN_SECRET=REPLACE_WITH_RANDOM_LONG_SECRET # ------------------------------- -# Common Behavior +# Common Behavior # ------------------------------- +# 프로덕션 배포 및 계정생성 후 false 로 수정 ALLOW_REGISTRATION=true TRY_LOGIN_TIMES=4 DIFF_NUMS=3 -DATA_DIR=./data +# DATA_DIR=./data +# 클라우드 배포시 보통 data 디렉토리에 쓰기 권한이 없음 +DATA_DIR= UPDATE_CHECK_CACHE=false ROLLOUT_CLIENT_UNIQUE_ID_CACHE=false # ------------------------------- -# Redis (optional: only needed for login attempt limit or caching) +# Redis (optional: only needed for login attempt limit or caching) (*) # ------------------------------- REDIS_HOST=127.0.0.1 REDIS_PORT=6379 @@ -77,12 +80,15 @@ QINIU_SECRET_KEY= QINIU_BUCKET_NAME= QINIU_DOWNLOAD_URL= +# AWS IAM - admin_codepush with the customS3BucketAccessForCodePush policy (*) AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_SESSION_TOKEN= AWS_BUCKET_NAME= AWS_REGION= AWS_DOWNLOAD_URL= +# 버킷내 경로 프리픽스 (optional) +AWS_S3_KEY_PREFIX=codepush/ OSS_ACCESS_KEY_ID= OSS_SECRET_ACCESS_KEY= diff --git a/.gitignore b/.gitignore index 666d2f1e..6a095ea3 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,6 @@ node_modules/ .idea # environment variables -.env \ No newline at end of file +!.env.example +.env +.env.* diff --git a/Procfile b/Procfile new file mode 100644 index 00000000..063b78f4 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: npm start diff --git a/README.ko.md b/README.ko.md index 59ebe933..11523d2b 100644 --- a/README.ko.md +++ b/README.ko.md @@ -11,6 +11,7 @@ Microsoft 공식 CodePush 서비스는 아시아 지역에서 속도가 느린 - Node.js v24.6.0 - npm install -g install @shm-open/code-push-cli +- data, storage 이름으로 디렉토리 생성후 서버 구동 ## 이 포크(Fork)에 대하여 diff --git a/data/.gitignore b/data/.gitignore new file mode 100644 index 00000000..c96a04f0 --- /dev/null +++ b/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/src/core/config.ts b/src/core/config.ts index 8cacac0e..29620c97 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -53,6 +53,7 @@ export const config = { region: process.env.AWS_REGION, // binary files download host address. downloadUrl: process.env.AWS_DOWNLOAD_URL || process.env.DOWNLOAD_URL, + prefix: process.env.AWS_S3_KEY_PREFIX, // (optional) }, // Config for Aliyun OSS (https://www.aliyun.com/product/oss) when storageType value is "oss". oss: { diff --git a/src/core/utils/storage.ts b/src/core/utils/storage.ts index 9f2c1af6..b23ddddb 100644 --- a/src/core/utils/storage.ts +++ b/src/core/utils/storage.ts @@ -78,6 +78,18 @@ function uploadFileToLocal(key: string, filePath: string, logger: Logger): Promi function uploadFileToS3(key: string, filePath: string, logger: Logger): Promise { return new Promise((resolve, reject) => { logger.info('try uploadFileToS3', { key }); + + // config.s3.prefix에서 prefix 읽기 + let prefix = _.get(config, 's3.prefix', '') as string | undefined; + prefix = (prefix || '').trim(); + + if (prefix.length > 0 && !prefix.endsWith('/')) { + prefix += '/'; + } + + const finalKey = prefix ? `${prefix}${key}` : key; + logger.info('uploadFileToS3 resolved finalKey', { key: finalKey }); + AWS.config.update({ accessKeyId: _.get(config, 's3.accessKeyId'), secretAccessKey: _.get(config, 's3.secretAccessKey'), @@ -92,7 +104,7 @@ function uploadFileToS3(key: string, filePath: string, logger: Logger): Promise< } s3.upload( { - Key: key, + Key: finalKey, // prefix 적용된 key Body: data, ACL: 'public-read', Bucket: _.get(config, 's3.bucketName'), @@ -101,7 +113,7 @@ function uploadFileToS3(key: string, filePath: string, logger: Logger): Promise< if (error) { reject(new AppError(error)); } else { - logger.info('uploadFileToS3 success', { key }); + logger.info('uploadFileToS3 success', { key: finalKey }); resolve(); } }, diff --git a/storage/.gitignore b/storage/.gitignore new file mode 100644 index 00000000..02c52c7b --- /dev/null +++ b/storage/.gitignore @@ -0,0 +1,3 @@ +* +!README.md +!.gitignore \ No newline at end of file diff --git a/storage/README.md b/storage/README.md new file mode 100644 index 00000000..a47c0e94 --- /dev/null +++ b/storage/README.md @@ -0,0 +1,7 @@ +## 다운로드 에셋 저장용 디렉토리 + +- storageType = 'local' 한정 사용 +- 런타임 오류 해결용 + ``` + [dev:run] level=error, time=2025-11-16 14:34:04.503, msg=Please create dir ./storage, name=Error, stack=Error: Please create dir ./storage + ``` From c618ac1be1ad8a730a0fd4e4ad89696f5187212a Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Sun, 16 Nov 2025 17:02:56 +0900 Subject: [PATCH 335/347] chore: pin Node.js and npm versions in package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 001c9fee..1f5e6327 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "code-push-server-db": "./bin/db.js" }, "engines": { - "node": ">= 6.0", - "npm": ">= 3.10.8" + "node": "24.6.0", + "npm": "11.5.1" }, "scripts": { "dev": "npm run build && concurrently npm:dev:tsc npm:dev:run", From bc6187e0d241dcc3fd7d866da4a02a77d0572b5c Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Sun, 16 Nov 2025 17:48:24 +0900 Subject: [PATCH 336/347] fix: add TLS Redis support by using REDIS_TLS_URL/REDIS_URL and fallback to legacy config --- src/core/config.ts | 1 + src/core/utils/connections.ts | 54 ++++++++++++++++++++++++++--------- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/core/config.ts b/src/core/config.ts index 29620c97..05087e61 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -133,6 +133,7 @@ export const config = { port: toNumber(process.env.REDIS_PORT, 6379), password: process.env.REDIS_PASSWORD, db: toNumber(process.env.REDIS_DB, 0), + tlsUrl: process.env.REDIS_TLS_URL || process.env.REDIS_URL, }, } as const; diff --git a/src/core/utils/connections.ts b/src/core/utils/connections.ts index 804f1f73..cde84097 100644 --- a/src/core/utils/connections.ts +++ b/src/core/utils/connections.ts @@ -1,3 +1,4 @@ +import { logger } from 'kv-logger'; import { createClient } from 'redis'; import { Sequelize } from 'sequelize'; import { config } from '../config'; @@ -9,19 +10,44 @@ export const sequelize = new Sequelize( config.db, ); -export const redisClient = createClient({ - socket: { - host: config.redis.host, - port: config.redis.port, - reconnectStrategy: (retries) => { - if (retries > 10) { - return new Error('Retry count exhausted'); - } +const redisTlsUrl = config.redis.tlsUrl; // REDIS_URL 환경변수 우선 사용 (TLS 포함) +const isTlsSupported = redisTlsUrl?.startsWith?.('rediss://'); - return retries * 100; - }, - }, - password: config.redis.password, - database: config.redis.db, +export const redisClient = redisTlsUrl + ? createClient({ + url: redisTlsUrl, + socket: { + tls: isTlsSupported, + reconnectStrategy: (retries: number) => { + if (retries > 10) { + return new Error('Retry count exhausted'); + } + return retries * 100; + }, + }, + }) + : createClient({ + socket: { + host: config.redis.host, + port: config.redis.port, + reconnectStrategy: (retries: number) => { + if (retries > 10) { + return new Error('Retry count exhausted'); + } + + return retries * 100; + }, + }, + password: config.redis.password, + database: config.redis.db, + }); + +// 에러 로깅 (Unhandled 'error' 로 인한 앱크래시 방지) +redisClient.on('error', (err) => { + logger.error('Redis Client Error', err?.message || JSON.stringify(err)); +}); + +// connect 시도 (커넥션 실패시 앱크래시 방지) +redisClient.connect().catch((err) => { + logger.error('Redis connect error', err); }); -redisClient.connect(); From e15e85c245661716ec38939b4941ba7e665bfb77 Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Sun, 16 Nov 2025 18:05:11 +0900 Subject: [PATCH 337/347] fix: add MySQL TLS support using dialectOptions.ssl and DB_SSL_REQUIRED env --- src/core/config.ts | 9 +++++++++ src/core/utils/connections.ts | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/core/config.ts b/src/core/config.ts index 05087e61..186898ca 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -36,6 +36,15 @@ export const config = { port: toNumber(process.env.RDS_PORT, 3306), dialect: 'mysql', logging: false, + dialectOptions: toBool(process.env.DB_SSL_REQUIRED) + ? { + ssl: { + require: false, + // 관리형 MySQL에서 self-signed 또는 CA 정보 안 주는 경우가 많아서, 일단 빠르게 붙는 용도로 false. 추후 CA 넣어서 true로 바꾸는 게 베스트. + rejectUnauthorized: toBool(process.env.DB_SSL_REJECT_UNAUTHORIZED) ?? false, + }, + } + : {}, }, // Config for qiniu (http://www.qiniu.com/) cloud storage when storageType value is "qiniu". qiniu: { diff --git a/src/core/utils/connections.ts b/src/core/utils/connections.ts index cde84097..ee706f50 100644 --- a/src/core/utils/connections.ts +++ b/src/core/utils/connections.ts @@ -44,10 +44,10 @@ export const redisClient = redisTlsUrl // 에러 로깅 (Unhandled 'error' 로 인한 앱크래시 방지) redisClient.on('error', (err) => { - logger.error('Redis Client Error', err?.message || JSON.stringify(err)); + logger.error('Redis Client Error', { message: err?.message, stack: err?.stack }); }); // connect 시도 (커넥션 실패시 앱크래시 방지) redisClient.connect().catch((err) => { - logger.error('Redis connect error', err); + logger.error('Redis connect error', { message: err?.message, stack: err?.stack }); }); From 9a9dcbc5243d6b0ccc6e68b8dd0a989137312dfa Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Sun, 16 Nov 2025 18:14:04 +0900 Subject: [PATCH 338/347] fix: add rejectUnauthorized:false to Redis TLS socket to handle self-signed certificate chain --- src/core/utils/connections.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/utils/connections.ts b/src/core/utils/connections.ts index ee706f50..949cba8d 100644 --- a/src/core/utils/connections.ts +++ b/src/core/utils/connections.ts @@ -10,14 +10,15 @@ export const sequelize = new Sequelize( config.db, ); -const redisTlsUrl = config.redis.tlsUrl; // REDIS_URL 환경변수 우선 사용 (TLS 포함) -const isTlsSupported = redisTlsUrl?.startsWith?.('rediss://'); +const redisTlsUrl = config.redis.tlsUrl; // REDIS_TLS_URL 또는 REDIS_URL +const isTlsSupported = !!redisTlsUrl && redisTlsUrl.startsWith('rediss://'); export const redisClient = redisTlsUrl ? createClient({ url: redisTlsUrl, socket: { tls: isTlsSupported, + rejectUnauthorized: false, // `Redis Client Error: self-signed certificate in certificate chain` 오류 우회; 헤로쿠 공식문서도 이 옵션 사용으로 명시되어 있음 reconnectStrategy: (retries: number) => { if (retries > 10) { return new Error('Retry count exhausted'); From 80f086d84896ee688bd4d32842866c50be74d331 Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Sun, 16 Nov 2025 19:23:41 +0900 Subject: [PATCH 339/347] chore: suppress ignorable Cloud Redis idle disconnect errors and avoid stack logging --- src/core/utils/connections.ts | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/core/utils/connections.ts b/src/core/utils/connections.ts index 949cba8d..5ace8000 100644 --- a/src/core/utils/connections.ts +++ b/src/core/utils/connections.ts @@ -45,9 +45,26 @@ export const redisClient = redisTlsUrl // 에러 로깅 (Unhandled 'error' 로 인한 앱크래시 방지) redisClient.on('error', (err) => { - logger.error('Redis Client Error', { message: err?.message, stack: err?.stack }); -}); + const msg = err?.message || ''; + + // 무시할 에러 메시지 패턴들 + const ignorablePatterns = [ + 'Socket closed unexpectedly', + // 'Connection is closed', + ]; + // 무시 패턴과 매칭되면 스택 제외하고 info 레벨 로깅 + if (ignorablePatterns.some((p) => msg.includes(p))) { + logger.info(`Redis ignorable error: ${msg}`); + return; + } + + // 그 외 에러+스택 로깅 + logger.error('Redis Client Error', { + message: msg, + stack: err?.stack, + }); +}); // connect 시도 (커넥션 실패시 앱크래시 방지) redisClient.connect().catch((err) => { logger.error('Redis connect error', { message: err?.message, stack: err?.stack }); From ca29c2a32d76e0f19e0a381b818eb47149e9d238 Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Sun, 16 Nov 2025 20:36:41 +0900 Subject: [PATCH 340/347] chore: add localses/ko.json --- locales/ko.json | 17 +++++++++++++++++ src/core/services/client-manager.ts | 1 + 2 files changed, 18 insertions(+) create mode 100644 locales/ko.json diff --git a/locales/ko.json b/locales/ko.json new file mode 100644 index 00000000..9991ccad --- /dev/null +++ b/locales/ko.json @@ -0,0 +1,17 @@ +{ + "Please sign in": "로그인을 해주세요", + "email address": "이메일 주소", + "username": "사용자명", + "password": "비밀번호", + "Remember me": "로그인 상태 유지", + "Log in": "로그인", + "hot update server": "OTA 업데이트 서버", + "Change Password": "비밀번호 변경", + "Obtain": "발급", + "old password": "현재 비밀번호", + "new password": "새 비밀번호", + "please login again": "다시 로그인해주세요", + "change success": "변경되었습니다", + "Logout": "로그아웃", + "Register": "회원가입" +} diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index 7f8923a1..1889b877 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -194,6 +194,7 @@ class ClientManager { throw new AppError('Not found deployment, check deployment key is right.'); } const version = parseVersion(appVersion); + logger.info('updateCheck.parsedVersion', { version }); return DeploymentsVersions.findAll({ where: { deployment_id: dep.id, From b8b5ed32bf621a6eb4718092e840b0c8d3ce4e2d Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Sun, 16 Nov 2025 20:54:01 +0900 Subject: [PATCH 341/347] fix: clean prerelease suffixes before semver padding in parseVersion to match deployments (e.g. 2.10.2-dev-01 -> 2.10.2) --- README.ko.md | 2 ++ src/core/services/client-manager.ts | 3 ++- src/core/utils/common.ts | 17 +++++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/README.ko.md b/README.ko.md index 11523d2b..c38bd932 100644 --- a/README.ko.md +++ b/README.ko.md @@ -12,6 +12,8 @@ Microsoft 공식 CodePush 서비스는 아시아 지역에서 속도가 느린 - Node.js v24.6.0 - npm install -g install @shm-open/code-push-cli - data, storage 이름으로 디렉토리 생성후 서버 구동 +- 앱테스터 semver 포맷 지원을 위해 parseVersion 유틸함수 일부 수정 → cleanVersion 선행 + > e.g., '2.10.2-stg-01' → '2.10.2' ## 이 포크(Fork)에 대하여 diff --git a/src/core/services/client-manager.ts b/src/core/services/client-manager.ts index 1889b877..38cd62ee 100644 --- a/src/core/services/client-manager.ts +++ b/src/core/services/client-manager.ts @@ -193,8 +193,9 @@ class ClientManager { if (_.isEmpty(dep)) { throw new AppError('Not found deployment, check deployment key is right.'); } + logger.info('updateCheck.beforeParseVersion', { version: appVersion }); const version = parseVersion(appVersion); - logger.info('updateCheck.parsedVersion', { version }); + logger.info('updateCheck.afterParseVersion', { version }); return DeploymentsVersions.findAll({ where: { deployment_id: dep.id, diff --git a/src/core/utils/common.ts b/src/core/utils/common.ts index a24b4f27..64241911 100644 --- a/src/core/utils/common.ts +++ b/src/core/utils/common.ts @@ -13,13 +13,26 @@ import { config } from '../config'; const streamPipeline = util.promisify(pipeline); +function cleanVersion(versionNo?: string) { + if (typeof versionNo !== 'string') { + return versionNo as any; + } + // 2.10.2-dev-01 -> 2.10.2 + return versionNo.replace(/-.*$/, ''); +} + +/** + * SEMVER 스트링을 마이너와 패치 부분 자리수가 늘어난 스트링으로 변환 + * - 다수의 패치 횟수 보장을 위한 작업 + */ export function parseVersion(versionNo: string) { let version = '0'; let data = null; - if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { + const normalized = cleanVersion(versionNo); + if ((data = normalized.match(/^([0-9]{1,3}).([0-9]{1,5}).([0-9]{1,10})$/))) { // "1.2.3" version = data[1] + _.padStart(data[2], 5, '0') + _.padStart(data[3], 10, '0'); - } else if ((data = versionNo.match(/^([0-9]{1,3}).([0-9]{1,5})$/))) { + } else if ((data = normalized.match(/^([0-9]{1,3}).([0-9]{1,5})$/))) { // "1.2" version = data[1] + _.padStart(data[2], 5, '0') + _.padStart('0', 10, '0'); } From a5146ec46e9b5e37016c522d67a7af7431ea9565 Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Sun, 16 Nov 2025 21:26:15 +0900 Subject: [PATCH 342/347] chore: add i18n translations for login handler error messages --- .env.example | 2 ++ locales/en.json | 46 ++++++++++++++++++---------- locales/ko.json | 16 +++++++++- locales/zh.json | 17 +++++++++- src/core/services/account-manager.ts | 12 +++++--- 5 files changed, 70 insertions(+), 23 deletions(-) diff --git a/.env.example b/.env.example index 39d602f4..1228ce25 100644 --- a/.env.example +++ b/.env.example @@ -52,7 +52,9 @@ DIFF_NUMS=3 # DATA_DIR=./data # 클라우드 배포시 보통 data 디렉토리에 쓰기 권한이 없음 DATA_DIR= +# update_check 결과를 Redis에 캐시(프로덕션 true 사용) (*) UPDATE_CHECK_CACHE=false +# rollout 대상 여부를 clientUniqueId별로 캐시(프로덕션 true 사용) (*) ROLLOUT_CLIENT_UNIQUE_ID_CACHE=false # ------------------------------- diff --git a/locales/en.json b/locales/en.json index ec5106bf..f8f46368 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1,17 +1,31 @@ { - "Please sign in": "Please sign in", - "email address": "email address", - "username": "username", - "password": "password", - "Remember me": "Remember me", - "Log in": "Log in", - "hot update server": "hot update server", - "Change Password": "Change Password", - "Obtain": "Obtain", - "old password": "old password", - "new password": "new password", - "please login again": "please login again", - "change success": "change success", - "Logout": "Logout", - "Register": "Register" -} \ No newline at end of file + "Please sign in": "Please sign in", + "email address": "email address", + "username": "username", + "password": "password", + "Remember me": "Remember me", + "Log in": "Log in", + "hot update server": "hot update server", + "Change Password": "Change Password", + "Obtain": "Obtain", + "old password": "old password", + "new password": "new password", + "please login again": "please login again", + "change success": "change success", + "Logout": "Logout", + "Register": "Register", + "error.input_email_required": "Please enter your email address.", + "error.input_password_required": "Please enter your password.", + "error.invalid_credentials": "The email or password you entered is incorrect.", + "error.password_retry_limit_exceeded": "Your account has been locked due to too many failed login attempts.", + "error.email_already_registered": "This email is already registered. Please use a different email address.", + "error.verify_code_expired": "The verification code has expired. Please request a new one.", + "error.verify_code_invalid": "The verification code is incorrect. Please try again.", + "error.new_password_length": "Please enter a new password between 6 and 20 characters.", + "error.password_length_register": "Please enter a password between 6 and 20 characters.", + "error.user_not_found": "User information could not be found.", + "error.old_password_incorrect": "The current password you entered is incorrect.", + "error.app_not_exists": "The app information could not be found.", + "error.permission_denied_not_owner": "Permission denied. You are not the owner.", + "error.email_not_exists": "The specified email address does not exist." +} diff --git a/locales/ko.json b/locales/ko.json index 9991ccad..60ab89c0 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -13,5 +13,19 @@ "please login again": "다시 로그인해주세요", "change success": "변경되었습니다", "Logout": "로그아웃", - "Register": "회원가입" + "Register": "회원가입", + "error.input_email_required": "이메일 주소를 입력해주세요.", + "error.input_password_required": "비밀번호를 입력해주세요.", + "error.invalid_credentials": "이메일 또는 비밀번호가 올바르지 않습니다.", + "error.password_retry_limit_exceeded": "비밀번호 오류 횟수가 제한을 초과하여 계정이 잠겼습니다.", + "error.email_already_registered": "이미 등록된 이메일입니다. 다른 이메일을 사용해주세요.", + "error.verify_code_expired": "인증 코드가 만료되었습니다. 다시 발급받아주세요.", + "error.verify_code_invalid": "인증 코드가 올바르지 않습니다. 다시 입력해주세요.", + "error.new_password_length": "새 비밀번호는 6~20자 사이로 입력해주세요.", + "error.password_length_register": "비밀번호는 6~20자 사이로 입력해주세요.", + "error.user_not_found": "사용자 정보를 찾을 수 없습니다.", + "error.old_password_incorrect": "현재 비밀번호가 올바르지 않습니다. 다시 입력해주세요.", + "error.app_not_exists": "앱 정보를 찾을 수 없습니다.", + "error.permission_denied_not_owner": "권한이 없습니다. Owner 계정이 아닙니다.", + "error.email_not_exists": "해당 이메일을 찾을 수 없습니다." } diff --git a/locales/zh.json b/locales/zh.json index ecf470ac..cd4f111c 100644 --- a/locales/zh.json +++ b/locales/zh.json @@ -12,5 +12,20 @@ "new password": "新密码", "please login again": "请重新登录", "change success": "修改成功", - "Logout": "登出" + "Logout": "登出", + "Register": "注册", + "error.input_email_required": "请您输入邮箱地址", + "error.input_password_required": "请您输入密码", + "error.invalid_credentials": "您输入的邮箱或密码有误", + "error.password_retry_limit_exceeded": "您输入密码错误次数超过限制,帐户已经锁定", + "error.email_already_registered": "该邮箱已经注册过,请更换邮箱注册", + "error.verify_code_expired": "验证码已经失效,请您重新获取", + "error.verify_code_invalid": "您输入的验证码不正确,请重新输入", + "error.new_password_length": "请您输入6~20位长度的新密码", + "error.password_length_register": "请您输入6~20位长度的密码", + "error.user_not_found": "未找到用户信息", + "error.old_password_incorrect": "您输入的旧密码不正确,请重新输入", + "error.app_not_exists": "应用不存在", + "error.permission_denied_not_owner": "权限不足,您不是该应用的 Owner", + "error.email_not_exists": "该邮箱不存在" } diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts index 7b4ddd4c..c56e3ab0 100644 --- a/src/core/services/account-manager.ts +++ b/src/core/services/account-manager.ts @@ -98,10 +98,10 @@ class AccountManager { login(account: string, password: string) { if (_.isEmpty(account)) { - return Promise.reject(new AppError('请您输入邮箱地址')); + return Promise.reject(new AppError('이메일 주소를 입력해주세요.')); // 请您输入邮箱地址 } if (_.isEmpty(password)) { - return Promise.reject(new AppError('请您输入密码')); + return Promise.reject(new AppError('비밀번호를 입력해주세요.')); // 请您输入密码 } let where = {}; if (validator.isEmail(account)) { @@ -113,7 +113,7 @@ class AccountManager { return Users.findOne({ where }) .then((users) => { if (_.isEmpty(users)) { - throw new AppError('您输入的邮箱或密码有误'); + throw new AppError('이메일 또는 비밀번호가 올바르지 않습니다.'); // 您输入的邮箱或密码有误 } return users; }) @@ -122,7 +122,9 @@ class AccountManager { const loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; return redisClient.get(loginKey).then((loginErrorTimes) => { if (Number(loginErrorTimes) > tryLoginTimes) { - throw new AppError(`您输入密码错误次数超过限制,帐户已经锁定`); + throw new AppError( + `비밀번호 오류 횟수가 제한을 초과하여 계정이 잠겼습니다.`, + ); // 您输入密码错误次数超过限制,帐户已经锁定 } return users; }); @@ -142,7 +144,7 @@ class AccountManager { redisClient.incr(loginKey); }); } - throw new AppError('您输入的邮箱或密码有误'); + throw new AppError('이메일 또는 비밀번호가 올바르지 않습니다.'); // 您输入的邮箱或密码有误 } else { return users; } From 4d9ae3fdb41ccd26c5babb7ff269ec390bb43d88 Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Mon, 17 Nov 2025 15:32:07 +0900 Subject: [PATCH 343/347] refactor: add i18n-style function with interpolation and introduce AppErrorI18n class --- README.ko.md | 13 +++++++--- src/app.ts | 5 +++- src/core/app-error.ts | 17 ++++++++++++ src/core/i18n.ts | 39 +++++++++++++++++++++++++++- src/core/middleware.ts | 23 ++++++++++++++++ src/core/services/account-manager.ts | 36 ++++++++++++------------- {locales => src/locales}/en.json | 3 ++- {locales => src/locales}/ko.json | 3 ++- {locales => src/locales}/zh.json | 3 ++- src/routes/auth.ts | 17 +++++++++--- src/routes/index.ts | 7 +++-- src/routes/indexV1.ts | 2 +- src/routes/users.ts | 9 ++++--- tsconfig.json | 1 + 14 files changed, 140 insertions(+), 38 deletions(-) rename {locales => src/locales}/en.json (91%) rename {locales => src/locales}/ko.json (91%) rename {locales => src/locales}/zh.json (93%) diff --git a/README.ko.md b/README.ko.md index c38bd932..1c8b11ec 100644 --- a/README.ko.md +++ b/README.ko.md @@ -9,11 +9,18 @@ Microsoft 공식 CodePush 서비스는 아시아 지역에서 속도가 느린 ## Requirement -- Node.js v24.6.0 +- Node.js v24.6.0 by package.json > engines - npm install -g install @shm-open/code-push-cli - data, storage 이름으로 디렉토리 생성후 서버 구동 -- 앱테스터 semver 포맷 지원을 위해 parseVersion 유틸함수 일부 수정 → cleanVersion 선행 - > e.g., '2.10.2-stg-01' → '2.10.2' + +## Key Changes + +- `AppErrorI18n` 클래스를 추가하여 에러 메시지를 포함한 다양한 텍스트에 대한 다국어(i18n) 지원을 제공함. +- 요청(Request) 컨텍스트에 `i18n` 유틸리티와 `lang` 필드를 추가하여 라우터 및 서비스 계층에서 일관된 번역 기능을 활용할 수 있도록 개선함. +- JSON 파일을 import하는 경우 TypeScript가 `src` 외부 디렉터리를 소스 경로로 포함하게 되어 `bin/locales` 및 `bin/src` 디렉터리가 생성되는 문제가 발생함. +- 기존 `bin` 디렉터리의 구조를 변경하지 않기 위해, i18n 관련 리소스(`locales` 디렉터리)를 `src/locales`로 이동하여 빌드 결과물을 안정적으로 유지함. +- App Tester의 semver 포맷 처리를 개선하기 위해 `parseVersion` 유틸 함수를 수정하고, `cleanVersion` 과정을 선행하도록 구조를 보완함. + - e.g., `'2.10.2-stg-01'` → `'2.10.2'` ## 이 포크(Fork)에 대하여 diff --git a/src/app.ts b/src/app.ts index 4a5e8d4c..481a37a8 100644 --- a/src/app.ts +++ b/src/app.ts @@ -8,7 +8,7 @@ import { logger } from 'kv-logger'; import { AppError, NotFound } from './core/app-error'; import { config } from './core/config'; import { i18n } from './core/i18n'; -import { Req, Res, withLogger } from './core/middleware'; +import { i18nMiddleware, Req, Res, withLogger } from './core/middleware'; import { accessKeysRouter } from './routes/accessKeys'; import { accountRouter } from './routes/account'; import { appsRouter } from './routes/apps'; @@ -48,6 +48,9 @@ app.all('*', (req, res, next) => { next(); }); +// i18n 미들웨어 (req.lang, req.t 세팅) +app.use(i18nMiddleware); + logger.debug(`config common.storageType value: ${config.common.storageType}`); // config local storage diff --git a/src/core/app-error.ts b/src/core/app-error.ts index 0d7b36f9..c52b4b34 100644 --- a/src/core/app-error.ts +++ b/src/core/app-error.ts @@ -8,6 +8,23 @@ export class AppError extends Error { public status = 200; } +/** i18n 에러 메시지 번역 포함 */ +export class AppErrorI18n extends Error { + public readonly messageKey: string; + public readonly messageVars?: Record; + + constructor(messageKey: string, messageVars?: Record) { + // Error.message에는 일단 key만 넣어둠 (실제 표현은 나중에 req.t로 처리) + super(messageKey); + + this.messageKey = messageKey; + this.messageVars = messageVars; + + Object.setPrototypeOf(this, new.target.prototype); // Error 상속시 필수 처리 + this.name = 'AppErrorI18n'; + } +} + export class NotFound extends AppError { constructor(message?: string | Error) { super(message || 'Not Found'); diff --git a/src/core/i18n.ts b/src/core/i18n.ts index 1708b8c2..82b432d6 100644 --- a/src/core/i18n.ts +++ b/src/core/i18n.ts @@ -1,9 +1,46 @@ import path from 'path'; import { I18n } from 'i18n'; +import en from '../locales/en.json'; +import ko from '../locales/ko.json'; +import zh from '../locales/zh.json'; +import type { LocaleI18n } from './middleware'; + +const resources: Record> = { + en, + ko, + zh, +}; + export const i18n = new I18n(); i18n.configure({ - directory: path.join(__dirname, '../../locales'), + directory: path.join(__dirname, '../locales'), defaultLocale: 'en', }); + +/** + * @description 모던 i18next 라이브러리의 t함수와 유사함 동작 보장 + * - 이 프로젝트의 i18n 의 번역함수 사용법 예시 + * - e.g., req.__("greeting") OR res.__("greeting") + * - 위 방법 외에 t("greeting") 호출로도 동일한 스트링 리턴 보장 + */ +export function t(locale: LocaleI18n, key: string, vars?: Record): string { + const dict = resources[locale] ?? resources.zh; + + // 키에 해당하는 문장 (없으면 key 자체 반환) + const template = dict[key] ?? key; + + // 변수 치환 없음 -> 그대로 반환 + if (!vars) { + return template; + } + + // Interpolation 처리: {{varName}} -> vars[varName] + return template.replace(/\{\{\s*(\w+)\s*\}\}/g, (_, varName) => { + if (vars[varName] == null) { + return ''; // 없는 변수를 치환하면 빈문자열 (i18next 기본 동작과 유사) + } + return String(vars[varName]); + }); +} diff --git a/src/core/middleware.ts b/src/core/middleware.ts index b405f149..085dea1e 100644 --- a/src/core/middleware.ts +++ b/src/core/middleware.ts @@ -9,14 +9,19 @@ import { UserTokens } from '../models/user_tokens'; import { Users, UsersInterface } from '../models/users'; import { AppError, Unauthorized } from './app-error'; import { config } from './config'; +import { t } from './i18n'; import { parseToken, md5 } from './utils/security'; +export type LocaleI18n = 'en' | 'ko' | 'zh'; + // eslint-disable-next-line @typescript-eslint/no-explicit-any export interface Req

, B = any, Q = Record> // eslint-disable-next-line @typescript-eslint/no-explicit-any extends Request> { users: UsersInterface; logger: Logger; + lang?: LocaleI18n; + t?: (key: string, vars?: Record) => string; } // eslint-disable-next-line @typescript-eslint/no-empty-interface, @typescript-eslint/no-explicit-any @@ -141,3 +146,21 @@ export function checkToken(req: Req, res: Res, next: NextFunction) { } }); } + +function getLocaleFromReq(req: Req): LocaleI18n { + const langHeader = (req.headers['x-lang'] || req.headers['accept-language'] || '').toString(); + + if (langHeader.startsWith('ko')) { + return 'ko'; + } + return 'en'; +} + +export function i18nMiddleware(req: Req, res: Res, next: NextFunction) { + const locale = getLocaleFromReq(req); + + req.lang = locale; + req.t = (key: string, vars?: Record) => t(locale, key, vars); + + next(); +} diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts index c56e3ab0..3b705951 100644 --- a/src/core/services/account-manager.ts +++ b/src/core/services/account-manager.ts @@ -5,7 +5,7 @@ import validator from 'validator'; import { findCollaboratorsByAppNameAndUid } from '../../models/collaborators'; import { UserTokens } from '../../models/user_tokens'; import { Users } from '../../models/users'; -import { AppError } from '../app-error'; +import { AppError, AppErrorI18n } from '../app-error'; import { config } from '../config'; import { redisClient } from '../utils/connections'; import { passwordVerifySync, randToken, md5, passwordHashSync } from '../utils/security'; @@ -98,10 +98,10 @@ class AccountManager { login(account: string, password: string) { if (_.isEmpty(account)) { - return Promise.reject(new AppError('이메일 주소를 입력해주세요.')); // 请您输入邮箱地址 + return Promise.reject(new AppErrorI18n('error.input_email_required')); } if (_.isEmpty(password)) { - return Promise.reject(new AppError('비밀번호를 입력해주세요.')); // 请您输入密码 + return Promise.reject(new AppErrorI18n('error.input_password_required')); } let where = {}; if (validator.isEmail(account)) { @@ -113,7 +113,7 @@ class AccountManager { return Users.findOne({ where }) .then((users) => { if (_.isEmpty(users)) { - throw new AppError('이메일 또는 비밀번호가 올바르지 않습니다.'); // 您输入的邮箱或密码有误 + throw new AppErrorI18n('error.invalid_credentials'); } return users; }) @@ -122,9 +122,7 @@ class AccountManager { const loginKey = `${LOGIN_LIMIT_PRE}${users.id}`; return redisClient.get(loginKey).then((loginErrorTimes) => { if (Number(loginErrorTimes) > tryLoginTimes) { - throw new AppError( - `비밀번호 오류 횟수가 제한을 초과하여 계정이 잠겼습니다.`, - ); // 您输入密码错误次数超过限制,帐户已经锁定 + throw new AppErrorI18n('error.password_retry_limit_exceeded'); } return users; }); @@ -144,7 +142,7 @@ class AccountManager { redisClient.incr(loginKey); }); } - throw new AppError('이메일 또는 비밀번호가 올바르지 않습니다.'); // 您输入的邮箱或密码有误 + throw new AppErrorI18n('error.invalid_credentials'); } else { return users; } @@ -153,16 +151,16 @@ class AccountManager { sendRegisterCode(email: string) { if (_.isEmpty(email)) { - return Promise.reject(new AppError('请您输入邮箱地址')); + return Promise.reject(new AppErrorI18n('error.input_email_required')); } return Users.findOne({ where: { email } }) .then((u) => { if (u) { - throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); + throw new AppErrorI18n('error.email_already_registered', { email }); } }) .then(() => { - // 将token临时存储到redis + // Store the token temporarily in Redis const token = randToken(40); return redisClient .setEx(`${REGISTER_CODE}${md5(email)}`, EXPIRED, token) @@ -171,7 +169,7 @@ class AccountManager { }); }) .then((token) => { - // 将token发送到用户邮箱 + // Send the token to user's email return emailManager.sendRegisterCodeMail(email, token); }); } @@ -180,14 +178,14 @@ class AccountManager { return Users.findOne({ where: { email } }) .then((u) => { if (u) { - throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); + throw new AppErrorI18n('error.email_already_registered', { email }); } }) .then(() => { const registerKey = `${REGISTER_CODE}${md5(email)}`; return redisClient.get(registerKey).then((storageToken) => { if (_.isEmpty(storageToken)) { - throw new AppError(`验证码已经失效,请您重新获取`); + throw new AppErrorI18n('error.verify_code_expired'); } if (!_.eq(token, storageToken)) { redisClient.ttl(registerKey).then((ttl) => { @@ -195,7 +193,7 @@ class AccountManager { redisClient.expire(registerKey, ttl - EXPIRED_SPEED); } }); - throw new AppError(`您输入的验证码不正确,请重新输入`); + throw new AppErrorI18n('error.verify_code_invalid'); } return storageToken; }); @@ -206,7 +204,7 @@ class AccountManager { return Users.findOne({ where: { email } }) .then((u) => { if (u) { - throw new AppError(`"${email}" 已经注册过,请更换邮箱注册`); + throw new AppErrorI18n('error.email_already_registered', { email }); } }) .then(() => { @@ -221,19 +219,19 @@ class AccountManager { changePassword(uid: number, oldPassword: string, newPassword: string) { if (!_.isString(newPassword) || newPassword.length < 6) { - return Promise.reject(new AppError('请您输入6~20位长度的新密码')); + return Promise.reject(new AppErrorI18n('error.new_password_length')); } return Users.findOne({ where: { id: uid } }) .then((u) => { if (!u) { - throw new AppError(`未找到用户信息`); + throw new AppErrorI18n('error.user_not_found'); } return u; }) .then((u) => { const isEq = passwordVerifySync(oldPassword, u.get('password')); if (!isEq) { - throw new AppError(`您输入的旧密码不正确,请重新输入`); + throw new AppErrorI18n('error.old_password_incorrect'); } u.set('password', passwordHashSync(newPassword)); u.set('ack_code', randToken(5)); diff --git a/locales/en.json b/src/locales/en.json similarity index 91% rename from locales/en.json rename to src/locales/en.json index f8f46368..d30da7e8 100644 --- a/locales/en.json +++ b/src/locales/en.json @@ -14,11 +14,12 @@ "change success": "change success", "Logout": "Logout", "Register": "Register", + "server.name": "CodePush Server", "error.input_email_required": "Please enter your email address.", "error.input_password_required": "Please enter your password.", "error.invalid_credentials": "The email or password you entered is incorrect.", "error.password_retry_limit_exceeded": "Your account has been locked due to too many failed login attempts.", - "error.email_already_registered": "This email is already registered. Please use a different email address.", + "error.email_already_registered": "{{email}} is already registered. Please use a different email address.", "error.verify_code_expired": "The verification code has expired. Please request a new one.", "error.verify_code_invalid": "The verification code is incorrect. Please try again.", "error.new_password_length": "Please enter a new password between 6 and 20 characters.", diff --git a/locales/ko.json b/src/locales/ko.json similarity index 91% rename from locales/ko.json rename to src/locales/ko.json index 60ab89c0..ca90eefd 100644 --- a/locales/ko.json +++ b/src/locales/ko.json @@ -14,11 +14,12 @@ "change success": "변경되었습니다", "Logout": "로그아웃", "Register": "회원가입", + "server.name": "코드푸시 서버", "error.input_email_required": "이메일 주소를 입력해주세요.", "error.input_password_required": "비밀번호를 입력해주세요.", "error.invalid_credentials": "이메일 또는 비밀번호가 올바르지 않습니다.", "error.password_retry_limit_exceeded": "비밀번호 오류 횟수가 제한을 초과하여 계정이 잠겼습니다.", - "error.email_already_registered": "이미 등록된 이메일입니다. 다른 이메일을 사용해주세요.", + "error.email_already_registered": "{{email}}은 이미 등록된 이메일입니다. 다른 이메일을 사용해주세요.", "error.verify_code_expired": "인증 코드가 만료되었습니다. 다시 발급받아주세요.", "error.verify_code_invalid": "인증 코드가 올바르지 않습니다. 다시 입력해주세요.", "error.new_password_length": "새 비밀번호는 6~20자 사이로 입력해주세요.", diff --git a/locales/zh.json b/src/locales/zh.json similarity index 93% rename from locales/zh.json rename to src/locales/zh.json index cd4f111c..d7b47394 100644 --- a/locales/zh.json +++ b/src/locales/zh.json @@ -14,11 +14,12 @@ "change success": "修改成功", "Logout": "登出", "Register": "注册", + "server.name": "CodePush 服务器", "error.input_email_required": "请您输入邮箱地址", "error.input_password_required": "请您输入密码", "error.invalid_credentials": "您输入的邮箱或密码有误", "error.password_retry_limit_exceeded": "您输入密码错误次数超过限制,帐户已经锁定", - "error.email_already_registered": "该邮箱已经注册过,请更换邮箱注册", + "error.email_already_registered": "{{email}}已经注册过,请更换邮箱注册", "error.verify_code_expired": "验证码已经失效,请您重新获取", "error.verify_code_invalid": "您输入的验证码不正确,请重新输入", "error.new_password_length": "请您输入6~20位长度的新密码", diff --git a/src/routes/auth.ts b/src/routes/auth.ts index 1e1c014f..dd8a77fe 100644 --- a/src/routes/auth.ts +++ b/src/routes/auth.ts @@ -1,7 +1,7 @@ import express from 'express'; import jwt from 'jsonwebtoken'; import _ from 'lodash'; -import { AppError } from '../core/app-error'; +import { AppErrorI18n } from '../core/app-error'; import { config } from '../core/config'; import { Req } from '../core/middleware'; import { accountManager } from '../core/services/account-manager'; @@ -70,12 +70,21 @@ authRouter.post( res.send({ status: 'OK', results: { tokens: token } }); }) .catch((e) => { - if (e instanceof AppError) { + if (e instanceof AppErrorI18n) { + const { messageKey, messageVars } = e; + const message = + typeof req.t === 'function' ? req.t(messageKey, messageVars) : messageKey; // fallback + logger.info('login failed', { account, - error: e.message, + error: message, + messageKey, + }); + res.send({ + status: 'ERROR', + message, + code: messageKey, }); - res.send({ status: 'ERROR', message: e.message }); } else { next(e); } diff --git a/src/routes/index.ts b/src/routes/index.ts index 06327715..2f1cb32c 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -10,9 +10,12 @@ indexRouter.get('/', (req, res) => { res.render('index', { title: 'CodePushServer' }); }); -indexRouter.get('/healthcheck', (req, res) => { +indexRouter.get('/healthcheck', (req: Req, res) => { + const message = req.t('hot update server'); res.status(200).json({ success: true, + lang: req.lang, + message, timestamp: new Date().toISOString(), }); }); @@ -54,7 +57,7 @@ indexRouter.get( logger, ) .then((rs) => { - // 灰度检测 + // 그레이 릴리즈(Gray Release, 灰度检测, 점진적 배포대상) 체크 === 현재 유저가 이 업데이트를 받을 대상인지 판별하는 과정 return clientManager .chosenMan(rs.packageId, rs.rollout, clientUniqueId) .then((data) => { diff --git a/src/routes/indexV1.ts b/src/routes/indexV1.ts index a7089ef3..7131becb 100644 --- a/src/routes/indexV1.ts +++ b/src/routes/indexV1.ts @@ -45,7 +45,7 @@ indexV1Router.get( logger, ) .then((rs) => { - // 灰度检测 + // 그레이 릴리즈(Gray Release, 灰度检测, 점진적 배포대상) 체크 === 현재 유저가 이 업데이트를 받을 대상인지 판별하는 과정 return clientManager .chosenMan(rs.packageId, rs.rollout, clientUniqueId) .then((data) => { diff --git a/src/routes/users.ts b/src/routes/users.ts index 8c218bd9..e47c42f4 100644 --- a/src/routes/users.ts +++ b/src/routes/users.ts @@ -1,6 +1,6 @@ import express from 'express'; import _ from 'lodash'; -import { AppError } from '../core/app-error'; +import { AppError, AppErrorI18n } from '../core/app-error'; import { checkToken, Req } from '../core/middleware'; import { accountManager } from '../core/services/account-manager'; import { Users } from '../models/users'; @@ -35,7 +35,7 @@ usersRouter.post( .checkRegisterCode(email, token) .then(() => { if (_.isString(password) && password.length < 6) { - throw new AppError('请您输入6~20位长度的密码'); + throw new AppErrorI18n('error.password_length_register'); } return accountManager.register(email, password); }) @@ -56,8 +56,9 @@ usersRouter.post( usersRouter.get('/exists', (req: Req, res, next) => { const email = _.trim(req.query.email); + const emailRequiredMessage = req.t('error.input_email_required'); if (!email) { - res.send({ status: 'ERROR', message: '请您输入邮箱地址' }); + res.send({ status: 'ERROR', message: emailRequiredMessage }); return; } Users.findOne({ where: { email } }) @@ -114,7 +115,7 @@ usersRouter.get( }, ); -// 修改密码 +// Change Password usersRouter.patch( '/password', checkToken, diff --git a/tsconfig.json b/tsconfig.json index e5373471..85bb8508 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,7 @@ "outDir": "bin", "lib": ["es5", "es2015", "es2016", "es2017", "es2018", "es2019", "es2020"], "skipLibCheck": true, + "resolveJsonModule": true, "esModuleInterop": true, "noEmitOnError": true, "allowSyntheticDefaultImports": true, From 666084592b8f1652008523d18d942d1e677c8f87 Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Mon, 17 Nov 2025 16:01:53 +0900 Subject: [PATCH 344/347] refactor: replace legacy aws-sdk S3 upload with AWS SDK v3 (same bucket/key behavior) --- package-lock.json | 2048 ++++++++++++++++++++++++++++++++----- package.json | 3 +- src/core/utils/storage.ts | 74 +- src/routes/index.ts | 4 +- 4 files changed, 1841 insertions(+), 288 deletions(-) diff --git a/package-lock.json b/package-lock.json index 863ce39e..e0b4832a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,10 @@ "version": "2.1.6", "license": "MIT", "dependencies": { + "@aws-sdk/client-s3": "^3.932.0", + "@aws-sdk/lib-storage": "^3.932.0", "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1176.0", "bcryptjs": "2.4.3", "body-parser": "1.20.0", "cookie-parser": "1.4.6", @@ -70,8 +71,8 @@ "typescript": "4.9.5" }, "engines": { - "node": ">= 6.0", - "npm": ">= 3.10.8" + "node": "24.6.0", + "npm": "11.5.1" } }, "node_modules/@ampproject/remapping": { @@ -86,6 +87,891 @@ "node": ">=6.0.0" } }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.932.0.tgz", + "integrity": "sha512-qrlbJ3W5QR3Gzz2S+yaItH8ZhX7vaeA4j4fDAi8+0FmsVhXOfBbomWr+JO1wk/YojZMdyLfmfYRHrJvAQsLFVw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.932.0", + "@aws-sdk/credential-provider-node": "3.932.0", + "@aws-sdk/middleware-bucket-endpoint": "3.930.0", + "@aws-sdk/middleware-expect-continue": "3.930.0", + "@aws-sdk/middleware-flexible-checksums": "3.932.0", + "@aws-sdk/middleware-host-header": "3.930.0", + "@aws-sdk/middleware-location-constraint": "3.930.0", + "@aws-sdk/middleware-logger": "3.930.0", + "@aws-sdk/middleware-recursion-detection": "3.930.0", + "@aws-sdk/middleware-sdk-s3": "3.932.0", + "@aws-sdk/middleware-ssec": "3.930.0", + "@aws-sdk/middleware-user-agent": "3.932.0", + "@aws-sdk/region-config-resolver": "3.930.0", + "@aws-sdk/signature-v4-multi-region": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@aws-sdk/util-endpoints": "3.930.0", + "@aws-sdk/util-user-agent-browser": "3.930.0", + "@aws-sdk/util-user-agent-node": "3.932.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.2", + "@smithy/eventstream-serde-browser": "^4.2.5", + "@smithy/eventstream-serde-config-resolver": "^4.3.5", + "@smithy/eventstream-serde-node": "^4.2.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-blob-browser": "^4.2.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/hash-stream-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/md5-js": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.9", + "@smithy/middleware-retry": "^4.4.9", + "@smithy/middleware-serde": "^4.2.5", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.8", + "@smithy/util-defaults-mode-node": "^4.2.11", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.932.0.tgz", + "integrity": "sha512-XHqHa5iv2OQsKoM2tUQXs7EAyryploC00Wg0XSFra/KAKqyGizUb5XxXsGlyqhebB29Wqur+zwiRwNmejmN0+Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.932.0", + "@aws-sdk/middleware-host-header": "3.930.0", + "@aws-sdk/middleware-logger": "3.930.0", + "@aws-sdk/middleware-recursion-detection": "3.930.0", + "@aws-sdk/middleware-user-agent": "3.932.0", + "@aws-sdk/region-config-resolver": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@aws-sdk/util-endpoints": "3.930.0", + "@aws-sdk/util-user-agent-browser": "3.930.0", + "@aws-sdk/util-user-agent-node": "3.932.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.2", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.9", + "@smithy/middleware-retry": "^4.4.9", + "@smithy/middleware-serde": "^4.2.5", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.8", + "@smithy/util-defaults-mode-node": "^4.2.11", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.932.0.tgz", + "integrity": "sha512-AS8gypYQCbNojwgjvZGkJocC2CoEICDx9ZJ15ILsv+MlcCVLtUJSRSx3VzJOUY2EEIaGLRrPNlIqyn/9/fySvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/core": "^3.18.2", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.932.0.tgz", + "integrity": "sha512-ozge/c7NdHUDyHqro6+P5oHt8wfKSUBN+olttiVfBe9Mw3wBMpPa3gQ0pZnG+gwBkKskBuip2bMR16tqYvUSEA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.932.0.tgz", + "integrity": "sha512-b6N9Nnlg8JInQwzBkUq5spNaXssM3h3zLxGzpPrnw0nHSIWPJPTbZzA5Ca285fcDUFuKP+qf3qkuqlAjGOdWhg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.932.0.tgz", + "integrity": "sha512-ZBjSAXVGy7danZRHCRMJQ7sBkG1Dz39thYlvTiUaf9BKZ+8ymeiFhuTeV1OkWUBBnY0ki2dVZJvboTqfINhNxA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.932.0", + "@aws-sdk/credential-provider-env": "3.932.0", + "@aws-sdk/credential-provider-http": "3.932.0", + "@aws-sdk/credential-provider-process": "3.932.0", + "@aws-sdk/credential-provider-sso": "3.932.0", + "@aws-sdk/credential-provider-web-identity": "3.932.0", + "@aws-sdk/nested-clients": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.932.0.tgz", + "integrity": "sha512-SEG9t2taBT86qe3gTunfrK8BxT710GVLGepvHr+X5Pw+qW225iNRaGN0zJH+ZE/j91tcW9wOaIoWnURkhR5wIg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.932.0", + "@aws-sdk/credential-provider-http": "3.932.0", + "@aws-sdk/credential-provider-ini": "3.932.0", + "@aws-sdk/credential-provider-process": "3.932.0", + "@aws-sdk/credential-provider-sso": "3.932.0", + "@aws-sdk/credential-provider-web-identity": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.932.0.tgz", + "integrity": "sha512-BodZYKvT4p/Dkm28Ql/FhDdS1+p51bcZeMMu2TRtU8PoMDHnVDhHz27zASEKSZwmhvquxHrZHB0IGuVqjZUtSQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.932.0.tgz", + "integrity": "sha512-XYmkv+ltBjjmPZ6AmR1ZQZkQfD0uzG61M18/Lif3HAGxyg3dmod0aWx9aL6lj9SvxAGqzscrx5j4PkgLqjZruw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.932.0", + "@aws-sdk/core": "3.932.0", + "@aws-sdk/token-providers": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.932.0.tgz", + "integrity": "sha512-Yw/hYNnC1KHuVIQF9PkLXbuKN7ljx70OSbJYDRufllQvej3kRwNcqQSnzI1M4KaObccqKaE6srg22DqpPy9p8w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.932.0", + "@aws-sdk/nested-clients": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.932.0.tgz", + "integrity": "sha512-1HvVTtZQiFfPsvo/vGC15AQFFTJDlwQpKzNL3I8nfR4jDoJiJZ9IS+X0Z9YumZPYL4ZjvvhKyx3XesWblfLgQg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.9", + "@smithy/smithy-client": "^4.9.5", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.932.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.930.0.tgz", + "integrity": "sha512-cnCLWeKPYgvV4yRYPFH6pWMdUByvu2cy2BAlfsPpvnm4RaVioztyvxmQj5PmVN5fvWs5w/2d6U7le8X9iye2sA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@aws-sdk/util-arn-parser": "3.893.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.930.0.tgz", + "integrity": "sha512-5HEQ+JU4DrLNWeY27wKg/jeVa8Suy62ivJHOSUf6e6hZdVIMx0h/kXS1fHEQNNiLu2IzSEP/bFXsKBaW7x7s0g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.932.0.tgz", + "integrity": "sha512-hyvRz/XS/0HTHp9/Ld1mKwpOi7bZu5olI42+T112rkCTbt1bewkygzEl4oflY4H7cKMamQusYoL0yBUD/QSEvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.930.0.tgz", + "integrity": "sha512-x30jmm3TLu7b/b+67nMyoV0NlbnCVT5DI57yDrhXAPCtdgM1KtdLWt45UcHpKOm1JsaIkmYRh2WYu7Anx4MG0g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.930.0.tgz", + "integrity": "sha512-QIGNsNUdRICog+LYqmtJ03PLze6h2KCORXUs5td/hAEjVP5DMmubhtrGg1KhWyctACluUH/E/yrD14p4pRXxwA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.930.0.tgz", + "integrity": "sha512-vh4JBWzMCBW8wREvAwoSqB2geKsZwSHTa0nSt0OMOLp2PdTYIZDi0ZiVMmpfnjcx9XbS6aSluLv9sKx4RrG46A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.930.0.tgz", + "integrity": "sha512-gv0sekNpa2MBsIhm2cjP3nmYSfI4nscx/+K9u9ybrWZBWUIC4kL2sV++bFjjUz4QxUIlvKByow3/a9ARQyCu7Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@aws/lambda-invoke-store": "^0.1.1", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.932.0.tgz", + "integrity": "sha512-bYMHxqQzseaAP9Z5qLI918z5AtbAnZRRtFi3POb4FLZyreBMgCgBNaPkIhdgywnkqaydTWvbMBX4s9f4gUwlTw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@aws-sdk/util-arn-parser": "3.893.0", + "@smithy/core": "^3.18.2", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.930.0.tgz", + "integrity": "sha512-N2/SvodmaDS6h7CWfuapt3oJyn1T2CBz0CsDIiTDv9cSagXAVFjPdm2g4PFJqrNBeqdDIoYBnnta336HmamWHg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.932.0.tgz", + "integrity": "sha512-9BGTbJyA/4PTdwQWE9hAFIJGpsYkyEW20WON3i15aDqo5oRZwZmqaVageOD57YYqG8JDJjvcwKyDdR4cc38dvg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@aws-sdk/util-endpoints": "3.930.0", + "@smithy/core": "^3.18.2", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.932.0.tgz", + "integrity": "sha512-E2ucBfiXSpxZflHTf3UFbVwao4+7v7ctAeg8SWuglc1UMqMlpwMFFgWiSONtsf0SR3+ZDoWGATyCXOfDWerJuw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.932.0", + "@aws-sdk/middleware-host-header": "3.930.0", + "@aws-sdk/middleware-logger": "3.930.0", + "@aws-sdk/middleware-recursion-detection": "3.930.0", + "@aws-sdk/middleware-user-agent": "3.932.0", + "@aws-sdk/region-config-resolver": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@aws-sdk/util-endpoints": "3.930.0", + "@aws-sdk/util-user-agent-browser": "3.930.0", + "@aws-sdk/util-user-agent-node": "3.932.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.2", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.9", + "@smithy/middleware-retry": "^4.4.9", + "@smithy/middleware-serde": "^4.2.5", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.8", + "@smithy/util-defaults-mode-node": "^4.2.11", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.930.0.tgz", + "integrity": "sha512-KL2JZqH6aYeQssu1g1KuWsReupdfOoxD6f1as2VC+rdwYFUu4LfzMsFfXnBvvQWWqQ7rZHWOw1T+o5gJmg7Dzw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.932.0.tgz", + "integrity": "sha512-NCIRJvoRc9246RZHIusY1+n/neeG2yGhBGdKhghmrNdM+mLLN6Ii7CKFZjx3DhxtpHMpl1HWLTMhdVrGwP2upw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.932.0.tgz", + "integrity": "sha512-43u82ulVuHK4zWhcSPyuPS18l0LNHi3QJQ1YtP2MfP8bPf5a6hMYp5e3lUr9oTDEWcpwBYtOW0m1DVmoU/3veA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.932.0", + "@aws-sdk/nested-clients": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.930.0.tgz", + "integrity": "sha512-we/vaAgwlEFW7IeftmCLlLMw+6hFs3DzZPJw7lVHbj/5HJ0bz9gndxEsS2lQoeJ1zhiiLqAqvXxmM43s0MBg0A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.893.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz", + "integrity": "sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.930.0.tgz", + "integrity": "sha512-M2oEKBzzNAYr136RRc6uqw3aWlwCxqTP1Lawps9E1d2abRPvl1p1ztQmmXp1Ak4rv8eByIZ+yQyKQ3zPdRG5dw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-endpoints": "^3.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.893.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz", + "integrity": "sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.930.0.tgz", + "integrity": "sha512-q6lCRm6UAe+e1LguM5E4EqM9brQlDem4XDcQ87NzEvlTW6GzmNCO0w1jS0XgCFXQHjDxjdlNFX+5sRbHijwklg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@smithy/types": "^4.9.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.932.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.932.0.tgz", + "integrity": "sha512-/kC6cscHrZL74TrZtgiIL5jJNbVsw9duGGPurmaVgoCbP7NnxyaSWEurbNV3VPNPhNE3bV3g4Ci+odq+AlsYQg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.932.0", + "@aws-sdk/types": "3.930.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", + "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.1.1.tgz", + "integrity": "sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", @@ -900,81 +1786,813 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, - "node_modules/@redis/bloom": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.0.2.tgz", - "integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==", - "peerDependencies": { - "@redis/client": "^1.0.0" + "node_modules/@redis/bloom": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.0.2.tgz", + "integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.2.0.tgz", + "integrity": "sha512-a8Nlw5fv2EIAFJxTDSSDVUT7yfBGpZO96ybZXzQpgkyLg/dxtQ1uiwTc0EGfzg1mrPjZokeBSEGTbGXekqTNOg==", + "dependencies": { + "cluster-key-slot": "1.1.0", + "generic-pool": "3.8.2", + "yallist": "4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@redis/graph": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.0.1.tgz", + "integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.3.tgz", + "integrity": "sha512-4X0Qv0BzD9Zlb0edkUoau5c1bInWSICqXAGrpwEltkncUwcxJIGEcVryZhLgb0p/3PkKaLIWkjhHRtLe9yiA7Q==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/search": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.0.6.tgz", + "integrity": "sha512-pP+ZQRis5P21SD6fjyCeLcQdps+LuTzp2wdUbzxEmNhleighDDTD5ck8+cYof+WLec4csZX7ks+BuoMw0RaZrA==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/time-series": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz", + "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@shm-open/eslint-config-bundle": { + "version": "1.9.13", + "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.13.tgz", + "integrity": "sha512-QwyV+aZm5aIcNV1payDz46z3yJE4tUvKFKUxtxLAqysPwJeSg6CklVXuWHc2e8hStcF5U0dMLEoKAg60EOxGBA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "5.30.6", + "@typescript-eslint/parser": "5.30.6", + "babel-eslint": "10.1.0", + "eslint": "8.19.0", + "eslint-config-airbnb-base": "15.0.0", + "eslint-config-prettier": "8.5.0", + "eslint-import-resolver-typescript": "2.7.1", + "eslint-plugin-deprecation": "1.3.2", + "eslint-plugin-import": "2.26.0", + "eslint-plugin-jsx-a11y": "6.6.0", + "eslint-plugin-prettier": "4.2.1", + "eslint-plugin-react": "7.30.1", + "eslint-plugin-react-hooks": "4.6.0", + "eslint-plugin-react-native": "4.0.0", + "eslint-plugin-taro": "3.3.20", + "prettier": "2.7.1" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", + "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz", + "integrity": "sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz", + "integrity": "sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", + "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.4.tgz", + "integrity": "sha512-o5tMqPZILBvvROfC8vC+dSVnWJl9a0u9ax1i1+Bq8515eYjUJqqk5XjjEsDLoeL5dSqGSh6WGdVx1eJ1E/Nwhw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.6", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", + "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.5.tgz", + "integrity": "sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.9.0", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.5.tgz", + "integrity": "sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.5.tgz", + "integrity": "sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.5.tgz", + "integrity": "sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.5.tgz", + "integrity": "sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", + "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.6.tgz", + "integrity": "sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^5.2.0", + "@smithy/chunked-blob-reader-native": "^4.2.1", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", + "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.5.tgz", + "integrity": "sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", + "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.5.tgz", + "integrity": "sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", + "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.11.tgz", + "integrity": "sha512-eJXq9VJzEer1W7EQh3HY2PDJdEcEUnv6sKuNt4eVjyeNWcQFS4KmnY+CKkYOIR6tSqarn6bjjCqg1UB+8UJiPQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.18.4", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-middleware": "^4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.11.tgz", + "integrity": "sha512-EL5OQHvFOKneJVRgzRW4lU7yidSwp/vRJOe542bHgExN3KNThr1rlg0iE4k4SnA+ohC+qlUxoK+smKeAYPzfAQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/service-error-classification": "^4.2.5", + "@smithy/smithy-client": "^4.9.7", + "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", + "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", + "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", + "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", + "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", + "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", + "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", + "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", + "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", + "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", + "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", + "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.9.7", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.7.tgz", + "integrity": "sha512-pskaE4kg0P9xNQWihfqlTMyxyFR3CH6Sr6keHYghgyqqDXzjl2QJg5lAzuVe/LzZiOzcbcVtxKYi1/fZPt/3DA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.18.4", + "@smithy/middleware-endpoint": "^4.3.11", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", + "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", + "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.10.tgz", + "integrity": "sha512-3iA3JVO1VLrP21FsZZpMCeF93aqP3uIOMvymAT3qHIJz2YlgDeRvNUspFwCNqd/j3qqILQJGtsVQnJZICh/9YA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.7", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.13.tgz", + "integrity": "sha512-PTc6IpnpSGASuzZAgyUtaVfOFpU0jBD2mcGwrgDuHf7PlFgt5TIPxCYBDbFQs06jxgeV3kd/d/sok1pzV0nJRg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.4.3", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.7", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", + "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@redis/client": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.2.0.tgz", - "integrity": "sha512-a8Nlw5fv2EIAFJxTDSSDVUT7yfBGpZO96ybZXzQpgkyLg/dxtQ1uiwTc0EGfzg1mrPjZokeBSEGTbGXekqTNOg==", + "node_modules/@smithy/util-middleware": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", + "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", + "license": "Apache-2.0", "dependencies": { - "cluster-key-slot": "1.1.0", - "generic-pool": "3.8.2", - "yallist": "4.0.0" + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14" + "node": ">=18.0.0" } }, - "node_modules/@redis/graph": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.0.1.tgz", - "integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==", - "peerDependencies": { - "@redis/client": "^1.0.0" + "node_modules/@smithy/util-retry": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", + "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@redis/json": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.3.tgz", - "integrity": "sha512-4X0Qv0BzD9Zlb0edkUoau5c1bInWSICqXAGrpwEltkncUwcxJIGEcVryZhLgb0p/3PkKaLIWkjhHRtLe9yiA7Q==", - "peerDependencies": { - "@redis/client": "^1.0.0" + "node_modules/@smithy/util-stream": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", + "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@redis/search": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.0.6.tgz", - "integrity": "sha512-pP+ZQRis5P21SD6fjyCeLcQdps+LuTzp2wdUbzxEmNhleighDDTD5ck8+cYof+WLec4csZX7ks+BuoMw0RaZrA==", - "peerDependencies": { - "@redis/client": "^1.0.0" + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@redis/time-series": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz", - "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==", - "peerDependencies": { - "@redis/client": "^1.0.0" + "node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@shm-open/eslint-config-bundle": { - "version": "1.9.13", - "resolved": "https://registry.npmjs.org/@shm-open/eslint-config-bundle/-/eslint-config-bundle-1.9.13.tgz", - "integrity": "sha512-QwyV+aZm5aIcNV1payDz46z3yJE4tUvKFKUxtxLAqysPwJeSg6CklVXuWHc2e8hStcF5U0dMLEoKAg60EOxGBA==", - "dev": true, + "node_modules/@smithy/util-waiter": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.5.tgz", + "integrity": "sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g==", + "license": "Apache-2.0", "dependencies": { - "@typescript-eslint/eslint-plugin": "5.30.6", - "@typescript-eslint/parser": "5.30.6", - "babel-eslint": "10.1.0", - "eslint": "8.19.0", - "eslint-config-airbnb-base": "15.0.0", - "eslint-config-prettier": "8.5.0", - "eslint-import-resolver-typescript": "2.7.1", - "eslint-plugin-deprecation": "1.3.2", - "eslint-plugin-import": "2.26.0", - "eslint-plugin-jsx-a11y": "6.6.0", - "eslint-plugin-prettier": "4.2.1", - "eslint-plugin-react": "7.30.1", - "eslint-plugin-react-hooks": "4.6.0", - "eslint-plugin-react-native": "4.0.0", - "eslint-plugin-taro": "3.3.20", - "prettier": "2.7.1" + "@smithy/abort-controller": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@tootallnate/once": { @@ -1962,67 +3580,6 @@ "node": ">=10.12.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sdk": { - "version": "2.1176.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1176.0.tgz", - "integrity": "sha512-jinSKjACYHIkkz0UlFwQXwz8HAHZIeJg5wOnZoMTKU3/WM6Vh26hZJJ6XkwDAfBmyWp3V9qFdQoSAiO8SeXKjw==", - "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.4.19" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aws-sdk/node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" - }, - "node_modules/aws-sdk/node_modules/uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/aws-sdk/node_modules/xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "node_modules/aws-sdk/node_modules/xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -2114,7 +3671,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", @@ -2270,6 +3828,12 @@ "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." }, + "node_modules/bowser": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", + "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2321,13 +3885,13 @@ } }, "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "license": "MIT", "dependencies": { "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "ieee754": "^1.1.4" } }, "node_modules/buffer-crc32": { @@ -3316,6 +4880,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -3575,6 +5140,7 @@ "version": "1.20.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -3611,6 +5177,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -3631,6 +5198,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4583,11 +6151,12 @@ } }, "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { - "node": ">=0.4.x" + "node": ">=0.8.x" } }, "node_modules/express": { @@ -4773,6 +6342,24 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -4918,14 +6505,6 @@ "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -5118,6 +6697,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -5141,6 +6721,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5303,6 +6884,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -5607,6 +7189,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5624,6 +7207,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -5896,9 +7480,24 @@ } }, "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.2.0", @@ -5977,6 +7576,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -5999,21 +7599,6 @@ "node": ">= 0.10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -6024,6 +7609,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -6047,6 +7633,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6062,6 +7649,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -6084,6 +7672,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6128,20 +7717,6 @@ "node": ">=8" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -6158,6 +7733,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -6178,6 +7754,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6234,6 +7811,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -6257,6 +7835,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6271,6 +7850,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -6293,24 +7873,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -6332,6 +7894,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -6351,7 +7914,8 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", @@ -6522,14 +8086,6 @@ "node": ">=8" } }, - "node_modules/jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/js-stringify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", @@ -8005,6 +9561,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -8013,6 +9570,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -8790,11 +10348,6 @@ "once": "^1.3.1" } }, - "node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" - }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -8852,15 +10405,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -9140,6 +10684,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -9980,6 +11525,16 @@ "node": ">= 0.6" } }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -10036,6 +11591,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -10049,6 +11605,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -10109,6 +11666,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/superagent": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz", @@ -10408,9 +11977,10 @@ "dev": true }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", @@ -10529,6 +12099,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -10543,6 +12114,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -10593,15 +12165,6 @@ "node": ">=6" } }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, "node_modules/urllib": { "version": "2.38.0", "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.38.0.tgz", @@ -10627,19 +12190,6 @@ "node": ">= 0.10.0" } }, - "node_modules/util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -10790,6 +12340,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -10807,25 +12358,6 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "node_modules/which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/win-release": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", diff --git a/package.json b/package.json index 1f5e6327..8f484853 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,10 @@ "lint": "eslint src" }, "dependencies": { + "@aws-sdk/client-s3": "^3.932.0", + "@aws-sdk/lib-storage": "^3.932.0", "aliyun-oss-upload-stream": "1.3.0", "aliyun-sdk": "1.12.4", - "aws-sdk": "2.1176.0", "bcryptjs": "2.4.3", "body-parser": "1.20.0", "cookie-parser": "1.4.6", diff --git a/src/core/utils/storage.ts b/src/core/utils/storage.ts index b23ddddb..ca9d0087 100644 --- a/src/core/utils/storage.ts +++ b/src/core/utils/storage.ts @@ -1,8 +1,11 @@ import fs from 'fs'; import path from 'path'; + +import { S3Client } from '@aws-sdk/client-s3'; +import { Upload } from '@aws-sdk/lib-storage'; + import ALYOSSStream from 'aliyun-oss-upload-stream'; import ALY from 'aliyun-sdk'; -import AWS from 'aws-sdk'; import COS from 'cos-nodejs-sdk-v5'; import fsextra from 'fs-extra'; import { Logger } from 'kv-logger'; @@ -90,35 +93,50 @@ function uploadFileToS3(key: string, filePath: string, logger: Logger): Promise< const finalKey = prefix ? `${prefix}${key}` : key; logger.info('uploadFileToS3 resolved finalKey', { key: finalKey }); - AWS.config.update({ - accessKeyId: _.get(config, 's3.accessKeyId'), - secretAccessKey: _.get(config, 's3.secretAccessKey'), - sessionToken: _.get(config, 's3.sessionToken'), - region: _.get(config, 's3.region'), + const accessKeyId = _.get(config, 's3.accessKeyId'); + const secretAccessKey = _.get(config, 's3.secretAccessKey'); + const sessionToken = _.get(config, 's3.sessionToken'); + const region = _.get(config, 's3.region'); + const bucketName = _.get(config, 's3.bucketName'); + + if (!accessKeyId || !secretAccessKey) { + reject(new AppError('Invalid AWS Credentials')); + return; + } + + const s3Client = new S3Client({ + region, + credentials: { + accessKeyId, + secretAccessKey, + ...(sessionToken && { sessionToken }), + }, }); - const s3 = new AWS.S3(); - fs.readFile(filePath, (err, data) => { - if (err) { - reject(new AppError(err)); - return; - } - s3.upload( - { - Key: finalKey, // prefix 적용된 key - Body: data, - ACL: 'public-read', - Bucket: _.get(config, 's3.bucketName'), - }, - (error: Error) => { - if (error) { - reject(new AppError(error)); - } else { - logger.info('uploadFileToS3 success', { key: finalKey }); - resolve(); - } - }, - ); + + const bodyStream = fs.createReadStream(filePath); + + const upload = new Upload({ + client: s3Client, + params: { + Bucket: bucketName, + Key: finalKey, // prefix 적용된 key + Body: bodyStream, + ACL: 'public-read', // 구버전 함수의 ACL 유지 + }, }); + + upload + .done() + .then(() => { + logger.info('uploadFileToS3 success', { key: finalKey }); + resolve(); + }) + .catch((error: unknown) => { + if (error instanceof Error) { + reject(new AppError(error)); + } + reject(new AppError(String(error))); + }); }); } diff --git a/src/routes/index.ts b/src/routes/index.ts index 2f1cb32c..9a4507dd 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -12,11 +12,13 @@ indexRouter.get('/', (req, res) => { indexRouter.get('/healthcheck', (req: Req, res) => { const message = req.t('hot update server'); + const timestamp = new Date().toISOString(); + res.status(200).json({ success: true, lang: req.lang, message, - timestamp: new Date().toISOString(), + timestamp, }); }); From 6425254a9566426f499de19012c292e251da8058 Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Mon, 17 Nov 2025 16:59:33 +0900 Subject: [PATCH 345/347] feat: enforce web UI access control on index, auth, and users routes using ipWhitelistOnly and webUiGuard middleware --- .env.example | 2 ++ src/app.ts | 13 ++++++++--- src/core/config.ts | 16 ++++++++++++-- src/core/middleware.ts | 47 ++++++++++++++++++++++++++++++++++++++++ src/core/utils/common.ts | 9 ++++++++ src/routes/index.ts | 9 ++++++-- 6 files changed, 89 insertions(+), 7 deletions(-) diff --git a/.env.example b/.env.example index 1228ce25..20be7a64 100644 --- a/.env.example +++ b/.env.example @@ -105,3 +105,5 @@ COS_BUCKET_NAME= COS_REGION= COS_DOWNLOAD_URL= +# The value should be a comma-separated list of IP addresses, e.g., "127.0.0.1,10.0.0.1". +WEB_UI_WHITELIST= diff --git a/src/app.ts b/src/app.ts index 481a37a8..22a76101 100644 --- a/src/app.ts +++ b/src/app.ts @@ -8,7 +8,14 @@ import { logger } from 'kv-logger'; import { AppError, NotFound } from './core/app-error'; import { config } from './core/config'; import { i18n } from './core/i18n'; -import { i18nMiddleware, Req, Res, withLogger } from './core/middleware'; +import { + i18nMiddleware, + ipWhitelistOnly, + Req, + Res, + webUiGuard, + withLogger, +} from './core/middleware'; import { accessKeysRouter } from './routes/accessKeys'; import { accountRouter } from './routes/account'; import { appsRouter } from './routes/apps'; @@ -89,8 +96,8 @@ app.use('/accessKeys', accessKeysRouter); app.use('/apps', appsRouter); app.use('/account', accountRouter); // code-push-server routes -app.use('/auth', authRouter); -app.use('/users', usersRouter); +app.use('/auth', [ipWhitelistOnly, webUiGuard], authRouter); +app.use('/users', [ipWhitelistOnly, webUiGuard], usersRouter); // 404 handler // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/src/core/config.ts b/src/core/config.ts index 186898ca..e41f339d 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -7,6 +7,8 @@ import { withLogLevelFilter, } from 'kv-logger'; +const env = process.env.NODE_ENV || 'development'; + function toBool(str: string): boolean { return str === 'true' || str === '1'; } @@ -125,8 +127,19 @@ export const config = { updateCheckCache: toBool(process.env.UPDATE_CHECK_CACHE), // options value is (true | false), when it's true, it will cache rollout results in redis rolloutClientUniqueIdCache: toBool(process.env.ROLLOUT_CLIENT_UNIQUE_ID_CACHE), + // NODE_ENV value. This determines the current running environment (e.g., development, staging, production). + env, + /** + * whitelist for allowing access to the web UI. + * When in production or when registration is disabled, only IPs listed here will be allowed to access the web UI. + * The value should be a comma-separated list of IP addresses, e.g., "127.0.0.1,10.0.0.1". + */ + webUIWhitelist: (process.env.WEB_UI_WHITELIST || '') + .split(',') + .map((ip) => ip.trim()) + .filter(Boolean), }, - // Config for smtp email,register module need validate user email project source https://github.com/nodemailer/nodemailer + // Config for smtp email, register module need validate user email project source https://github.com/nodemailer/nodemailer smtpConfig: { host: process.env.SMTP_HOST, port: toNumber(process.env.SMTP_PORT, 465), @@ -153,7 +166,6 @@ setLogTransports( ), ); -const env = process.env.NODE_ENV || 'development'; logger.info(`use config`, { env, storageType: config.common.storageType, diff --git a/src/core/middleware.ts b/src/core/middleware.ts index 085dea1e..294982cc 100644 --- a/src/core/middleware.ts +++ b/src/core/middleware.ts @@ -10,6 +10,7 @@ import { Users, UsersInterface } from '../models/users'; import { AppError, Unauthorized } from './app-error'; import { config } from './config'; import { t } from './i18n'; +import { shouldHideWebUI } from './utils/common'; import { parseToken, md5 } from './utils/security'; export type LocaleI18n = 'en' | 'ko' | 'zh'; @@ -164,3 +165,49 @@ export function i18nMiddleware(req: Req, res: Res, next: NextFunction) { next(); } + +export function webUiGuard(req: Req, res: Response, next: NextFunction) { + if (!shouldHideWebUI()) { + return next(); + } + + req.logger?.info?.('blocked web UI access', { + path: req.path, + method: req.method, + }); + + return res.status(405).send('Method Not Allowed'); +} + +export function ipWhitelistOnly(req: Req, res: Response, next: NextFunction) { + const whitelist = config.common.webUIWhitelist || []; + + if (!Array.isArray(whitelist) || whitelist.length === 0) { + return next(); + } + + const defaultIp = req.ip; + const forwardedFor = req.headers['x-forwarded-for']; + + const realIp = Array.isArray(forwardedFor) + ? forwardedFor[0] + : forwardedFor?.split(',')[0]?.trim() || defaultIp; + + const isAllowed = whitelist.includes(realIp); + + if (!isAllowed) { + req.logger?.info?.('IP whitelist blocked', { + requestIp: realIp, + path: req.path, + }); + + return res.status(403).send('Forbidden'); + } + + req.logger?.info?.('IP whitelist allowed', { + requestIp: realIp, + path: req.path, + }); + + return next(); +} diff --git a/src/core/utils/common.ts b/src/core/utils/common.ts index 64241911..8a47c2c3 100644 --- a/src/core/utils/common.ts +++ b/src/core/utils/common.ts @@ -13,6 +13,15 @@ import { config } from '../config'; const streamPipeline = util.promisify(pipeline); +/** 프로덕션이거나, ALLOW_REGISTRATION !== true 이면 UI 숨김 */ +export function shouldHideWebUI(): boolean { + const env = config.common.env || process.env.NODE_ENV; + const isProdEnv = env === 'production'; + const allowRegistration = Boolean(config.common.allowRegistration); + + return isProdEnv || !allowRegistration; +} + function cleanVersion(versionNo?: string) { if (typeof versionNo !== 'string') { return versionNo as any; diff --git a/src/routes/index.ts b/src/routes/index.ts index 9a4507dd..28b109c8 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -1,12 +1,17 @@ import express from 'express'; import { AppError } from '../core/app-error'; import { i18n } from '../core/i18n'; -import { checkToken, Req } from '../core/middleware'; +import { checkToken, ipWhitelistOnly, Req, webUiGuard } from '../core/middleware'; import { clientManager } from '../core/services/client-manager'; export const indexRouter = express.Router(); -indexRouter.get('/', (req, res) => { +/** + * 프로덕션 레벨 미들웨어 적용 + * - ipWhitelistOnly: IP주소 검사 + * - webUiGuard: NODE_ENV='production' OR ALLOW_REGISTRATION='true' + */ +indexRouter.get('/', [ipWhitelistOnly, webUiGuard], (req, res) => { res.render('index', { title: 'CodePushServer' }); }); From 6763eaa2519972a109ee353b5ba20b3299ba6981 Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Fri, 19 Dec 2025 18:21:36 +0900 Subject: [PATCH 346/347] feat: control web UI access via shouldHideWebUI and WEB_UI_ALLOW --- .env.example | 1 + src/core/config.ts | 2 ++ src/core/utils/common.ts | 8 +++----- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index 20be7a64..05e0ef59 100644 --- a/.env.example +++ b/.env.example @@ -107,3 +107,4 @@ COS_DOWNLOAD_URL= # The value should be a comma-separated list of IP addresses, e.g., "127.0.0.1,10.0.0.1". WEB_UI_WHITELIST= +WEB_UI_ALLOW= diff --git a/src/core/config.ts b/src/core/config.ts index e41f339d..fd84a4b3 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -138,6 +138,8 @@ export const config = { .split(',') .map((ip) => ip.trim()) .filter(Boolean), + // options value is (true | false), when it's true, web UI routes are enabled (still restricted by IP whitelist if configured) + webUIAllow: toBool(process.env.WEB_UI_ALLOW), }, // Config for smtp email, register module need validate user email project source https://github.com/nodemailer/nodemailer smtpConfig: { diff --git a/src/core/utils/common.ts b/src/core/utils/common.ts index 8a47c2c3..69fa14ca 100644 --- a/src/core/utils/common.ts +++ b/src/core/utils/common.ts @@ -13,13 +13,11 @@ import { config } from '../config'; const streamPipeline = util.promisify(pipeline); -/** 프로덕션이거나, ALLOW_REGISTRATION !== true 이면 UI 숨김 */ +/** WEB_UI_ALLOW !== true 이면 UI 숨김 */ export function shouldHideWebUI(): boolean { - const env = config.common.env || process.env.NODE_ENV; - const isProdEnv = env === 'production'; - const allowRegistration = Boolean(config.common.allowRegistration); + const allowWebUiInProd = config.common.webUIAllow; - return isProdEnv || !allowRegistration; + return !allowWebUiInProd; } function cleanVersion(versionNo?: string) { From 7c306cd8becc98eb7925151e57918cb73c3d245c Mon Sep 17 00:00:00 2001 From: plingdevelop Date: Mon, 22 Dec 2025 16:28:07 +0900 Subject: [PATCH 347/347] chore: add docs for login and access token issuance --- README.cn.md | 17 +++++++++++++++++ README.ko.md | 12 ++++++++++++ README.md | 13 +++++++++++++ src/core/services/account-manager.ts | 2 +- src/routes/accessKeys.ts | 9 +++++---- src/routes/index.ts | 2 +- views/tokens.pug | 2 +- 7 files changed, 50 insertions(+), 7 deletions(-) diff --git a/README.cn.md b/README.cn.md index 183ec9dc..f5410094 100644 --- a/README.cn.md +++ b/README.cn.md @@ -47,6 +47,19 @@ - 帐号: `admin` - 密码: `123456` +## 登录并获取访问令牌 + +```sh +code-push login https:// +``` + +- 运行以上命令后将打开浏览器 → 登录账号 → 生成访问令牌 +- 令牌生成后,请将其输入回 CLI 终端以完成登录 +- WEB_UI_WHITELIST_IPS:允许访问 Web UI 的 IP 白名单(逗号分隔) + 例如:127.0.0.1,10.0.0.1 +- 访问令牌的有效期为 30 天。 +- WEB_UI_ALLOW:仅当该值设置为 true 时,才允许访问 Web UI + ## 常见问题 - [修改密码](https://github.com/lisong/code-push-server/issues/43) @@ -59,3 +72,7 @@ - `>=1.2.3 <1.2.7` - `~1.2.3` - `^1.2.3` + +``` + +``` diff --git a/README.ko.md b/README.ko.md index 1c8b11ec..9d2e3bc5 100644 --- a/README.ko.md +++ b/README.ko.md @@ -89,6 +89,18 @@ Microsoft 공식 CodePush 서비스는 아시아 지역에서 속도가 느린 - 계정: `admin` - 비밀번호: `123456` +## 로그인 및 엑세스 토큰 발급하기 + +```sh +code-push login https:// +``` + +- 위 커맨드를 통해 웹브라우저 오픈하기 +- 토큰 발급 후 CLI 터미널에 입력 +- 토큰 유효기간은 약 30일 +- WEB_UI_WHITELIST_IPS: e.g., 127.0.0.1,10.0.0.1 +- WEB_UI_ALLOW: true인 경우에만 웹브라우저 UI 노출 허용 + ## FAQ - [비밀번호 변경](https://github.com/lisong/code-push-server/issues/43) diff --git a/README.md b/README.md index c2bb93f2..193e98e0 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,19 @@ check out the [code-push-cli](https://github.com/shm-open/code-push-cli) which w - account: `admin` - password: `123456` +## Login and Access Token Issuance + +```sh +code-push login https:// +``` + +- Run the command above to open the web browser → authenticate → issue an access token +- After the token is issued, enter it back into the CLI terminal when prompted +- The access token is valid for 30 days. +- WEB_UI_WHITELIST_IPS: Comma-separated list of allowed IP addresses + e.g. 127.0.0.1,10.0.0.1 +- WEB_UI_ALLOW: Web UI access is enabled only when this value is set to true + ## FAQ - [modify password](https://github.com/lisong/code-push-server/issues/43) diff --git a/src/core/services/account-manager.ts b/src/core/services/account-manager.ts index 3b705951..20f3523a 100644 --- a/src/core/services/account-manager.ts +++ b/src/core/services/account-manager.ts @@ -69,7 +69,7 @@ class AccountManager { }); } - isExsitAccessKeyName(uid: number, friendlyName: string) { + isExistAccessKeyName(uid: number, friendlyName: string) { return UserTokens.findOne({ where: { uid, name: friendlyName }, }); diff --git a/src/routes/accessKeys.ts b/src/routes/accessKeys.ts index 8f739972..55bdba95 100644 --- a/src/routes/accessKeys.ts +++ b/src/routes/accessKeys.ts @@ -12,11 +12,11 @@ export const accessKeysRouter = express.Router(); accessKeysRouter.get('/', checkToken, (req: Req, res, next) => { const { logger } = req; const uid = req.users.id; - logger.info('try get acceesKeys', { uid }); + logger.info('try get accessKeys', { uid }); accountManager .getAllAccessKeyByUid(uid) .then((accessKeys) => { - logger.info('get acceesKeys success', { uid }); + logger.info('get accessKeys success', { uid }); res.send({ accessKeys }); }) .catch((e) => { @@ -44,7 +44,8 @@ accessKeysRouter.post( const uid = req.users.id; const createdBy = _.trim(body.createdBy); const friendlyName = _.trim(body.friendlyName); - const ttl = parseInt(body.ttl, 10); + // TODO: 엑세스토큰 만료일을 수정하고 싶은 경우 tokens.pug 에서 전송되는 ttl을 수정 + const ttl = parseInt(body.ttl, 10); // 현재 호출부 기본값 30일 = 60*60*24*30*1000 const description = _.trim(body.description); logger.info('try to generate access key', { uid, @@ -52,7 +53,7 @@ accessKeysRouter.post( body: JSON.stringify(body), }); return accountManager - .isExsitAccessKeyName(uid, friendlyName) + .isExistAccessKeyName(uid, friendlyName) .then((data) => { if (!_.isEmpty(data)) { throw new AppError(`The access key "${friendlyName}" already exists.`); diff --git a/src/routes/index.ts b/src/routes/index.ts index 28b109c8..d738e854 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -9,7 +9,7 @@ export const indexRouter = express.Router(); /** * 프로덕션 레벨 미들웨어 적용 * - ipWhitelistOnly: IP주소 검사 - * - webUiGuard: NODE_ENV='production' OR ALLOW_REGISTRATION='true' + * - webUiGuard: WEB_UI_ALLOW='true' */ indexRouter.get('/', [ipWhitelistOnly, webUiGuard], (req, res) => { res.render('index', { title: 'CodePushServer' }); diff --git a/views/tokens.pug b/views/tokens.pug index dad6f499..0f918501 100644 --- a/views/tokens.pug +++ b/views/tokens.pug @@ -33,7 +33,7 @@ block js createdBy = 'Login-' + time; } - // TODO: make ttl and friendlyNamee configurable + // TODO: make ttl and friendlyName configurable var postParams = { createdBy: createdBy, friendlyName: "Login-" + time,