diff --git a/APIDOCS.md b/APIDOCS.md
index 5886492..04c716b 100644
--- a/APIDOCS.md
+++ b/APIDOCS.md
@@ -20,18 +20,21 @@ But in front end, the API will works with session.
- POST `/api/users/:id/delete` for delete user.
- POST `/api/users/:id/undelete` for undelete user.
- POST `/api/users/:id/admin` for give admin permissions for a user.
+- POST `/api/users/:id/edit` for edit user.
- GET `/api/threads/:id` for fetch thread.
- GET `/api/threads/:id/messages/` for fetch messages in thread.
- POST `/api/threads` for create thread.
- POST `/api/threads/:id/delete` for delete thread.
- POST `/api/threads/:id/undelete` for undelete thread.
+- POST `/api/threads/:id/edit` for edit thread.
- GET `/api/messages/:id` for fetch message.
- POST `/api/messages` for create message.
- POST `/api/messages/:id/delete` for delete message.
- POST `/api/messages/:id/undelete` for undelete message.
- POST `/api/messages/:id/react/:type` for react to a message.
+- POST `/api/messages/:id/edit` for edit message.
### Example request:
GET ```/api/messages/0```
diff --git a/README.md b/README.md
index 5c106b9..fb37878 100644
--- a/README.md
+++ b/README.md
@@ -31,17 +31,15 @@ Akf-forum has got an API for AJAX, other clients etc. And, you can learn about A
### TO-DO:
- If thread deleted, not show its messages in API.
- Profile photos will store in database
-- regex for pfp for now and
-- admin perm for undelete, thread + message
-- page support for threads, send, if multi page, send => other page
-- message ""
+- replacer function global
- author name of thread
-- page for threads - users
+- page for threads - users []
- API, ?fast=
-- fix error messages, ~~declared as id~~, other...
+- extra ratelimits
+- better edits
### Frontend
-### User
+#### User
| To do | Is done? | Priority |
| ----- | -------- | -------- |
| Login via redirect query | 🟢 | HIGH |
@@ -51,12 +49,12 @@ Akf-forum has got an API for AJAX, other clients etc. And, you can learn about A
| Message count | 🟢 | MEDIUM |
| Delete user | 🟢 | HIGH |
| Undelete | 🟢 | MEDIUM |
-| PM | 🔴 | MEDIUM |
-| About me | 🔴 | LOW |
-| Edit user | 🔴 | HIGH |
-| IP ban | 🔴 | MEDIUM |
+| About me | 🟢 | LOW |
+| Edit user | 🟡 | HIGH |
+| IP ban | 🟢 | MEDIUM |
+| Profile Message | 🔴 | MEDIUM |
-### Messages
+#### Messages
| To do | Is done? | Priority |
| ----- | -------- | -------- |
| Ratelimit | 🟢 | HIGH |
@@ -65,16 +63,16 @@ Akf-forum has got an API for AJAX, other clients etc. And, you can learn about A
| Regex for scripts | 🟢 | HIGH |
| Undelete | 🟢 | MEDIUM |
| React | 🟢 | MEDIUM |
-| Edit | 🔴 | MEDIUM |
+| Edit | 🟢 | MEDIUM |
-### Threads
+#### Threads
| To do | Is done? | Priority |
| ----- | -------- | -------- |
| Ratelimit | 🟢 | HIGH |
| Create | 🟢 | HIGH |
| Delete | 🟢 | HIGH |
| Undelete | 🟢 | MEDIUM |
-| Edit | 🔴 | MEDIUM |
+| Edit | 🟢 | MEDIUM |
### API
| To do | Is done?
@@ -85,17 +83,17 @@ Akf-forum has got an API for AJAX, other clients etc. And, you can learn about A
| Get message & thread & user | 🟢
| Delete message & thread & user | 🟢
| Undelete message & thread & user | 🟢
-| Edit message & thread & user | 🔴
+| Edit message & thread & user | 🟢
### Other
| To do | Is done? | Priority |
| ----- | -------- | -------- |
| from form to AJAX | 🟢 | HIGH |
| auto-scroll | 🟢 | LOW |
+| Page support, support message limit correct | 🟢 | MEDIUM |
| Multi-theme support, black theme | 🟡 | LOW |
| Search | 🔴 | MEDIUM |
-| Page support, support message limit correct | 🔴 | MEDIUM |
-| Locales | 🔴 | MEDIUM |
+| Locales | 🔴 | LOW |
| Footer | 🔴 | LOW |
## Major Version History
- V3: New Theme
diff --git a/index.js b/index.js
index 689aec9..346f839 100644
--- a/index.js
+++ b/index.js
@@ -1,37 +1,43 @@
const { def_theme } = require("./config.json"),
- session = require('express-session'),
- { UserModel } = require("./models"),
- bodyParser = require('body-parser'),
- port = process.env.PORT || 3000,
- mongoose = require("mongoose"),
- express = require('express'),
- fs = require("fs"),
- app = express();
+ ipBlock = require('express-ip-block'),
+ session = require('express-session'),
+ { UserModel, BanModel } = require("./models"),
+ bodyParser = require('body-parser'),
+ port = process.env.PORT || 3000,
+ mongoose = require("mongoose"),
+ express = require('express'),
+ fs = require("fs"),
+ app = express();
+app.ips = [];
require("dotenv").config();
-mongoose.connect(process.env.MONGO_DB_URL, () => console.log("Database is connected"));
+mongoose.connect(process.env.MONGO_DB_URL,
+ async () => console.log("Connected to mongoDB with", app.ips = await BanModel.find({}).select("ip"), "banned IPs"));
-app.use(session({ secret: 'secret', resave: true, saveUninitialized: true }));
-app.use(bodyParser.urlencoded({ extended: true }));
-app.use(express.static("public"));
app.set("view engine", "ejs");
-app.use(express.json());
-app.use(async (req, res, next) => {
+
+app.use(session({ secret: 'secret', resave: true, saveUninitialized: true }),
+ bodyParser.urlencoded({ extended: true }),
+ express.static("public"), express.json(), ipBlock(app.ips),
+ async (req, res, next) => {
req.user = await UserModel.get(req.session.userid);
res.reply = (page, options = {}, status = 200) => res.status(status)
- .render(page, { user: req.user, theme: req.user?.theme || def_theme, ...options });
+ .render(page, { user: req.user, theme: req.user?.theme || def_theme, ...options });
res.error = (type, error) => res.reply("error", { type, error }, type);
if (req.user?.deleted) {
- req.session.destroy();
- return res.error(403, "Your account has been deleted.");
+ req.session.destroy();
+ return res.error(403, "Your account has been deleted.");
}
next();
-});
+ }
+);
+
+
for (const file of fs.readdirSync("./routes"))
- app.use("/" + file.replace(".js", ""), require(`./routes/${file}`));
+ app.use("/" + file.replace(".js", ""), require(`./routes/${file}`));
app.all("*", (req, res) => res.error(404, "We have not got this page."));
diff --git a/models/Ban.js b/models/Ban.js
new file mode 100644
index 0000000..1c1288c
--- /dev/null
+++ b/models/Ban.js
@@ -0,0 +1,7 @@
+const mongoose = require("mongoose")
+
+const schema = new mongoose.Schema({
+ ip: { type: String, unique: true }
+});
+
+module.exports = mongoose.model('ban', schema);
\ No newline at end of file
diff --git a/models/Message.js b/models/Message.js
index 5cdeff9..3d562c5 100644
--- a/models/Message.js
+++ b/models/Message.js
@@ -14,9 +14,7 @@ const schema = new mongoose.Schema({
react: {
like: [Number],
dislike: [Number]
- },
- index: { type: Number, default: 0 }
-
+ }
})
schema.virtual('authorID').get(function () { return this.author?.id; });
diff --git a/models/Thread.js b/models/Thread.js
index 32c6144..43e86b8 100644
--- a/models/Thread.js
+++ b/models/Thread.js
@@ -1,5 +1,6 @@
-const mongoose = require("mongoose")
-const UserModel = require("./User");
+const mongoose = require("mongoose");
+const UserModel = require("./User");
+const MessageModel = require("./Message");
const schema = new mongoose.Schema({
id: { type: String, unique: true },
@@ -8,13 +9,19 @@ const schema = new mongoose.Schema({
title: String,
time: { type: Date, default: Date.now },
deleted: { type: Boolean, default: false },
+ edited: { type: Boolean, default: false },
+
messages: [String],
views: { type: Number, default: 0 }
});
-schema.virtual('authorID').get(function() { return this.author?.id; });
-
+schema.virtual('authorID').get(function () { return this.author?.id; });
+schema.methods.messageCount = async function (admin = false) {
+ const query = { threadID: this.id };
+ if (!admin) query.deleted = false;
+ return await MessageModel.count(query) || 0;
+};
schema.methods.push = function (messageID) {
this.messages.push(messageID);
return this;
diff --git a/models/User.js b/models/User.js
index d1b3426..f4da18a 100644
--- a/models/User.js
+++ b/models/User.js
@@ -7,6 +7,8 @@ const schema = new mongoose.Schema({
avatar: { type: String, default: "/images/guest.png" },
time: { type: Date, default: Date.now },
deleted: { type: Boolean, default: false },
+ edited: { type: Boolean, default: false },
+ about: { type: String, default: "" },
admin: { type: Boolean, default: false },
theme: { type: String, default: def_theme }
diff --git a/models/index.js b/models/index.js
index 78d66db..13e4237 100644
--- a/models/index.js
+++ b/models/index.js
@@ -1,6 +1,7 @@
const UserModel = require("./User"),
MessageModel = require("./Message"),
ThreadModel = require("./Thread"),
- SecretModel = require("./Secret");
+ SecretModel = require("./Secret"),
+ BanModel = require("./Ban");
-module.exports = { UserModel, MessageModel, ThreadModel, SecretModel };
\ No newline at end of file
+module.exports = { UserModel, MessageModel, ThreadModel, SecretModel, BanModel };
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 5d1cf6d..7aac1f0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,9 +14,15 @@
"dotenv": "^16.0.1",
"ejs": "^3.1.6",
"express": "^4.17.3",
+ "express-ip-block": "^0.1.2",
"express-rate-limit": "^6.5.1",
"express-session": "^1.17.2",
- "mongoose": "^6.5.1"
+ "i": "^0.3.7",
+ "mongoose": "^6.5.1",
+ "npm": "^8.18.0"
+ },
+ "engines": {
+ "node": ">=16"
}
},
"node_modules/@mapbox/node-pre-gyp": {
@@ -487,6 +493,11 @@
"node": ">= 0.10.0"
}
},
+ "node_modules/express-ip-block": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/express-ip-block/-/express-ip-block-0.1.2.tgz",
+ "integrity": "sha512-+GcEOAM6Voete7BmG9pU8b4XAmzsQGj37aIJKF/D4Sbk4q2INJ4D7FyZJq8hwfHZG8s5wuZxYSO7brIlB+0s5w=="
+ },
"node_modules/express-rate-limit": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.5.1.tgz",
@@ -707,6 +718,14 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "node_modules/i": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz",
+ "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -1091,6 +1110,2299 @@
"node": ">=6"
}
},
+ "node_modules/npm": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-8.18.0.tgz",
+ "integrity": "sha512-G07/yKvNUwhwxYhk8BxcuDPB/4s+y755i6CnH3lf9LQBHP5siUx66WbuNGWEnN3xaBER4+IR3OWApKX7eBO5Dw==",
+ "bundleDependencies": [
+ "@isaacs/string-locale-compare",
+ "@npmcli/arborist",
+ "@npmcli/ci-detect",
+ "@npmcli/config",
+ "@npmcli/fs",
+ "@npmcli/map-workspaces",
+ "@npmcli/package-json",
+ "@npmcli/run-script",
+ "abbrev",
+ "archy",
+ "cacache",
+ "chalk",
+ "chownr",
+ "cli-columns",
+ "cli-table3",
+ "columnify",
+ "fastest-levenshtein",
+ "glob",
+ "graceful-fs",
+ "hosted-git-info",
+ "ini",
+ "init-package-json",
+ "is-cidr",
+ "json-parse-even-better-errors",
+ "libnpmaccess",
+ "libnpmdiff",
+ "libnpmexec",
+ "libnpmfund",
+ "libnpmhook",
+ "libnpmorg",
+ "libnpmpack",
+ "libnpmpublish",
+ "libnpmsearch",
+ "libnpmteam",
+ "libnpmversion",
+ "make-fetch-happen",
+ "minipass",
+ "minipass-pipeline",
+ "mkdirp",
+ "mkdirp-infer-owner",
+ "ms",
+ "node-gyp",
+ "nopt",
+ "npm-audit-report",
+ "npm-install-checks",
+ "npm-package-arg",
+ "npm-pick-manifest",
+ "npm-profile",
+ "npm-registry-fetch",
+ "npm-user-validate",
+ "npmlog",
+ "opener",
+ "p-map",
+ "pacote",
+ "parse-conflict-json",
+ "proc-log",
+ "qrcode-terminal",
+ "read",
+ "read-package-json",
+ "read-package-json-fast",
+ "readdir-scoped-modules",
+ "rimraf",
+ "semver",
+ "ssri",
+ "tar",
+ "text-table",
+ "tiny-relative-date",
+ "treeverse",
+ "validate-npm-package-name",
+ "which",
+ "write-file-atomic"
+ ],
+ "dependencies": {
+ "@isaacs/string-locale-compare": "^1.1.0",
+ "@npmcli/arborist": "^5.0.4",
+ "@npmcli/ci-detect": "^2.0.0",
+ "@npmcli/config": "^4.2.1",
+ "@npmcli/fs": "^2.1.0",
+ "@npmcli/map-workspaces": "^2.0.3",
+ "@npmcli/package-json": "^2.0.0",
+ "@npmcli/run-script": "^4.2.1",
+ "abbrev": "~1.1.1",
+ "archy": "~1.0.0",
+ "cacache": "^16.1.1",
+ "chalk": "^4.1.2",
+ "chownr": "^2.0.0",
+ "cli-columns": "^4.0.0",
+ "cli-table3": "^0.6.2",
+ "columnify": "^1.6.0",
+ "fastest-levenshtein": "^1.0.12",
+ "glob": "^8.0.1",
+ "graceful-fs": "^4.2.10",
+ "hosted-git-info": "^5.0.0",
+ "ini": "^3.0.0",
+ "init-package-json": "^3.0.2",
+ "is-cidr": "^4.0.2",
+ "json-parse-even-better-errors": "^2.3.1",
+ "libnpmaccess": "^6.0.2",
+ "libnpmdiff": "^4.0.2",
+ "libnpmexec": "^4.0.2",
+ "libnpmfund": "^3.0.1",
+ "libnpmhook": "^8.0.2",
+ "libnpmorg": "^4.0.2",
+ "libnpmpack": "^4.0.2",
+ "libnpmpublish": "^6.0.2",
+ "libnpmsearch": "^5.0.2",
+ "libnpmteam": "^4.0.2",
+ "libnpmversion": "^3.0.1",
+ "make-fetch-happen": "^10.2.0",
+ "minipass": "^3.1.6",
+ "minipass-pipeline": "^1.2.4",
+ "mkdirp": "^1.0.4",
+ "mkdirp-infer-owner": "^2.0.0",
+ "ms": "^2.1.2",
+ "node-gyp": "^9.1.0",
+ "nopt": "^6.0.0",
+ "npm-audit-report": "^3.0.0",
+ "npm-install-checks": "^5.0.0",
+ "npm-package-arg": "^9.1.0",
+ "npm-pick-manifest": "^7.0.1",
+ "npm-profile": "^6.2.0",
+ "npm-registry-fetch": "^13.3.1",
+ "npm-user-validate": "^1.0.1",
+ "npmlog": "^6.0.2",
+ "opener": "^1.5.2",
+ "p-map": "^4.0.0",
+ "pacote": "^13.6.2",
+ "parse-conflict-json": "^2.0.2",
+ "proc-log": "^2.0.1",
+ "qrcode-terminal": "^0.12.0",
+ "read": "~1.0.7",
+ "read-package-json": "^5.0.1",
+ "read-package-json-fast": "^2.0.3",
+ "readdir-scoped-modules": "^1.1.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.7",
+ "ssri": "^9.0.1",
+ "tar": "^6.1.11",
+ "text-table": "~0.2.0",
+ "tiny-relative-date": "^1.3.0",
+ "treeverse": "^2.0.0",
+ "validate-npm-package-name": "^4.0.0",
+ "which": "^2.0.2",
+ "write-file-atomic": "^4.0.1"
+ },
+ "bin": {
+ "npm": "bin/npm-cli.js",
+ "npx": "bin/npx-cli.js"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16"
+ }
+ },
+ "node_modules/npm/node_modules/@colors/colors": {
+ "version": "1.5.0",
+ "inBundle": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/npm/node_modules/@gar/promisify": {
+ "version": "1.1.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/@isaacs/string-locale-compare": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/@npmcli/arborist": {
+ "version": "5.6.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@isaacs/string-locale-compare": "^1.1.0",
+ "@npmcli/installed-package-contents": "^1.0.7",
+ "@npmcli/map-workspaces": "^2.0.3",
+ "@npmcli/metavuln-calculator": "^3.0.1",
+ "@npmcli/move-file": "^2.0.0",
+ "@npmcli/name-from-folder": "^1.0.1",
+ "@npmcli/node-gyp": "^2.0.0",
+ "@npmcli/package-json": "^2.0.0",
+ "@npmcli/query": "^1.1.1",
+ "@npmcli/run-script": "^4.1.3",
+ "bin-links": "^3.0.0",
+ "cacache": "^16.0.6",
+ "common-ancestor-path": "^1.0.1",
+ "json-parse-even-better-errors": "^2.3.1",
+ "json-stringify-nice": "^1.1.4",
+ "minimatch": "^5.1.0",
+ "mkdirp": "^1.0.4",
+ "mkdirp-infer-owner": "^2.0.0",
+ "nopt": "^6.0.0",
+ "npm-install-checks": "^5.0.0",
+ "npm-package-arg": "^9.0.0",
+ "npm-pick-manifest": "^7.0.0",
+ "npm-registry-fetch": "^13.0.0",
+ "npmlog": "^6.0.2",
+ "pacote": "^13.6.1",
+ "parse-conflict-json": "^2.0.1",
+ "proc-log": "^2.0.0",
+ "promise-all-reject-late": "^1.0.0",
+ "promise-call-limit": "^1.0.1",
+ "read-package-json-fast": "^2.0.2",
+ "readdir-scoped-modules": "^1.1.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.7",
+ "ssri": "^9.0.0",
+ "treeverse": "^2.0.0",
+ "walk-up-path": "^1.0.0"
+ },
+ "bin": {
+ "arborist": "bin/index.js"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/ci-detect": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/config": {
+ "version": "4.2.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/map-workspaces": "^2.0.2",
+ "ini": "^3.0.0",
+ "mkdirp-infer-owner": "^2.0.0",
+ "nopt": "^6.0.0",
+ "proc-log": "^2.0.0",
+ "read-package-json-fast": "^2.0.3",
+ "semver": "^7.3.5",
+ "walk-up-path": "^1.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/disparity-colors": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "ansi-styles": "^4.3.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/fs": {
+ "version": "2.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@gar/promisify": "^1.1.3",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/git": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/promise-spawn": "^3.0.0",
+ "lru-cache": "^7.4.4",
+ "mkdirp": "^1.0.4",
+ "npm-pick-manifest": "^7.0.0",
+ "proc-log": "^2.0.0",
+ "promise-inflight": "^1.0.1",
+ "promise-retry": "^2.0.1",
+ "semver": "^7.3.5",
+ "which": "^2.0.2"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/installed-package-contents": {
+ "version": "1.0.7",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-bundled": "^1.1.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ },
+ "bin": {
+ "installed-package-contents": "index.js"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/map-workspaces": {
+ "version": "2.0.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/name-from-folder": "^1.0.1",
+ "glob": "^8.0.1",
+ "minimatch": "^5.0.1",
+ "read-package-json-fast": "^2.0.3"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/metavuln-calculator": {
+ "version": "3.1.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "cacache": "^16.0.0",
+ "json-parse-even-better-errors": "^2.3.1",
+ "pacote": "^13.0.3",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/move-file": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/name-from-folder": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/@npmcli/node-gyp": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/package-json": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "json-parse-even-better-errors": "^2.3.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/promise-spawn": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "infer-owner": "^1.0.4"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/query": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-package-arg": "^9.1.0",
+ "postcss-selector-parser": "^6.0.10",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/run-script": {
+ "version": "4.2.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/node-gyp": "^2.0.0",
+ "@npmcli/promise-spawn": "^3.0.0",
+ "node-gyp": "^9.0.0",
+ "read-package-json-fast": "^2.0.3",
+ "which": "^2.0.2"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@tootallnate/once": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/npm/node_modules/abbrev": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/agent-base": {
+ "version": "6.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/agentkeepalive": {
+ "version": "4.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.1.0",
+ "depd": "^1.1.2",
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/npm/node_modules/aproba": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/archy": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/are-we-there-yet": {
+ "version": "3.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/asap": {
+ "version": "2.0.6",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/bin-links": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "cmd-shim": "^5.0.0",
+ "mkdirp-infer-owner": "^2.0.0",
+ "npm-normalize-package-bin": "^1.0.0",
+ "read-cmd-shim": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "write-file-atomic": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/builtins": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/cacache": {
+ "version": "16.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/fs": "^2.1.0",
+ "@npmcli/move-file": "^2.0.0",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.1.0",
+ "glob": "^8.0.1",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^7.7.1",
+ "minipass": "^3.1.6",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "mkdirp": "^1.0.4",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^9.0.0",
+ "tar": "^6.1.11",
+ "unique-filename": "^1.1.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/chalk": {
+ "version": "4.1.2",
+ "inBundle": true,
+ "license": "MIT",
+ "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/npm/node_modules/chownr": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/cidr-regex": {
+ "version": "3.1.1",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "ip-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/clean-stack": {
+ "version": "2.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/cli-columns": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/npm/node_modules/cli-table3": {
+ "version": "0.6.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": "10.* || >= 12.*"
+ },
+ "optionalDependencies": {
+ "@colors/colors": "1.5.0"
+ }
+ },
+ "node_modules/npm/node_modules/clone": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/npm/node_modules/cmd-shim": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "mkdirp-infer-owner": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/color-convert": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/color-name": {
+ "version": "1.1.4",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/color-support": {
+ "version": "1.1.3",
+ "inBundle": true,
+ "license": "ISC",
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/npm/node_modules/columnify": {
+ "version": "1.6.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "strip-ansi": "^6.0.1",
+ "wcwidth": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/common-ancestor-path": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/concat-map": {
+ "version": "0.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/cssesc": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/debug": {
+ "version": "4.3.4",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/npm/node_modules/debug/node_modules/ms": {
+ "version": "2.1.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/debuglog": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/defaults": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "clone": "^1.0.2"
+ }
+ },
+ "node_modules/npm/node_modules/delegates": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/depd": {
+ "version": "1.1.2",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/npm/node_modules/dezalgo": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "asap": "^2.0.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/npm/node_modules/diff": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/npm/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/encoding": {
+ "version": "0.1.13",
+ "inBundle": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
+ "node_modules/npm/node_modules/env-paths": {
+ "version": "2.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/err-code": {
+ "version": "2.0.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/fastest-levenshtein": {
+ "version": "1.0.12",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/npm/node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/function-bind": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/gauge": {
+ "version": "4.0.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/glob": {
+ "version": "8.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/has": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/npm/node_modules/has-flag": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/has-unicode": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/hosted-git-info": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^7.5.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16"
+ }
+ },
+ "node_modules/npm/node_modules/http-cache-semantics": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/npm/node_modules/http-proxy-agent": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tootallnate/once": "2",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/npm/node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/npm/node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "inBundle": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/ignore-walk": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/npm/node_modules/indent-string": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/infer-owner": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/inflight": {
+ "version": "1.0.6",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/npm/node_modules/inherits": {
+ "version": "2.0.4",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/ini": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/init-package-json": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-package-arg": "^9.0.1",
+ "promzard": "^0.3.0",
+ "read": "^1.0.7",
+ "read-package-json": "^5.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4",
+ "validate-npm-package-name": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/ip": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/ip-regex": {
+ "version": "4.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/is-cidr": {
+ "version": "4.0.2",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "cidr-regex": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/is-core-module": {
+ "version": "2.10.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/npm/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/is-lambda": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/isexe": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/json-stringify-nice": {
+ "version": "1.1.4",
+ "inBundle": true,
+ "license": "ISC",
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/jsonparse": {
+ "version": "1.3.1",
+ "engines": [
+ "node >= 0.2.0"
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/just-diff": {
+ "version": "5.1.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/just-diff-apply": {
+ "version": "5.4.1",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/libnpmaccess": {
+ "version": "6.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "minipass": "^3.1.1",
+ "npm-package-arg": "^9.0.1",
+ "npm-registry-fetch": "^13.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmdiff": {
+ "version": "4.0.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/disparity-colors": "^2.0.0",
+ "@npmcli/installed-package-contents": "^1.0.7",
+ "binary-extensions": "^2.2.0",
+ "diff": "^5.0.0",
+ "minimatch": "^5.0.1",
+ "npm-package-arg": "^9.0.1",
+ "pacote": "^13.6.1",
+ "tar": "^6.1.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmexec": {
+ "version": "4.0.11",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/arborist": "^5.0.0",
+ "@npmcli/ci-detect": "^2.0.0",
+ "@npmcli/fs": "^2.1.1",
+ "@npmcli/run-script": "^4.2.0",
+ "chalk": "^4.1.0",
+ "mkdirp-infer-owner": "^2.0.0",
+ "npm-package-arg": "^9.0.1",
+ "npmlog": "^6.0.2",
+ "pacote": "^13.6.1",
+ "proc-log": "^2.0.0",
+ "read": "^1.0.7",
+ "read-package-json-fast": "^2.0.2",
+ "semver": "^7.3.7",
+ "walk-up-path": "^1.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmfund": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/arborist": "^5.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmhook": {
+ "version": "8.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "npm-registry-fetch": "^13.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmorg": {
+ "version": "4.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "npm-registry-fetch": "^13.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmpack": {
+ "version": "4.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/run-script": "^4.1.3",
+ "npm-package-arg": "^9.0.1",
+ "pacote": "^13.6.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmpublish": {
+ "version": "6.0.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-package-data": "^4.0.0",
+ "npm-package-arg": "^9.0.1",
+ "npm-registry-fetch": "^13.0.0",
+ "semver": "^7.3.7",
+ "ssri": "^9.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmsearch": {
+ "version": "5.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-registry-fetch": "^13.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmteam": {
+ "version": "4.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "npm-registry-fetch": "^13.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmversion": {
+ "version": "3.0.6",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/git": "^3.0.0",
+ "@npmcli/run-script": "^4.1.3",
+ "json-parse-even-better-errors": "^2.3.1",
+ "proc-log": "^2.0.0",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/lru-cache": {
+ "version": "7.13.2",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/npm/node_modules/make-fetch-happen": {
+ "version": "10.2.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "agentkeepalive": "^4.2.1",
+ "cacache": "^16.1.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^7.7.1",
+ "minipass": "^3.1.6",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^2.0.3",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.3",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^7.0.0",
+ "ssri": "^9.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/minimatch": {
+ "version": "5.1.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/minipass": {
+ "version": "3.3.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-collect": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-fetch": {
+ "version": "2.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^3.1.6",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.1.2"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.13"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-json-stream": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "jsonparse": "^1.3.1",
+ "minipass": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-sized": {
+ "version": "1.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/minizlib": {
+ "version": "2.1.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/npm/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/mkdirp-infer-owner": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "infer-owner": "^1.0.4",
+ "mkdirp": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/ms": {
+ "version": "2.1.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/mute-stream": {
+ "version": "0.0.8",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/negotiator": {
+ "version": "0.6.3",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/npm/node_modules/node-gyp": {
+ "version": "9.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^10.0.3",
+ "nopt": "^5.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": "^12.22 || ^14.13 || >=16"
+ }
+ },
+ "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/node-gyp/node_modules/glob": {
+ "version": "7.2.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": {
+ "version": "3.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/node-gyp/node_modules/nopt": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/nopt": {
+ "version": "6.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "^1.0.0"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/normalize-package-data": {
+ "version": "4.0.1",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^5.0.0",
+ "is-core-module": "^2.8.1",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-audit-report": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-bundled": {
+ "version": "1.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/npm-install-checks": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "semver": "^7.1.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/npm-package-arg": {
+ "version": "9.1.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "hosted-git-info": "^5.0.0",
+ "proc-log": "^2.0.1",
+ "semver": "^7.3.5",
+ "validate-npm-package-name": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-packlist": {
+ "version": "5.1.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^8.0.1",
+ "ignore-walk": "^5.0.1",
+ "npm-bundled": "^1.1.2",
+ "npm-normalize-package-bin": "^1.0.1"
+ },
+ "bin": {
+ "npm-packlist": "bin/index.js"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-pick-manifest": {
+ "version": "7.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-install-checks": "^5.0.0",
+ "npm-normalize-package-bin": "^1.0.1",
+ "npm-package-arg": "^9.0.0",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-profile": {
+ "version": "6.2.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-registry-fetch": "^13.0.1",
+ "proc-log": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-registry-fetch": {
+ "version": "13.3.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "make-fetch-happen": "^10.0.6",
+ "minipass": "^3.1.6",
+ "minipass-fetch": "^2.0.3",
+ "minipass-json-stream": "^1.0.1",
+ "minizlib": "^2.1.2",
+ "npm-package-arg": "^9.0.1",
+ "proc-log": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-user-validate": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/npm/node_modules/npmlog": {
+ "version": "6.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/once": {
+ "version": "1.4.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/npm/node_modules/opener": {
+ "version": "1.5.2",
+ "inBundle": true,
+ "license": "(WTFPL OR MIT)",
+ "bin": {
+ "opener": "bin/opener-bin.js"
+ }
+ },
+ "node_modules/npm/node_modules/p-map": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm/node_modules/pacote": {
+ "version": "13.6.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/git": "^3.0.0",
+ "@npmcli/installed-package-contents": "^1.0.7",
+ "@npmcli/promise-spawn": "^3.0.0",
+ "@npmcli/run-script": "^4.1.0",
+ "cacache": "^16.0.0",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.1.0",
+ "infer-owner": "^1.0.4",
+ "minipass": "^3.1.6",
+ "mkdirp": "^1.0.4",
+ "npm-package-arg": "^9.0.0",
+ "npm-packlist": "^5.1.0",
+ "npm-pick-manifest": "^7.0.0",
+ "npm-registry-fetch": "^13.0.1",
+ "proc-log": "^2.0.0",
+ "promise-retry": "^2.0.1",
+ "read-package-json": "^5.0.0",
+ "read-package-json-fast": "^2.0.3",
+ "rimraf": "^3.0.2",
+ "ssri": "^9.0.0",
+ "tar": "^6.1.11"
+ },
+ "bin": {
+ "pacote": "lib/bin.js"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/parse-conflict-json": {
+ "version": "2.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "json-parse-even-better-errors": "^2.3.1",
+ "just-diff": "^5.0.1",
+ "just-diff-apply": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/proc-log": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/promise-all-reject-late": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/promise-call-limit": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/promise-retry": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/promzard": {
+ "version": "0.3.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "read": "1"
+ }
+ },
+ "node_modules/npm/node_modules/qrcode-terminal": {
+ "version": "0.12.0",
+ "inBundle": true,
+ "bin": {
+ "qrcode-terminal": "bin/qrcode-terminal.js"
+ }
+ },
+ "node_modules/npm/node_modules/read": {
+ "version": "1.0.7",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "mute-stream": "~0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/npm/node_modules/read-cmd-shim": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/read-package-json": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^8.0.1",
+ "json-parse-even-better-errors": "^2.3.1",
+ "normalize-package-data": "^4.0.0",
+ "npm-normalize-package-bin": "^1.0.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/read-package-json-fast": {
+ "version": "2.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "json-parse-even-better-errors": "^2.3.0",
+ "npm-normalize-package-bin": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/npm/node_modules/readdir-scoped-modules": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "debuglog": "^1.0.1",
+ "dezalgo": "^1.0.0",
+ "graceful-fs": "^4.1.2",
+ "once": "^1.3.0"
+ }
+ },
+ "node_modules/npm/node_modules/retry": {
+ "version": "0.12.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/npm/node_modules/rimraf": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/npm/node_modules/rimraf/node_modules/glob": {
+ "version": "7.2.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/rimraf/node_modules/minimatch": {
+ "version": "3.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/npm/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "inBundle": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/npm/node_modules/semver": {
+ "version": "7.3.7",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/semver/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/set-blocking": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/socks": {
+ "version": "2.7.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ip": "^2.0.0",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/socks-proxy-agent": {
+ "version": "7.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.3",
+ "socks": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/npm/node_modules/spdx-correct": {
+ "version": "3.1.1",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "inBundle": true,
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/npm/node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/spdx-license-ids": {
+ "version": "3.0.11",
+ "inBundle": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/npm/node_modules/ssri": {
+ "version": "9.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/npm/node_modules/string-width": {
+ "version": "4.2.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/supports-color": {
+ "version": "7.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/tar": {
+ "version": "6.1.11",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/npm/node_modules/text-table": {
+ "version": "0.2.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/tiny-relative-date": {
+ "version": "1.3.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/treeverse": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/unique-filename": {
+ "version": "1.1.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/unique-slug": {
+ "version": "2.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "node_modules/npm/node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/validate-npm-package-name": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "builtins": "^5.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/walk-up-path": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/wcwidth": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "node_modules/npm/node_modules/which": {
+ "version": "2.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/npm/node_modules/wide-align": {
+ "version": "1.1.5",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "node_modules/npm/node_modules/wrappy": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/write-file-atomic": {
+ "version": "4.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/yallist": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
"node_modules/npmlog": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
@@ -1916,6 +4228,11 @@
"vary": "~1.1.2"
}
},
+ "express-ip-block": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/express-ip-block/-/express-ip-block-0.1.2.tgz",
+ "integrity": "sha512-+GcEOAM6Voete7BmG9pU8b4XAmzsQGj37aIJKF/D4Sbk4q2INJ4D7FyZJq8hwfHZG8s5wuZxYSO7brIlB+0s5w=="
+ },
"express-rate-limit": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.5.1.tgz",
@@ -2087,6 +4404,11 @@
}
}
},
+ "i": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz",
+ "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q=="
+ },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -2359,6 +4681,1542 @@
"abbrev": "1"
}
},
+ "npm": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-8.18.0.tgz",
+ "integrity": "sha512-G07/yKvNUwhwxYhk8BxcuDPB/4s+y755i6CnH3lf9LQBHP5siUx66WbuNGWEnN3xaBER4+IR3OWApKX7eBO5Dw==",
+ "requires": {
+ "@isaacs/string-locale-compare": "^1.1.0",
+ "@npmcli/arborist": "^5.0.4",
+ "@npmcli/ci-detect": "^2.0.0",
+ "@npmcli/config": "^4.2.1",
+ "@npmcli/fs": "^2.1.0",
+ "@npmcli/map-workspaces": "^2.0.3",
+ "@npmcli/package-json": "^2.0.0",
+ "@npmcli/run-script": "^4.2.1",
+ "abbrev": "~1.1.1",
+ "archy": "~1.0.0",
+ "cacache": "^16.1.1",
+ "chalk": "^4.1.2",
+ "chownr": "^2.0.0",
+ "cli-columns": "^4.0.0",
+ "cli-table3": "^0.6.2",
+ "columnify": "^1.6.0",
+ "fastest-levenshtein": "^1.0.12",
+ "glob": "^8.0.1",
+ "graceful-fs": "^4.2.10",
+ "hosted-git-info": "^5.0.0",
+ "ini": "^3.0.0",
+ "init-package-json": "^3.0.2",
+ "is-cidr": "^4.0.2",
+ "json-parse-even-better-errors": "^2.3.1",
+ "libnpmaccess": "^6.0.2",
+ "libnpmdiff": "^4.0.2",
+ "libnpmexec": "^4.0.2",
+ "libnpmfund": "^3.0.1",
+ "libnpmhook": "^8.0.2",
+ "libnpmorg": "^4.0.2",
+ "libnpmpack": "^4.0.2",
+ "libnpmpublish": "^6.0.2",
+ "libnpmsearch": "^5.0.2",
+ "libnpmteam": "^4.0.2",
+ "libnpmversion": "^3.0.1",
+ "make-fetch-happen": "^10.2.0",
+ "minipass": "^3.1.6",
+ "minipass-pipeline": "^1.2.4",
+ "mkdirp": "^1.0.4",
+ "mkdirp-infer-owner": "^2.0.0",
+ "ms": "^2.1.2",
+ "node-gyp": "^9.1.0",
+ "nopt": "^6.0.0",
+ "npm-audit-report": "^3.0.0",
+ "npm-install-checks": "^5.0.0",
+ "npm-package-arg": "^9.1.0",
+ "npm-pick-manifest": "^7.0.1",
+ "npm-profile": "^6.2.0",
+ "npm-registry-fetch": "^13.3.1",
+ "npm-user-validate": "^1.0.1",
+ "npmlog": "^6.0.2",
+ "opener": "^1.5.2",
+ "p-map": "^4.0.0",
+ "pacote": "^13.6.2",
+ "parse-conflict-json": "^2.0.2",
+ "proc-log": "^2.0.1",
+ "qrcode-terminal": "^0.12.0",
+ "read": "~1.0.7",
+ "read-package-json": "^5.0.1",
+ "read-package-json-fast": "^2.0.3",
+ "readdir-scoped-modules": "^1.1.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.7",
+ "ssri": "^9.0.1",
+ "tar": "^6.1.11",
+ "text-table": "~0.2.0",
+ "tiny-relative-date": "^1.3.0",
+ "treeverse": "^2.0.0",
+ "validate-npm-package-name": "^4.0.0",
+ "which": "^2.0.2",
+ "write-file-atomic": "^4.0.1"
+ },
+ "dependencies": {
+ "@colors/colors": {
+ "version": "1.5.0",
+ "bundled": true,
+ "optional": true
+ },
+ "@gar/promisify": {
+ "version": "1.1.3",
+ "bundled": true
+ },
+ "@isaacs/string-locale-compare": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "@npmcli/arborist": {
+ "version": "5.6.0",
+ "bundled": true,
+ "requires": {
+ "@isaacs/string-locale-compare": "^1.1.0",
+ "@npmcli/installed-package-contents": "^1.0.7",
+ "@npmcli/map-workspaces": "^2.0.3",
+ "@npmcli/metavuln-calculator": "^3.0.1",
+ "@npmcli/move-file": "^2.0.0",
+ "@npmcli/name-from-folder": "^1.0.1",
+ "@npmcli/node-gyp": "^2.0.0",
+ "@npmcli/package-json": "^2.0.0",
+ "@npmcli/query": "^1.1.1",
+ "@npmcli/run-script": "^4.1.3",
+ "bin-links": "^3.0.0",
+ "cacache": "^16.0.6",
+ "common-ancestor-path": "^1.0.1",
+ "json-parse-even-better-errors": "^2.3.1",
+ "json-stringify-nice": "^1.1.4",
+ "minimatch": "^5.1.0",
+ "mkdirp": "^1.0.4",
+ "mkdirp-infer-owner": "^2.0.0",
+ "nopt": "^6.0.0",
+ "npm-install-checks": "^5.0.0",
+ "npm-package-arg": "^9.0.0",
+ "npm-pick-manifest": "^7.0.0",
+ "npm-registry-fetch": "^13.0.0",
+ "npmlog": "^6.0.2",
+ "pacote": "^13.6.1",
+ "parse-conflict-json": "^2.0.1",
+ "proc-log": "^2.0.0",
+ "promise-all-reject-late": "^1.0.0",
+ "promise-call-limit": "^1.0.1",
+ "read-package-json-fast": "^2.0.2",
+ "readdir-scoped-modules": "^1.1.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.7",
+ "ssri": "^9.0.0",
+ "treeverse": "^2.0.0",
+ "walk-up-path": "^1.0.0"
+ }
+ },
+ "@npmcli/ci-detect": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "@npmcli/config": {
+ "version": "4.2.1",
+ "bundled": true,
+ "requires": {
+ "@npmcli/map-workspaces": "^2.0.2",
+ "ini": "^3.0.0",
+ "mkdirp-infer-owner": "^2.0.0",
+ "nopt": "^6.0.0",
+ "proc-log": "^2.0.0",
+ "read-package-json-fast": "^2.0.3",
+ "semver": "^7.3.5",
+ "walk-up-path": "^1.0.0"
+ }
+ },
+ "@npmcli/disparity-colors": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "ansi-styles": "^4.3.0"
+ }
+ },
+ "@npmcli/fs": {
+ "version": "2.1.2",
+ "bundled": true,
+ "requires": {
+ "@gar/promisify": "^1.1.3",
+ "semver": "^7.3.5"
+ }
+ },
+ "@npmcli/git": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "@npmcli/promise-spawn": "^3.0.0",
+ "lru-cache": "^7.4.4",
+ "mkdirp": "^1.0.4",
+ "npm-pick-manifest": "^7.0.0",
+ "proc-log": "^2.0.0",
+ "promise-inflight": "^1.0.1",
+ "promise-retry": "^2.0.1",
+ "semver": "^7.3.5",
+ "which": "^2.0.2"
+ }
+ },
+ "@npmcli/installed-package-contents": {
+ "version": "1.0.7",
+ "bundled": true,
+ "requires": {
+ "npm-bundled": "^1.1.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "@npmcli/map-workspaces": {
+ "version": "2.0.4",
+ "bundled": true,
+ "requires": {
+ "@npmcli/name-from-folder": "^1.0.1",
+ "glob": "^8.0.1",
+ "minimatch": "^5.0.1",
+ "read-package-json-fast": "^2.0.3"
+ }
+ },
+ "@npmcli/metavuln-calculator": {
+ "version": "3.1.1",
+ "bundled": true,
+ "requires": {
+ "cacache": "^16.0.0",
+ "json-parse-even-better-errors": "^2.3.1",
+ "pacote": "^13.0.3",
+ "semver": "^7.3.5"
+ }
+ },
+ "@npmcli/move-file": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "@npmcli/name-from-folder": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "@npmcli/node-gyp": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "@npmcli/package-json": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "json-parse-even-better-errors": "^2.3.1"
+ }
+ },
+ "@npmcli/promise-spawn": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "infer-owner": "^1.0.4"
+ }
+ },
+ "@npmcli/query": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "npm-package-arg": "^9.1.0",
+ "postcss-selector-parser": "^6.0.10",
+ "semver": "^7.3.7"
+ }
+ },
+ "@npmcli/run-script": {
+ "version": "4.2.1",
+ "bundled": true,
+ "requires": {
+ "@npmcli/node-gyp": "^2.0.0",
+ "@npmcli/promise-spawn": "^3.0.0",
+ "node-gyp": "^9.0.0",
+ "read-package-json-fast": "^2.0.3",
+ "which": "^2.0.2"
+ }
+ },
+ "@tootallnate/once": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "bundled": true,
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "agentkeepalive": {
+ "version": "4.2.1",
+ "bundled": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "depd": "^1.1.2",
+ "humanize-ms": "^1.2.1"
+ }
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "bundled": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "aproba": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "are-we-there-yet": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "bundled": true
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "bin-links": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "cmd-shim": "^5.0.0",
+ "mkdirp-infer-owner": "^2.0.0",
+ "npm-normalize-package-bin": "^1.0.0",
+ "read-cmd-shim": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "write-file-atomic": "^4.0.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "bundled": true
+ },
+ "brace-expansion": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "builtins": {
+ "version": "5.0.1",
+ "bundled": true,
+ "requires": {
+ "semver": "^7.0.0"
+ }
+ },
+ "cacache": {
+ "version": "16.1.2",
+ "bundled": true,
+ "requires": {
+ "@npmcli/fs": "^2.1.0",
+ "@npmcli/move-file": "^2.0.0",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.1.0",
+ "glob": "^8.0.1",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^7.7.1",
+ "minipass": "^3.1.6",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "mkdirp": "^1.0.4",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^9.0.0",
+ "tar": "^6.1.11",
+ "unique-filename": "^1.1.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "bundled": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "chownr": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "cidr-regex": {
+ "version": "3.1.1",
+ "bundled": true,
+ "requires": {
+ "ip-regex": "^4.1.0"
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "bundled": true
+ },
+ "cli-columns": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "cli-table3": {
+ "version": "0.6.2",
+ "bundled": true,
+ "requires": {
+ "@colors/colors": "1.5.0",
+ "string-width": "^4.2.0"
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "cmd-shim": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "mkdirp-infer-owner": "^2.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "bundled": true
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "bundled": true
+ },
+ "columnify": {
+ "version": "1.6.0",
+ "bundled": true,
+ "requires": {
+ "strip-ansi": "^6.0.1",
+ "wcwidth": "^1.0.0"
+ }
+ },
+ "common-ancestor-path": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "debug": {
+ "version": "4.3.4",
+ "bundled": true,
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "bundled": true
+ }
+ }
+ },
+ "debuglog": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "dezalgo": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "asap": "^2.0.0",
+ "wrappy": "1"
+ }
+ },
+ "diff": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "bundled": true
+ },
+ "encoding": {
+ "version": "0.1.13",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
+ "env-paths": {
+ "version": "2.2.1",
+ "bundled": true
+ },
+ "err-code": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "fastest-levenshtein": {
+ "version": "1.0.12",
+ "bundled": true
+ },
+ "fs-minipass": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "gauge": {
+ "version": "4.0.4",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ }
+ },
+ "glob": {
+ "version": "8.0.3",
+ "bundled": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "bundled": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "bundled": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "hosted-git-info": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "lru-cache": "^7.5.1"
+ }
+ },
+ "http-cache-semantics": {
+ "version": "4.1.0",
+ "bundled": true
+ },
+ "http-proxy-agent": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "@tootallnate/once": "2",
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "5.0.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "humanize-ms": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "ms": "^2.0.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.6.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "5.0.1",
+ "bundled": true,
+ "requires": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "bundled": true
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "bundled": true
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "bundled": true
+ },
+ "ini": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "init-package-json": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "npm-package-arg": "^9.0.1",
+ "promzard": "^0.3.0",
+ "read": "^1.0.7",
+ "read-package-json": "^5.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4",
+ "validate-npm-package-name": "^4.0.0"
+ }
+ },
+ "ip": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "ip-regex": {
+ "version": "4.3.0",
+ "bundled": true
+ },
+ "is-cidr": {
+ "version": "4.0.2",
+ "bundled": true,
+ "requires": {
+ "cidr-regex": "^3.1.1"
+ }
+ },
+ "is-core-module": {
+ "version": "2.10.0",
+ "bundled": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "is-lambda": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "bundled": true
+ },
+ "json-stringify-nice": {
+ "version": "1.1.4",
+ "bundled": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "bundled": true
+ },
+ "just-diff": {
+ "version": "5.1.1",
+ "bundled": true
+ },
+ "just-diff-apply": {
+ "version": "5.4.1",
+ "bundled": true
+ },
+ "libnpmaccess": {
+ "version": "6.0.3",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "minipass": "^3.1.1",
+ "npm-package-arg": "^9.0.1",
+ "npm-registry-fetch": "^13.0.0"
+ }
+ },
+ "libnpmdiff": {
+ "version": "4.0.4",
+ "bundled": true,
+ "requires": {
+ "@npmcli/disparity-colors": "^2.0.0",
+ "@npmcli/installed-package-contents": "^1.0.7",
+ "binary-extensions": "^2.2.0",
+ "diff": "^5.0.0",
+ "minimatch": "^5.0.1",
+ "npm-package-arg": "^9.0.1",
+ "pacote": "^13.6.1",
+ "tar": "^6.1.0"
+ }
+ },
+ "libnpmexec": {
+ "version": "4.0.11",
+ "bundled": true,
+ "requires": {
+ "@npmcli/arborist": "^5.0.0",
+ "@npmcli/ci-detect": "^2.0.0",
+ "@npmcli/fs": "^2.1.1",
+ "@npmcli/run-script": "^4.2.0",
+ "chalk": "^4.1.0",
+ "mkdirp-infer-owner": "^2.0.0",
+ "npm-package-arg": "^9.0.1",
+ "npmlog": "^6.0.2",
+ "pacote": "^13.6.1",
+ "proc-log": "^2.0.0",
+ "read": "^1.0.7",
+ "read-package-json-fast": "^2.0.2",
+ "semver": "^7.3.7",
+ "walk-up-path": "^1.0.0"
+ }
+ },
+ "libnpmfund": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "@npmcli/arborist": "^5.0.0"
+ }
+ },
+ "libnpmhook": {
+ "version": "8.0.3",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "npm-registry-fetch": "^13.0.0"
+ }
+ },
+ "libnpmorg": {
+ "version": "4.0.3",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "npm-registry-fetch": "^13.0.0"
+ }
+ },
+ "libnpmpack": {
+ "version": "4.1.2",
+ "bundled": true,
+ "requires": {
+ "@npmcli/run-script": "^4.1.3",
+ "npm-package-arg": "^9.0.1",
+ "pacote": "^13.6.1"
+ }
+ },
+ "libnpmpublish": {
+ "version": "6.0.4",
+ "bundled": true,
+ "requires": {
+ "normalize-package-data": "^4.0.0",
+ "npm-package-arg": "^9.0.1",
+ "npm-registry-fetch": "^13.0.0",
+ "semver": "^7.3.7",
+ "ssri": "^9.0.0"
+ }
+ },
+ "libnpmsearch": {
+ "version": "5.0.3",
+ "bundled": true,
+ "requires": {
+ "npm-registry-fetch": "^13.0.0"
+ }
+ },
+ "libnpmteam": {
+ "version": "4.0.3",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "npm-registry-fetch": "^13.0.0"
+ }
+ },
+ "libnpmversion": {
+ "version": "3.0.6",
+ "bundled": true,
+ "requires": {
+ "@npmcli/git": "^3.0.0",
+ "@npmcli/run-script": "^4.1.3",
+ "json-parse-even-better-errors": "^2.3.1",
+ "proc-log": "^2.0.0",
+ "semver": "^7.3.7"
+ }
+ },
+ "lru-cache": {
+ "version": "7.13.2",
+ "bundled": true
+ },
+ "make-fetch-happen": {
+ "version": "10.2.1",
+ "bundled": true,
+ "requires": {
+ "agentkeepalive": "^4.2.1",
+ "cacache": "^16.1.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^7.7.1",
+ "minipass": "^3.1.6",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^2.0.3",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.3",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^7.0.0",
+ "ssri": "^9.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.1.0",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "minipass": {
+ "version": "3.3.4",
+ "bundled": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "minipass-collect": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-fetch": {
+ "version": "2.1.1",
+ "bundled": true,
+ "requires": {
+ "encoding": "^0.1.13",
+ "minipass": "^3.1.6",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.1.2"
+ }
+ },
+ "minipass-flush": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-json-stream": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "jsonparse": "^1.3.1",
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-pipeline": {
+ "version": "1.2.4",
+ "bundled": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-sized": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "2.1.2",
+ "bundled": true,
+ "requires": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ }
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "mkdirp-infer-owner": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "chownr": "^2.0.0",
+ "infer-owner": "^1.0.4",
+ "mkdirp": "^1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "bundled": true
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "bundled": true
+ },
+ "negotiator": {
+ "version": "0.6.3",
+ "bundled": true
+ },
+ "node-gyp": {
+ "version": "9.1.0",
+ "bundled": true,
+ "requires": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^10.0.3",
+ "nopt": "^5.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "bundled": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "nopt": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ }
+ }
+ },
+ "nopt": {
+ "version": "6.0.0",
+ "bundled": true,
+ "requires": {
+ "abbrev": "^1.0.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "^5.0.0",
+ "is-core-module": "^2.8.1",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ }
+ },
+ "npm-audit-report": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "chalk": "^4.0.0"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.1.2",
+ "bundled": true,
+ "requires": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-install-checks": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "semver": "^7.1.1"
+ }
+ },
+ "npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "npm-package-arg": {
+ "version": "9.1.0",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "^5.0.0",
+ "proc-log": "^2.0.1",
+ "semver": "^7.3.5",
+ "validate-npm-package-name": "^4.0.0"
+ }
+ },
+ "npm-packlist": {
+ "version": "5.1.1",
+ "bundled": true,
+ "requires": {
+ "glob": "^8.0.1",
+ "ignore-walk": "^5.0.1",
+ "npm-bundled": "^1.1.2",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-pick-manifest": {
+ "version": "7.0.1",
+ "bundled": true,
+ "requires": {
+ "npm-install-checks": "^5.0.0",
+ "npm-normalize-package-bin": "^1.0.1",
+ "npm-package-arg": "^9.0.0",
+ "semver": "^7.3.5"
+ }
+ },
+ "npm-profile": {
+ "version": "6.2.1",
+ "bundled": true,
+ "requires": {
+ "npm-registry-fetch": "^13.0.1",
+ "proc-log": "^2.0.0"
+ }
+ },
+ "npm-registry-fetch": {
+ "version": "13.3.1",
+ "bundled": true,
+ "requires": {
+ "make-fetch-happen": "^10.0.6",
+ "minipass": "^3.1.6",
+ "minipass-fetch": "^2.0.3",
+ "minipass-json-stream": "^1.0.1",
+ "minizlib": "^2.1.2",
+ "npm-package-arg": "^9.0.1",
+ "proc-log": "^2.0.0"
+ }
+ },
+ "npm-user-validate": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "npmlog": {
+ "version": "6.0.2",
+ "bundled": true,
+ "requires": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "opener": {
+ "version": "1.5.2",
+ "bundled": true
+ },
+ "p-map": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "pacote": {
+ "version": "13.6.2",
+ "bundled": true,
+ "requires": {
+ "@npmcli/git": "^3.0.0",
+ "@npmcli/installed-package-contents": "^1.0.7",
+ "@npmcli/promise-spawn": "^3.0.0",
+ "@npmcli/run-script": "^4.1.0",
+ "cacache": "^16.0.0",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.1.0",
+ "infer-owner": "^1.0.4",
+ "minipass": "^3.1.6",
+ "mkdirp": "^1.0.4",
+ "npm-package-arg": "^9.0.0",
+ "npm-packlist": "^5.1.0",
+ "npm-pick-manifest": "^7.0.0",
+ "npm-registry-fetch": "^13.0.1",
+ "proc-log": "^2.0.0",
+ "promise-retry": "^2.0.1",
+ "read-package-json": "^5.0.0",
+ "read-package-json-fast": "^2.0.3",
+ "rimraf": "^3.0.2",
+ "ssri": "^9.0.0",
+ "tar": "^6.1.11"
+ }
+ },
+ "parse-conflict-json": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "json-parse-even-better-errors": "^2.3.1",
+ "just-diff": "^5.0.1",
+ "just-diff-apply": "^5.2.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.10",
+ "bundled": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "proc-log": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "promise-all-reject-late": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "promise-call-limit": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "promise-retry": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ }
+ },
+ "promzard": {
+ "version": "0.3.0",
+ "bundled": true,
+ "requires": {
+ "read": "1"
+ }
+ },
+ "qrcode-terminal": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "read": {
+ "version": "1.0.7",
+ "bundled": true,
+ "requires": {
+ "mute-stream": "~0.0.4"
+ }
+ },
+ "read-cmd-shim": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "read-package-json": {
+ "version": "5.0.1",
+ "bundled": true,
+ "requires": {
+ "glob": "^8.0.1",
+ "json-parse-even-better-errors": "^2.3.1",
+ "normalize-package-data": "^4.0.0",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "read-package-json-fast": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "json-parse-even-better-errors": "^2.3.0",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "readdir-scoped-modules": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "debuglog": "^1.0.1",
+ "dezalgo": "^1.0.0",
+ "graceful-fs": "^4.1.2",
+ "once": "^1.3.0"
+ }
+ },
+ "retry": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "glob": "^7.1.3"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "bundled": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "bundled": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "7.3.7",
+ "bundled": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "bundled": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ }
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "bundled": true
+ },
+ "smart-buffer": {
+ "version": "4.2.0",
+ "bundled": true
+ },
+ "socks": {
+ "version": "2.7.0",
+ "bundled": true,
+ "requires": {
+ "ip": "^2.0.0",
+ "smart-buffer": "^4.2.0"
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "7.0.0",
+ "bundled": true,
+ "requires": {
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.3",
+ "socks": "^2.6.2"
+ }
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "bundled": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "bundled": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.11",
+ "bundled": true
+ },
+ "ssri": {
+ "version": "9.0.1",
+ "bundled": true,
+ "requires": {
+ "minipass": "^3.1.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "bundled": 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",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "bundled": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "tar": {
+ "version": "6.1.11",
+ "bundled": true,
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "bundled": true
+ },
+ "tiny-relative-date": {
+ "version": "1.3.0",
+ "bundled": true
+ },
+ "treeverse": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "validate-npm-package-name": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "builtins": "^5.0.0"
+ }
+ },
+ "walk-up-path": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.5",
+ "bundled": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "write-file-atomic": {
+ "version": "4.0.2",
+ "bundled": true,
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "bundled": true
+ }
+ }
+ },
"npmlog": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
diff --git a/package.json b/package.json
index 1d911be..3a804e6 100644
--- a/package.json
+++ b/package.json
@@ -29,8 +29,11 @@
"dotenv": "^16.0.1",
"ejs": "^3.1.6",
"express": "^4.17.3",
+ "express-ip-block": "^0.1.2",
"express-rate-limit": "^6.5.1",
"express-session": "^1.17.2",
- "mongoose": "^6.5.1"
+ "i": "^0.3.7",
+ "mongoose": "^6.5.1",
+ "npm": "^8.18.0"
}
}
diff --git a/public/js/thread.js b/public/js/thread.js
index 4e19852..83a2371 100644
--- a/public/js/thread.js
+++ b/public/js/thread.js
@@ -1,38 +1,40 @@
import request from "./request.js";
-/**
- * Message Sender
- */
-document.getElementById("send")?.addEventListener("submit", async e => {
+window.edit_t = async function (id) {
+ const title = prompt("Enter new title!");
+ const res = await request(`/api/threads/${id}/edit`, "POST", { title });
+ if (res.error) return;
+ alert(`Thread updated`);
+ document.getElementById("title").innerHTML = title;
- e.preventDefault();
- const form = e.target;
- const data = new FormData(form);
- request("/api/messages", "POST", { threadID: data.get("threadID"), content: data.get("content") })
- .then(res => {
- if (res) location.href = `/messages/${res.id}`;
- });
-});
+}
+
+
+window.thread = async function (id, un = "") {
+ const res = await request(`/api/threads/${id}/${un}delete`);
+ if (res.error) return;
-/**
- * OTHER FUNCTIONS
- */
-window.thread = async function (id, un= "") {
- await request(`/api/threads/${id}/${un}delete`);
alert(`Thread ${un}deleted`);
location.reload();
}
+window.edit_message = async function (id) {
+ const content = prompt("Enter new content!");
+ const res = await request(`/api/messages/${id}/edit`, "POST", { content });
+ if (res.error) return;
+
+ alert(`Message updated`);
+ document.getElementById("message-" + id).querySelector(".content").innerHTML = content;
+
+}
window.undelete_message = async function (id) {
const response = await request(`/api/messages/${id}/undelete`);
if (response.deleted) return;
document.getElementById("deleted-" + id).remove();
document.getElementById("dot-" + id).innerHTML = `
DELETE
- EDIT
- `
-
-
+ EDIT`
}
+
window.delete_message = async function (id) {
const response = await request(`/api/messages/${id}/delete`);
if (response.deleted) {
@@ -40,10 +42,10 @@ window.delete_message = async function (id) {
document.getElementById("dots-" + id).innerHTML = `
`+ document.getElementById("dots-" + id).innerHTML;
-
document.getElementById("dot-" + id).innerHTML = `UNDELETE`;
}
}
+
window.react = async function (id, type) {
const res = await request(`/api/messages/${id}/react/${type}`)
document.getElementById(`like-${id}`).innerHTML = res.react.like.length;
diff --git a/routes/api/index.js b/routes/api/index.js
index 51ed703..cc14037 100644
--- a/routes/api/index.js
+++ b/routes/api/index.js
@@ -23,7 +23,7 @@ app.use(async (req, res, next) => {
const user = await SecretModel.findOne({ username });
if (!user)
- return res.error(401, "We have not got any user has got this name")
+ return res.error(401, `We don't have any thread with name ${username}.`)
if (!await bcrypt.compare(password, user.password)) return res.error(401, 'Incorrect Password!');
diff --git a/routes/api/routes/messages.js b/routes/api/routes/messages.js
index fc80d0c..0bc2213 100644
--- a/routes/api/routes/messages.js
+++ b/routes/api/routes/messages.js
@@ -14,6 +14,23 @@ app.get("/:id", async (req, res) => {
res.complate(message.toObject({ virtuals: true }));
+})
+app.post("/:id/edit", async (req, res) => {
+
+ const message = await MessageModel.get(req.params.id);
+
+ if (!message || (message.deleted && req.user && !req.user.admin)) return res.error(404, `We don't have any message with id ${req.params.id}.`);
+
+ if (req.user.id !== message.authorID && !req.user.admin) return res.error(403, "You have not got permission for this.");
+ const { content = null } = req.body;
+ if (!content) return res.error(400, "Missing message content in request body.");
+ message.content = content;
+ message.edited=true;
+
+ await message.save();
+
+ res.complate(message.toObject({ virtuals: true }));
+
})
app.post("/", rateLimit({
@@ -31,7 +48,7 @@ app.post("/", rateLimit({
if (!thread) return res.error(404, `We don't have any thread with id ${threadID}.`);
- const message = await new MessageModel({ content, author: req.user, threadID: thread.id, index: thread.messages.length }).takeId();
+ const message = await new MessageModel({ content, author: req.user, threadID: thread.id }).takeId();
await message.save();
await thread.push(message.id).save();
diff --git a/routes/api/routes/threads.js b/routes/api/routes/threads.js
index a2c6df9..f3985ae 100644
--- a/routes/api/routes/threads.js
+++ b/routes/api/routes/threads.js
@@ -53,7 +53,21 @@ app.post("/", async (req, res) => {
res.complate(thread.toObject({ virtuals: true }));
});
+app.post("/:id/edit", async (req, res) => {
+ const thread = await ThreadModel.get(req.params.id);
+
+ if (!thread || (thread.deleted && req.user && !req.user.admin)) return res.error(404, `We don't have any message with id ${req.params.id}.`);
+
+ if (req.user.id !== thread.authorID && !req.user.admin) return res.error(403, "You have not got permission for this.");
+ const { title = null } = req.body;
+ if (!title) return res.error(400, "Missing thread title in request body.");
+ thread.title = title;
+ await thread.save();
+
+ res.complate(thread.toObject({ virtuals: true }));
+
+})
app.post("/:id/delete", async (req, res) => {
const thread = await ThreadModel.get(req.params.id);
if (!thread || thread.deleted) return res.error(404, `We don't have any thread with id ${req.params.id}.`);
@@ -77,6 +91,8 @@ app.post("/:id/undelete", async (req, res) => {
if (!thread.deleted) return res.error(404, "This thread is not deleted, first, delete it.");
thread.deleted = false;
+ thread.edited=true;
+
await thread.save();
res.complate(thread.toObject({ virtuals: true }));
diff --git a/routes/api/routes/users.js b/routes/api/routes/users.js
index 7f2176d..3cb49ce 100644
--- a/routes/api/routes/users.js
+++ b/routes/api/routes/users.js
@@ -34,7 +34,7 @@ app.post("/:id/undelete/", async (req, res) => {
const member = await UserModel.get(req.params.id);
- if (!member ) return res.error(404, `We don't have any user with id ${req.params.id}.`);
+ if (!member) return res.error(404, `We don't have any user with id ${req.params.id}.`);
if (!member.deleted) return res.error(404, "This user is not deleted, first, delete it.");
@@ -44,6 +44,31 @@ app.post("/:id/undelete/", async (req, res) => {
res.complate(member.toObject({ virtuals: true }));
})
+
+
+app.post("/:id/edit", async (req, res) => {
+
+ const member = await UserModel.get(req.params.id);
+
+ if (!member || (member.deleted && !req.user.admin)) return res.error(404, `We don't have any message with id ${req.params.id}.`);
+
+ if (req.user.id !== member.id && !req.user.admin) return res.error(403, "You have not got permission for this.");
+ const { avatar, name, about } = req.body;
+ if (!avatar && !name) return res.error(400, "Missing member informations in request body.");
+ if (avatar && /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g.test(avatar))
+ member.avatar = avatar;
+ if (name) member.name = name;
+
+ if (about) member.about = about;
+ member.edited = true;
+
+
+ await member.save();
+
+ res.complate(member.toObject({ virtuals: true }));
+
+})
+
app.post("/:id/admin/", async (req, res) => {
const user = req.user;
@@ -54,10 +79,10 @@ app.post("/:id/admin/", async (req, res) => {
if (!user2)
return res.error(404, `We don't have any user with id ${id}.`);
- else {
- user2.admin = true;
- await user2.save()
- }
+
+ user2.admin = true;
+ await user2.save()
+
res.complate(user2);
diff --git a/routes/messages.js b/routes/messages.js
index 26fdc2e..d91fa4d 100644
--- a/routes/messages.js
+++ b/routes/messages.js
@@ -9,7 +9,7 @@ app.get("/:id", async (req, res) => {
if (!message || (message.deleted && req.user && !req.user.admin)) return res.error( 404,
`We don't have any message with id ${req.params.id}.`);
- res.redirect(`/threads/${message.threadID}?scroll=${req.params.id}`);
+ res.redirect(`/threads/${message.threadID}?scroll=${message.id}`);
});
diff --git a/routes/register.js b/routes/register.js
index 7d11d94..1ae4413 100644
--- a/routes/register.js
+++ b/routes/register.js
@@ -14,7 +14,7 @@ app.post("/", async (req, res) => {
req.session.userid = null;
- let { username = null, password: body_pass = null, avatar } = req.body;
+ let { username = null, password: body_pass = null, avatar, about } = req.body;
if (!username || !body_pass) return res.error(res, 400, "You forgot entering some values");
const user = await SecretModel.findOne({ username });
@@ -24,6 +24,9 @@ app.post("/", async (req, res) => {
const user2 = new UserModel({ name: req.body.username })
if (avatar && /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g.test(avatar)) user2.avatar = avatar;
+
+ if (about) user2.about = about;
+
await user2.takeId()
await user2.save();
diff --git a/routes/threads.js b/routes/threads.js
index 769b779..fe4a8fe 100644
--- a/routes/threads.js
+++ b/routes/threads.js
@@ -18,11 +18,14 @@ app.get("/:id/", async (req, res) => {
const { user, params: { id } } = req
- const page = Number(req.query.page || 0);
+ let page = Number(req.query.page || 0);
+
const thread = await ThreadModel.get(id)
+ thread.count = await thread.messageCount(user?.admin);
+ thread.pages = Math.ceil(thread.count / 10);
if (thread && (user?.admin || !thread.deleted)) {
thread.views++;
- const query = { threadID: id };
+ const query = { threadID: id };
if (!user || !user.admin) query.deleted = false;
const messages = await MessageModel.find(query).sort({ time: 1 }).limit(10).skip(page * 10)
@@ -34,13 +37,12 @@ app.get("/:id/", async (req, res) => {
return message.toObject({ virtuals: true });
}))
-
res.reply("thread", { page, thread, messages, scroll: req.query.scroll || thread.messages[0].id });
thread.save();
} else
- res.error(404, "We have not got this thread.");
+ res.error(404, `We don't have any thread with id ${id}.`);
});
diff --git a/routes/users.js b/routes/users.js
index 76400f1..1f20121 100644
--- a/routes/users.js
+++ b/routes/users.js
@@ -18,9 +18,13 @@ app.get("/:id", async (req, res) => {
const message = await MessageModel.count({ "author.id": id });
const thread = await ThreadModel.count({ "author.id": id });
+ member.about = member.about.replaceAll("&", "&")
+ .replaceAll("<", "<").replaceAll(">", ">")
+ .replaceAll("\"", """).replaceAll("'", "'")
+ .replaceAll("\n", "
");
res.reply("user", { member, counts: { message, thread } })
}
- else res.error(404, `We don't have any user with id ${id}.`);
+ else res.error(404, `We don't have any user with id ${id}.`);
});
diff --git a/views/extra/ot.ejs b/views/extra/ot.ejs
deleted file mode 100644
index e69de29..0000000
diff --git a/views/register.ejs b/views/register.ejs
index 81158f9..6a9298b 100644
--- a/views/register.ejs
+++ b/views/register.ejs
@@ -15,10 +15,11 @@
-
+
-
-
+
+
+
diff --git a/views/thread.ejs b/views/thread.ejs
index 99544ad..196519e 100644
--- a/views/thread.ejs
+++ b/views/thread.ejs
@@ -14,7 +14,7 @@
<% }; %>
This thread has been deleted
UNDELETE
@@ -58,6 +58,9 @@
<% if (message.deleted){ %>
<% } %>
+ <% if (message.edited){ %>
+
+ <% } %>
Thread:
<%= counts.thread %>
About:
+
+ <%= member.about %> +
+ + Change name of the user! + + <% if (user?.admin && !member.deleted) {%> + Give admin permissions! + Delete user! - <% if (user?.admin && !member.deleted) {%> - Give admin permissions! - Delete user! -