From 3454e39ea412020ed257f5ee25e207a792f07ab3 Mon Sep 17 00:00:00 2001 From: xion Date: Tue, 25 Jun 2024 00:52:43 +0800 Subject: [PATCH] feat: add admin router manager --- .gitignore | 2 +- app.config.json5 | 4 - package-lock.json | 504 ++++++++++++++++++--------------- package.json | 4 +- src/admin/dashboard/index.ts | 1 + src/admin/dashboard/load.ts | 57 ++++ src/admin/dashboard/manager.ts | 33 +++ src/admin/index.ts | 28 +- src/demo/index.ts | 25 ++ src/models/code.ts | 55 ++++ src/models/user.ts | 63 +++++ src/modules/index.ts | 1 + src/modules/sequelize.ts | 26 ++ src/route.ts | 2 +- src/test/index.ts | 9 - test/db/code.test.ts | 50 ++++ test/db/connect.test.ts | 36 +++ yarn.lock | 299 +++++++++++-------- 18 files changed, 831 insertions(+), 368 deletions(-) delete mode 100644 app.config.json5 create mode 100644 src/admin/dashboard/index.ts create mode 100644 src/admin/dashboard/load.ts create mode 100644 src/admin/dashboard/manager.ts create mode 100644 src/demo/index.ts create mode 100644 src/models/code.ts create mode 100644 src/models/user.ts create mode 100644 src/modules/index.ts create mode 100644 src/modules/sequelize.ts delete mode 100644 src/test/index.ts create mode 100644 test/db/code.test.ts create mode 100644 test/db/connect.test.ts diff --git a/.gitignore b/.gitignore index cc9da60..df18839 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ node_modules dist -# dist/app.cjs +# dist/app.cjs \ No newline at end of file diff --git a/app.config.json5 b/app.config.json5 deleted file mode 100644 index 980cd29..0000000 --- a/app.config.json5 +++ /dev/null @@ -1,4 +0,0 @@ -{ - port: 4000, // 端口 - tokenSecret: 'x2024', -} diff --git a/package-lock.json b/package-lock.json index 2654d9d..6f71ef3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,9 +15,9 @@ "json5": "^2.2.3", "jsonwebtoken": "^9.0.2", "lodash-es": "^4.17.21", - "mongodb": "^6.7.0", - "mongoose": "^8.4.3", "nanoid": "^5.0.7", + "pg": "^8.12.0", + "sequelize": "^6.37.3", "socket.io": "^4.7.5" }, "devDependencies": { @@ -1154,14 +1154,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.7", - "resolved": "https://registry.npmmirror.com/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", - "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", - "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1328,6 +1320,14 @@ "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==", "dev": true }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/eslint": { "version": "8.56.10", "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.10.tgz", @@ -1429,6 +1429,11 @@ "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", "dev": true }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, "node_modules/@types/node": { "version": "20.14.8", "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.14.8.tgz", @@ -1464,10 +1469,10 @@ "@types/superagent": "^8.1.0" } }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + "node_modules/@types/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmmirror.com/@types/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==" }, "node_modules/@types/webpack-env": { "version": "1.18.5", @@ -1475,14 +1480,6 @@ "integrity": "sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==", "dev": true }, - "node_modules/@types/whatwg-url": { - "version": "11.0.5", - "resolved": "https://registry.npmmirror.com/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", - "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", - "dependencies": { - "@types/webidl-conversions": "*" - } - }, "node_modules/@types/yargs": { "version": "17.0.32", "resolved": "https://registry.npmmirror.com/@types/yargs/-/yargs-17.0.32.tgz", @@ -2087,14 +2084,6 @@ "node-int64": "^0.4.0" } }, - "node_modules/bson": { - "version": "6.7.0", - "resolved": "https://registry.npmmirror.com/bson/-/bson-6.7.0.tgz", - "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==", - "engines": { - "node": ">=16.20.1" - } - }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -2707,6 +2696,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dottie": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/dottie/-/dottie-2.0.6.tgz", + "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmmirror.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -3452,6 +3446,14 @@ "node": ">=0.8.19" } }, + "node_modules/inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", + "engines": [ + "node >= 0.4.0" + ] + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", @@ -4451,14 +4453,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/kareem": { - "version": "2.6.3", - "resolved": "https://registry.npmmirror.com/kareem/-/kareem-2.6.3.tgz", - "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", @@ -4515,8 +4509,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", @@ -4615,11 +4608,6 @@ "node": ">= 4.0.0" } }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4707,148 +4695,23 @@ "node": "*" } }, - "node_modules/mongodb": { - "version": "6.7.0", - "resolved": "https://registry.npmmirror.com/mongodb/-/mongodb-6.7.0.tgz", - "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", - "dependencies": { - "@mongodb-js/saslprep": "^1.1.5", - "bson": "^6.7.0", - "mongodb-connection-string-url": "^3.0.0" - }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "engines": { - "node": ">=16.20.1" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", - "socks": "^2.7.1" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "gcp-metadata": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - }, - "socks": { - "optional": true - } + "node": "*" } }, - "node_modules/mongodb-connection-string-url": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", - "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "node_modules/moment-timezone": { + "version": "0.5.45", + "resolved": "https://registry.npmmirror.com/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^13.0.0" - } - }, - "node_modules/mongoose": { - "version": "8.4.3", - "resolved": "https://registry.npmmirror.com/mongoose/-/mongoose-8.4.3.tgz", - "integrity": "sha512-GxPVLD+I/dxVkgcts2r2QmJJvS62/++btVj3RFt8YnHt+DSOp1Qjj62YEvgZaElwIOTcc4KGJM95X5LlrU1qQg==", - "dependencies": { - "bson": "^6.7.0", - "kareem": "2.6.3", - "mongodb": "6.6.2", - "mpath": "0.9.0", - "mquery": "5.0.0", - "ms": "2.1.3", - "sift": "17.1.3" + "moment": "^2.29.4" }, "engines": { - "node": ">=16.20.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" - } - }, - "node_modules/mongoose/node_modules/mongodb": { - "version": "6.6.2", - "resolved": "https://registry.npmmirror.com/mongodb/-/mongodb-6.6.2.tgz", - "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==", - "dependencies": { - "@mongodb-js/saslprep": "^1.1.5", - "bson": "^6.7.0", - "mongodb-connection-string-url": "^3.0.0" - }, - "engines": { - "node": ">=16.20.1" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", - "socks": "^2.7.1" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "gcp-metadata": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - }, - "socks": { - "optional": true - } - } - }, - "node_modules/mongoose/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mpath": { - "version": "0.9.0", - "resolved": "https://registry.npmmirror.com/mpath/-/mpath-0.9.0.tgz", - "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mquery": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/mquery/-/mquery-5.0.0.tgz", - "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", - "dependencies": { - "debug": "4.x" - }, - "engines": { - "node": ">=14.0.0" + "node": "*" } }, "node_modules/ms": { @@ -5146,6 +5009,87 @@ "node": ">=8" } }, + "node_modules/pg": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "dependencies": { + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/pg-pool/-/pg-pool-3.6.2.tgz", + "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz", @@ -5183,6 +5127,41 @@ "node": ">=8" } }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmmirror.com/pretty-format/-/pretty-format-29.7.0.tgz", @@ -5405,6 +5384,11 @@ "node": ">=10" } }, + "node_modules/retry-as-promised": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/retry-as-promised/-/retry-as-promised-7.0.4.tgz", + "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", @@ -5494,6 +5478,75 @@ "node": ">=10" } }, + "node_modules/sequelize": { + "version": "6.37.3", + "resolved": "https://registry.npmmirror.com/sequelize/-/sequelize-6.37.3.tgz", + "integrity": "sha512-V2FTqYpdZjPy3VQrZvjTPnOoLm0KudCRXfGWp48QwhyPPp2yW8z0p0sCYZd/em847Tl2dVxJJ1DR+hF+O77T7A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "dependencies": { + "@types/debug": "^4.1.8", + "@types/validator": "^13.7.17", + "debug": "^4.3.4", + "dottie": "^2.0.6", + "inflection": "^1.13.4", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "moment-timezone": "^0.5.43", + "pg-connection-string": "^2.6.1", + "retry-as-promised": "^7.0.4", + "semver": "^7.5.4", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.9.0", + "wkx": "^0.5.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "ibm_db": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-hstore": { + "optional": true + }, + "snowflake-sdk": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -5579,11 +5632,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sift": { - "version": "17.1.3", - "resolved": "https://registry.npmmirror.com/sift/-/sift-17.1.3.tgz", - "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", @@ -5683,20 +5731,20 @@ "node": ">=0.10.0" } }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "dependencies": { - "memory-pager": "^1.0.2" - } - }, "node_modules/spawn-command": { "version": "0.0.2", "resolved": "https://registry.npmmirror.com/spawn-command/-/spawn-command-0.0.2.tgz", "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", "dev": true }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -5938,6 +5986,11 @@ "node": ">=8.0" } }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" + }, "node_modules/touch": { "version": "3.1.1", "resolved": "https://registry.npmmirror.com/touch/-/touch-3.1.1.tgz", @@ -5947,17 +6000,6 @@ "nodetouch": "bin/nodetouch.js" } }, - "node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", - "dependencies": { - "punycode": "^2.3.0" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmmirror.com/tree-kill/-/tree-kill-1.2.2.tgz", @@ -6184,6 +6226,14 @@ "punycode": "^2.1.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -6204,6 +6254,14 @@ "node": ">=10.12.0" } }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmmirror.com/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", @@ -6233,14 +6291,6 @@ "node": ">=10.13.0" } }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, "node_modules/webpack": { "version": "5.92.1", "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.92.1.tgz", @@ -6372,18 +6422,6 @@ "node": ">=10.13.0" } }, - "node_modules/whatwg-url": { - "version": "13.0.0", - "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-13.0.0.tgz", - "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", - "dependencies": { - "tr46": "^4.1.1", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", @@ -6405,6 +6443,14 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -6461,6 +6507,14 @@ } } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index a4b9e22..ac83d70 100644 --- a/package.json +++ b/package.json @@ -25,9 +25,9 @@ "json5": "^2.2.3", "jsonwebtoken": "^9.0.2", "lodash-es": "^4.17.21", - "mongodb": "^6.7.0", - "mongoose": "^8.4.3", "nanoid": "^5.0.7", + "pg": "^8.12.0", + "sequelize": "^6.37.3", "socket.io": "^4.7.5" }, "devDependencies": { diff --git a/src/admin/dashboard/index.ts b/src/admin/dashboard/index.ts new file mode 100644 index 0000000..b8d1f2b --- /dev/null +++ b/src/admin/dashboard/index.ts @@ -0,0 +1 @@ +export { manager } from './manager.ts'; diff --git a/src/admin/dashboard/load.ts b/src/admin/dashboard/load.ts new file mode 100644 index 0000000..f5fa78e --- /dev/null +++ b/src/admin/dashboard/load.ts @@ -0,0 +1,57 @@ +import { router } from '../../modules/router.ts'; +import { Route } from '@abearxiong/router'; +import { RouterCodeModel, RouterCode } from '../../models/code.ts'; + +enum CodeStatus { + success = 0, + fail = 1, +} + +export type CodeManager = { + fn?: any; + status?: CodeStatus; + errorMsg?: string; +} & Partial; +const codeDemoRun = `async function run(ctx) { + ctx.body = 'test js'; + return ctx; +}`; +export const load = async function () { + const codes = await RouterCodeModel.findAll(); + const codeManager: CodeManager[] = codes.map((item) => { + const { path, key, id, code, project } = item.toJSON(); + console.log('item', item, 'code', item.code); + try { + const fn: any = new Function( + 'ctx', + ` + ${code} + return run(ctx); + `, + ); + // run code + const codeRunRoute = new Route(path, key, { id }); + codeRunRoute.run = fn; + router.add(codeRunRoute); + return { + path, + key, + id, + project, + fn, + status: CodeStatus.success, + }; + } catch (e) { + console.error('error id:', id, '\n', e); + return { + path, + key, + id, + project, + status: CodeStatus.fail, + errorMsg: e.message.toString(), + }; + } + }); + return codeManager; +}; diff --git a/src/admin/dashboard/manager.ts b/src/admin/dashboard/manager.ts new file mode 100644 index 0000000..1670526 --- /dev/null +++ b/src/admin/dashboard/manager.ts @@ -0,0 +1,33 @@ +import { EventEmitter, once } from 'stream'; +import { load, CodeManager } from './load.ts'; + +export enum LoadStatus { + LOADING = 'loading', + LOADED = 'loaded', + ERROR = 'error', +} +export const manager = { + loaded: LoadStatus.LOADING, // 是否已经加载 + list: [] as CodeManager[], +}; + +export const events = new EventEmitter(); + +once(events, 'loaded') + .then(() => { + manager.loaded = LoadStatus.LOADED; + console.log('manager loaded'); + }) + .catch((e) => { + manager.loaded = LoadStatus.ERROR; + console.error('manager loaded error', e); + }); + +const init = async function () { + const r = await load(); + manager.list = r; + + events.emit('loaded'); +}; + +init(); diff --git a/src/admin/index.ts b/src/admin/index.ts index f0e08f4..d9656c4 100644 --- a/src/admin/index.ts +++ b/src/admin/index.ts @@ -1,7 +1,7 @@ // admin 需要最后运行,并在route中进行过滤。 import { Route } from '@abearxiong/router'; import { router } from '../modules/router.ts'; - +import { manager } from './dashboard/manager.ts'; export const getRouterList = new Route('admin', 'getRouterList'); @@ -17,10 +17,10 @@ router.add(getRouterList); export const removeRouter = new Route('admin', 'removeRouter'); removeRouter.run = async (ctx) => { const { path, key } = ctx.query; - router.remove({path, key}); + router.remove({ path, key }); ctx.body = 'success'; return ctx; -} +}; router.add(removeRouter); // remove router by id @@ -30,7 +30,7 @@ removeRouterById.run = async (ctx) => { router.removeById(id); ctx.body = 'success'; return ctx; -} +}; router.add(removeRouterById); // add router @@ -41,7 +41,7 @@ addRouter.run = async (ctx) => { router.add(new Route(path, key)); ctx.body = 'success'; return ctx; -} +}; router.add(addRouter); // update router @@ -51,5 +51,21 @@ updateRouter.run = async (ctx) => { router.add(new Route(path, key)); ctx.body = 'success'; return ctx; -} +}; router.add(updateRouter); + +// get manager status +export const managerRouter = new Route('admin', 'getManagerStatus'); +managerRouter.run = async (ctx) => { + ctx.body = manager.loaded; + return ctx; +}; +router.add(managerRouter); + +// get manager list +export const managerList = new Route('admin', 'getManagerList'); +managerList.run = async (ctx) => { + ctx.body = manager.list; + return ctx; +}; +router.add(managerList); \ No newline at end of file diff --git a/src/demo/index.ts b/src/demo/index.ts new file mode 100644 index 0000000..433749d --- /dev/null +++ b/src/demo/index.ts @@ -0,0 +1,25 @@ +import { router } from '../modules/router.ts'; +import { Route } from '@abearxiong/router'; + +const getList = new Route('test', 'getList'); +getList.run = async (ctx) => { + ctx.body = 'test'; + return ctx; +}; +router.add(getList); + +const codeRun = `async function run(ctx) { + ctx.body = 'test js'; + return ctx; +}`; +const fn: any = new Function( + 'ctx', + ` + ${codeRun} + return run(ctx); +`, +); +const codeRunRoute = new Route('test', 'run'); +codeRunRoute.run = fn; + +router.add(codeRunRoute); diff --git a/src/models/code.ts b/src/models/code.ts new file mode 100644 index 0000000..34644d5 --- /dev/null +++ b/src/models/code.ts @@ -0,0 +1,55 @@ +import { sequelize } from '../modules/sequelize.ts'; +import { DataTypes, Model } from 'sequelize'; + +export type RouterCode = { + id: string; + path: string; + key: string; + active: boolean; + project: string; + code: string; +}; + +export class RouterCodeModel extends Model { + declare id: string; + path: string; + key: string; + active: boolean; + project: string; + public code: string; +} +RouterCodeModel.init( + { + id: { + type: DataTypes.UUID, + primaryKey: true, + defaultValue: DataTypes.UUIDV4, + comment: '用户id', + }, + path: { + type: DataTypes.STRING, + allowNull: false, + }, + key: { + type: DataTypes.STRING, + allowNull: false, + }, + active: { + type: DataTypes.BOOLEAN, + defaultValue: false, + }, + project: { + type: DataTypes.STRING, + defaultValue: 'default', + }, + code: { + type: DataTypes.STRING, + defaultValue: '', + }, + }, + { + sequelize, + tableName: 'cf_router_code', + }, +); +// RouterCodeModel.sync({ alter: true }); diff --git a/src/models/user.ts b/src/models/user.ts new file mode 100644 index 0000000..1bcac11 --- /dev/null +++ b/src/models/user.ts @@ -0,0 +1,63 @@ +import { sequelize } from '@/modules/sequelize.ts'; +import { DataTypes, Model } from 'sequelize'; + +export class User extends Model { + declare id: number; + username: string; + password: string; + salt: string; + remark: string; +} +User.init( + { + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true, + }, + + username: { + type: DataTypes.STRING, + allowNull: false, + }, + password: { + type: DataTypes.STRING, + allowNull: false, + }, + salt: { + type: DataTypes.STRING, + allowNull: false, + }, + remark: { + type: DataTypes.STRING, + }, + }, + { + sequelize, + tableName: 'cf_user', + }, +); +// User.sync({ alter: true }); + +export const initializeUser = async () => { + const w = await User.findOne(); + const password = '2e8a305521bba54f49638ed25e46adf3'; + const salt = '123'; + const users = [ + { username: 'admin' }, + { username: 'user' }, + { username: 'root' }, + ]; + if (!w) { + const newUsers = await User.bulkCreate( + users.map((user) => { + return { + ...user, + password, + salt, + }; + }), + ); + console.info('[create new Users]', newUsers); + } +}; diff --git a/src/modules/index.ts b/src/modules/index.ts new file mode 100644 index 0000000..8b50f47 --- /dev/null +++ b/src/modules/index.ts @@ -0,0 +1 @@ +export { sequelize } from './sequelize.ts'; diff --git a/src/modules/sequelize.ts b/src/modules/sequelize.ts new file mode 100644 index 0000000..e3807d9 --- /dev/null +++ b/src/modules/sequelize.ts @@ -0,0 +1,26 @@ +import { useConfig } from '@abearxiong/use-config'; +import { Sequelize } from 'sequelize'; + +type PostgresConfig = { + postgres: { + username: string; + password: string; + host: string; + port: number; + database: string; + }; +}; +const config = useConfig(); + +const postgresConfig = config.postgres; + +if (!postgresConfig) { + console.error('postgres config is required'); + process.exit(1); +} +// connect to db +export const sequelize = new Sequelize({ + dialect: 'postgres', + ...postgresConfig, + // logging: false, +}); diff --git a/src/route.ts b/src/route.ts index c7365ad..f9ec5cc 100644 --- a/src/route.ts +++ b/src/route.ts @@ -1,6 +1,6 @@ import { router } from './modules/router.ts'; -import './test/index.ts'; +import './demo/index.ts'; import './admin/index.ts'; diff --git a/src/test/index.ts b/src/test/index.ts deleted file mode 100644 index 10c1f97..0000000 --- a/src/test/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { router } from '../modules/router.ts'; -import { Route } from '@abearxiong/router'; - -const getList = new Route('test', 'getList'); -getList.run = async (ctx) => { - ctx.body = 'test'; - return ctx; -}; -router.add(getList); diff --git a/test/db/code.test.ts b/test/db/code.test.ts new file mode 100644 index 0000000..9dea4f7 --- /dev/null +++ b/test/db/code.test.ts @@ -0,0 +1,50 @@ +import { QueryTypes } from 'sequelize'; +import { RouterCodeModel } from '../../src/models/code.ts'; + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); +// yarn test --testNamePattern='RouterCodeModel' +describe('RouterCodeModel', () => { + // 编写一个测试用例 + // yarn test --testNamePattern='RouterCodeModel:init' + test('RouterCodeModel:init', async () => { + try { + RouterCodeModel.sync({ force: true }); + console.log('connect success'); + await sleep(2000); + } catch (error) { + console.error('connect error', error); + } + }); + // yarn test --testNamePattern='RouterCodeModel:create' + test('RouterCodeModel:create', async () => { + try { + const file = await RouterCodeModel.create({ + path: 'demo', + key: 'returnDemo', + active: true, + project: 'default', + code: `async function run(ctx) { + ctx.body = 'test js'; + return ctx; +}`, + }); + console.log('create success', file); + await sleep(2000); + } catch (error) { + console.error('create error', error); + } + }); + // yarn test --testNamePattern='RouterCodeModel:findAll' + test('RouterCodeModel:findAll', async () => { + try { + const files = await RouterCodeModel.findAll(); + console.log( + 'findAll success', + files.map((file) => file.toJSON()), + ); + await sleep(2000); + } catch (error) { + console.error('findAll error', error); + } + }); +}); diff --git a/test/db/connect.test.ts b/test/db/connect.test.ts new file mode 100644 index 0000000..953b3a0 --- /dev/null +++ b/test/db/connect.test.ts @@ -0,0 +1,36 @@ +import { QueryTypes } from 'sequelize'; +import { sequelize } from '../../src/modules/index.ts'; + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); +// yarn test --testNamePattern='Sequelize' +describe('Hello Sequelize', () => { + // 编写一个测试用例 + // yarn test --testNamePattern='Sequelize:connect success' + test('Sequelize:connect success', async () => { + try { + const auth = await sequelize.authenticate(); + console.log('connect success'); + await sleep(2000); + } catch (error) { + console.error('connect error', error); + } + }); + // yarn test --testNamePattern='Sequelize:queryTables' + test('Sequelize:queryTables', async () => { + try { + const tablesCount: any = await sequelize.query( + "SELECT COUNT(*) AS table_count FROM information_schema.tables WHERE table_schema = 'public';", + { type: QueryTypes.SELECT }, + ); + if (!tablesCount[0]) { + console.error('未查询到表数量'); + return; + } + + console.log('数据库中的表数量:', tablesCount[0].table_count); + await sleep(2000); + } catch (error) { + console.error('查询表数量时出错:', error); + } + }); +}); diff --git a/yarn.lock b/yarn.lock index dc4ffd1..00876ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -592,13 +592,6 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@mongodb-js/saslprep@^1.1.5": - version "1.1.7" - resolved "https://registry.npmmirror.com/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz" - integrity sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q== - dependencies: - sparse-bitfield "^3.0.3" - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -724,6 +717,13 @@ resolved "https://registry.npmmirror.com/@types/crypto-js/-/crypto-js-4.2.2.tgz" integrity sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ== +"@types/debug@^4.1.8": + version "4.1.12" + resolved "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + "@types/eslint-scope@^3.7.3": version "3.7.7" resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz" @@ -808,6 +808,11 @@ resolved "https://registry.npmmirror.com/@types/methods/-/methods-1.1.4.tgz" integrity sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ== +"@types/ms@*": + version "0.7.34" + resolved "https://registry.npmmirror.com/@types/ms/-/ms-0.7.34.tgz" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + "@types/node@*", "@types/node@^20.14.8", "@types/node@>=10.0.0": version "20.14.8" resolved "https://registry.npmmirror.com/@types/node/-/node-20.14.8.tgz" @@ -837,23 +842,16 @@ "@types/methods" "^1.1.4" "@types/superagent" "^8.1.0" -"@types/webidl-conversions@*": - version "7.0.3" - resolved "https://registry.npmmirror.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz" - integrity sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA== +"@types/validator@^13.7.17": + version "13.12.0" + resolved "https://registry.npmmirror.com/@types/validator/-/validator-13.12.0.tgz" + integrity sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag== "@types/webpack-env@^1.18.5": version "1.18.5" resolved "https://registry.npmmirror.com/@types/webpack-env/-/webpack-env-1.18.5.tgz" integrity sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA== -"@types/whatwg-url@^11.0.2": - version "11.0.5" - resolved "https://registry.npmmirror.com/@types/whatwg-url/-/whatwg-url-11.0.5.tgz" - integrity sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ== - dependencies: - "@types/webidl-conversions" "*" - "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" @@ -1266,11 +1264,6 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -bson@^6.7.0: - version "6.7.0" - resolved "https://registry.npmmirror.com/bson/-/bson-6.7.0.tgz" - integrity sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ== - buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" @@ -1554,7 +1547,7 @@ dayjs@^1.11.11: resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.11.tgz" integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg== -debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4, debug@4.x: +debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: version "4.3.5" resolved "https://registry.npmmirror.com/debug/-/debug-4.3.5.tgz" integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== @@ -1608,6 +1601,11 @@ diff@^4.0.1: resolved "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +dottie@^2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/dottie/-/dottie-2.0.6.tgz" + integrity sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA== + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.npmmirror.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" @@ -2077,6 +2075,11 @@ imurmurhash@^0.1.4: resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +inflection@^1.13.4: + version "1.13.4" + resolved "https://registry.npmmirror.com/inflection/-/inflection-1.13.4.tgz" + integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz" @@ -2670,11 +2673,6 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" -kareem@2.6.3: - version "2.6.3" - resolved "https://registry.npmmirror.com/kareem/-/kareem-2.6.3.tgz" - integrity sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q== - kind-of@^6.0.2: version "6.0.3" resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz" @@ -2790,11 +2788,6 @@ memfs@^3.4.1: dependencies: fs-monkey "^1.0.4" -memory-pager@^1.0.2: - version "1.5.0" - resolved "https://registry.npmmirror.com/memory-pager/-/memory-pager-1.5.0.tgz" - integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz" @@ -2847,67 +2840,23 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -mongodb-connection-string-url@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz" - integrity sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg== +moment-timezone@^0.5.43: + version "0.5.45" + resolved "https://registry.npmmirror.com/moment-timezone/-/moment-timezone-0.5.45.tgz" + integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== dependencies: - "@types/whatwg-url" "^11.0.2" - whatwg-url "^13.0.0" + moment "^2.29.4" -mongodb@^6.7.0: - version "6.7.0" - resolved "https://registry.npmmirror.com/mongodb/-/mongodb-6.7.0.tgz" - integrity sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA== - dependencies: - "@mongodb-js/saslprep" "^1.1.5" - bson "^6.7.0" - mongodb-connection-string-url "^3.0.0" - -mongodb@6.6.2: - version "6.6.2" - resolved "https://registry.npmmirror.com/mongodb/-/mongodb-6.6.2.tgz" - integrity sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw== - dependencies: - "@mongodb-js/saslprep" "^1.1.5" - bson "^6.7.0" - mongodb-connection-string-url "^3.0.0" - -mongoose@^8.4.3: - version "8.4.3" - resolved "https://registry.npmmirror.com/mongoose/-/mongoose-8.4.3.tgz" - integrity sha512-GxPVLD+I/dxVkgcts2r2QmJJvS62/++btVj3RFt8YnHt+DSOp1Qjj62YEvgZaElwIOTcc4KGJM95X5LlrU1qQg== - dependencies: - bson "^6.7.0" - kareem "2.6.3" - mongodb "6.6.2" - mpath "0.9.0" - mquery "5.0.0" - ms "2.1.3" - sift "17.1.3" - -mpath@0.9.0: - version "0.9.0" - resolved "https://registry.npmmirror.com/mpath/-/mpath-0.9.0.tgz" - integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew== - -mquery@5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/mquery/-/mquery-5.0.0.tgz" - integrity sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg== - dependencies: - debug "4.x" +moment@^2.29.4: + version "2.30.1" + resolved "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== ms@^2.1.1, ms@2.1.2: version "2.1.2" resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - nanoid@^5.0.6, nanoid@^5.0.7: version "5.0.7" resolved "https://registry.npmmirror.com/nanoid/-/nanoid-5.0.7.tgz" @@ -3068,6 +3017,62 @@ path-type@^5.0.0: resolved "https://registry.npmmirror.com/path-type/-/path-type-5.0.0.tgz" integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== +pg-cloudflare@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz" + integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== + +pg-connection-string@^2.6.1, pg-connection-string@^2.6.4: + version "2.6.4" + resolved "https://registry.npmmirror.com/pg-connection-string/-/pg-connection-string-2.6.4.tgz" + integrity sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/pg-int8/-/pg-int8-1.0.1.tgz" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.6.2: + version "3.6.2" + resolved "https://registry.npmmirror.com/pg-pool/-/pg-pool-3.6.2.tgz" + integrity sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg== + +pg-protocol@^1.6.1: + version "1.6.1" + resolved "https://registry.npmmirror.com/pg-protocol/-/pg-protocol-1.6.1.tgz" + integrity sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg== + +pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/pg-types/-/pg-types-2.2.0.tgz" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg@^8.12.0, pg@>=8.0: + version "8.12.0" + resolved "https://registry.npmmirror.com/pg/-/pg-8.12.0.tgz" + integrity sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ== + dependencies: + pg-connection-string "^2.6.4" + pg-pool "^3.6.2" + pg-protocol "^1.6.1" + pg-types "^2.1.0" + pgpass "1.x" + optionalDependencies: + pg-cloudflare "^1.1.1" + +pgpass@1.x: + version "1.0.5" + resolved "https://registry.npmmirror.com/pgpass/-/pgpass-1.0.5.tgz" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + picocolors@^1.0.0, picocolors@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz" @@ -3090,6 +3095,28 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/postgres-array/-/postgres-array-2.0.0.tgz" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.npmmirror.com/postgres-date/-/postgres-date-1.0.7.tgz" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/postgres-interval/-/postgres-interval-1.2.0.tgz" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-29.7.0.tgz" @@ -3112,7 +3139,7 @@ pstree.remy@^1.1.8: resolved "https://registry.npmmirror.com/pstree.remy/-/pstree.remy-1.1.8.tgz" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== -punycode@^2.1.0, punycode@^2.3.0: +punycode@^2.1.0: version "2.3.1" resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== @@ -3206,6 +3233,11 @@ resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +retry-as-promised@^7.0.4: + version "7.0.4" + resolved "https://registry.npmmirror.com/retry-as-promised/-/retry-as-promised-7.0.4.tgz" + integrity sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz" @@ -3264,6 +3296,33 @@ semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: resolved "https://registry.npmmirror.com/semver/-/semver-7.6.2.tgz" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== +sequelize-pool@^7.1.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz" + integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== + +sequelize@^6.37.3: + version "6.37.3" + resolved "https://registry.npmmirror.com/sequelize/-/sequelize-6.37.3.tgz" + integrity sha512-V2FTqYpdZjPy3VQrZvjTPnOoLm0KudCRXfGWp48QwhyPPp2yW8z0p0sCYZd/em847Tl2dVxJJ1DR+hF+O77T7A== + dependencies: + "@types/debug" "^4.1.8" + "@types/validator" "^13.7.17" + debug "^4.3.4" + dottie "^2.0.6" + inflection "^1.13.4" + lodash "^4.17.21" + moment "^2.29.4" + moment-timezone "^0.5.43" + pg-connection-string "^2.6.1" + retry-as-promised "^7.0.4" + semver "^7.5.4" + sequelize-pool "^7.1.0" + toposort-class "^1.0.1" + uuid "^8.3.2" + validator "^13.9.0" + wkx "^0.5.0" + serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: version "6.0.2" resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz" @@ -3317,11 +3376,6 @@ side-channel@^1.0.6: get-intrinsic "^1.2.4" object-inspect "^1.13.1" -sift@17.1.3: - version "17.1.3" - resolved "https://registry.npmmirror.com/sift/-/sift-17.1.3.tgz" - integrity sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ== - signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz" @@ -3409,18 +3463,16 @@ source-map@^0.7.4: resolved "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== -sparse-bitfield@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" - integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== - dependencies: - memory-pager "^1.0.2" - spawn-command@0.0.2: version "0.0.2" resolved "https://registry.npmmirror.com/spawn-command/-/spawn-command-0.0.2.tgz" integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== +split2@^4.1.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz" @@ -3587,18 +3639,16 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toposort-class@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/toposort-class/-/toposort-class-1.0.1.tgz" + integrity sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg== + touch@^3.1.0: version "3.1.1" resolved "https://registry.npmmirror.com/touch/-/touch-3.1.1.tgz" integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== -tr46@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/tr46/-/tr46-4.1.1.tgz" - integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== - dependencies: - punycode "^2.3.0" - tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.npmmirror.com/tree-kill/-/tree-kill-1.2.2.tgz" @@ -3703,6 +3753,11 @@ uri-js@^4.2.2, uri-js@^4.4.1: dependencies: punycode "^2.1.0" +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" @@ -3717,6 +3772,11 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" +validator@^13.9.0: + version "13.12.0" + resolved "https://registry.npmmirror.com/validator/-/validator-13.12.0.tgz" + integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== + vary@^1: version "1.1.2" resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz" @@ -3737,11 +3797,6 @@ watchpack@^2.4.1: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - webpack-cli@^5.1.4, webpack-cli@5.x.x: version "5.1.4" resolved "https://registry.npmmirror.com/webpack-cli/-/webpack-cli-5.1.4.tgz" @@ -3810,14 +3865,6 @@ webpack@^5.0.0, webpack@^5.1.0, webpack@^5.11.0, webpack@^5.90.3, webpack@^5.92. watchpack "^2.4.1" webpack-sources "^3.2.3" -whatwg-url@^13.0.0: - version "13.0.0" - resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-13.0.0.tgz" - integrity sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig== - dependencies: - tr46 "^4.1.1" - webidl-conversions "^7.0.0" - which@^2.0.1: version "2.0.2" resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz" @@ -3830,6 +3877,13 @@ wildcard@^2.0.0: resolved "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== +wkx@^0.5.0: + version "0.5.0" + resolved "https://registry.npmmirror.com/wkx/-/wkx-0.5.0.tgz" + integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg== + dependencies: + "@types/node" "*" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -3857,6 +3911,11 @@ ws@~8.17.1: resolved "https://registry.npmmirror.com/ws/-/ws-8.17.1.tgz" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz"